您的问题的详细信息是什么? 我正在为 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 文本添加到模型中。”
错误:#
您对
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