在 SketchUp Ruby API 中实现动态文本注释的 add_3d_text 时遇到问题

问题描述 投票:0回答:1

您的问题的详细信息是什么? 我正在为 SketchUp 编写 Ruby 脚本,以自动执行在模型中添加文本注释的过程。我需要计算特定组件(“Enkeltreol”和“Dobbeltreol”)的实例,并将其总数显示为模型中的文本。我尝试使用 add_3d_text 方法来实现此目的,但我不断遇到无法解决的 TypeError

您尝试了什么以及您期待什么? 我尝试使用 add_3d_text 方法来创建文本注释,但脚本要么不会在模型中生成文本,要么会导致 TypeError。我希望看到一个文本注释,显示放置在模型中特定点的组件的数量。相反,控制台报告错误,并且不显示任何文本。

我使用的是 SketchUp Pro 版本 23.1.341。

问题:

1:在 SketchUp Ruby API 中使用 add_3d_text 向模型添加动态文本注释的正确方法是什么?

2:如何解决 TypeError 并确保文本在特定点正确添加到模型中?

3:SketchUp Ruby API 中是否有其他方法可以基于模型组件动态显示文本信息?

任何使用 Ruby 在 SketchUp 中正确实现动态文本注释的见解或示例将不胜感激。


这是我一直尝试运行的代码示例:

# Initialize counters
enkeltreol_count = 0
dobbeltreol_count = 0

# Start an operation so it can be undone in one step if needed
model = Sketchup.active_model
model.start_operation('Add Count Text', true)

# Iterate through all entities in the model for counting
definitions = model.definitions
definitions.each do |definition|
  definition.instances.each do |instance|
    if instance.definition.name == "Enkeltreol"
      enkeltreol_count += 1
    elsif instance.definition.name == "Dobbeltreol"
      dobbeltreol_count += 1
    end
  end
end

# Calculate the total number of shelf units
total_shelf_units = enkeltreol_count + (dobbeltreol_count * 2)

# Create a text string that includes the counts
count_text = "Enkeltreol units: #{enkeltreol_count}\nDobbeltreol units: #{dobbeltreol_count}\nTotal shelf units: #{total_shelf_units}"

# Define parameters for the 3D text
font = "Arial"
bold = false
italic = false
height = 10.0 # Height of the text
z = 0.0 # Extrusion depth of the 3D text

# Define the point where the 3D text will be inserted
point = Geom::Point3d.new(10, 0, 0)

# Correctly add the 3D text to the model, placed flat like a label
entities = model.active_entities
entities.add_3d_text(count_text, TextAlignLeft, font, bold, italic, height, z, false, point)

# Commit the operation
model.commit_operation

# Output to the console
puts "Counts have been added to the model as 3D text."

输出

输出到控制台

输入“计数已作为 3D 文本添加到模型中。” 错误:#

:38:在“add_3d_text”中 :38:在“” SketchUp:在“评估”中 => 无
ruby-on-rails ruby text automation sketchup
1个回答
0
投票

您对

add_3d_text
的使用有一些错误。

如 SketchUp API 文档所述:

#add_3d_text(string, alignment, font, is_bold = false, is_italic = false, letter_height = 1.0, tolerance = 0.0, z = 0.0, is_filled = true, extrusion = 0.0) ⇒ Boolean

您的用法缺少公差值,最后一个参数是挤出高度,而不是 3D 位置。

如果要定位新创建的文本,您需要创建一个组,将文本添加到组中,然后设置组转换。

xform = Geom::Transformation.new([10, 0, 0])
group = Sketchup.active_model.entities.add_group()

tolerance = 0
extrusion = 0
group.entities.add_3d_text(count_text, TextAlignLeft, font, bold, italic, height, tolerance, z, false, extrusion)
group.transformation = xform
© www.soinside.com 2019 - 2024. All rights reserved.