"add_cpoint" 在 SketchUp 的方法中不起作用 Ruby
"add_cpoint" not working in a method in SketchUp's Ruby
下面有一段代码,当代码在 SketchUp 的 Ruby 控制台中为 运行 时,在 [2,3,4] 和 [5,6,7] 处绘制了两个点。最终目标是能够让用户 select 一条线并在该线的两端创建点,但我是一步一步来的。
sel = Sketchup.active_model.selection
fp = [2,3,4]
sp = [5,6,7]
fp = fp.map {|a| 39.3701 *a}
sp = sp.map {|a| 39.3701 *a}
p1 = Geom::Point3d.new(fp)
p2 = Geom::Point3d.new(sp)
addpoint1 = entities.add_cpoint p1
addpoint2 = entities.add_cpoint p2
我正在慢慢尝试使这段代码更加用户友好。我试图通过制作它来升级它,所以你需要 select 一条线来在 [2,3,4] 和 [5,6,7].
处创建两个点
此外,数字 39.3701 是将单位转换为我想要的单位(米),SketchUp 有它自己的奇怪单位,我用 'band aid solution'.
解决了这个问题
([2,3,4] [5,6,7] 是硬编码数组,我使用它只是为了查看我是否正确编写了脚本)。
这是我对下一段代码的尝试。
def pointplot
sel = Sketchup.active_model.selection
fp = [2,3,4]
sp = [5,6,7]
fp = fp.map {|a| 39.3701 *a}
sp = sp.map {|a| 39.3701 *a}
p1 = Geom::Point3d.new(fp)
p2 = Geom::Point3d.new(sp)
addpoint1 = entities.add_cpoint p1
addpoint2 = entities.add_cpoint p2
end
def check_line
sel = Sketchup.active_model.selection
ok = sel.find { |e| e.typename == "Edge" }
ok ? MF_ENABLED : MF_GRAYED
end
UI.add_context_menu_handler do |menu|
menu.add_separator
item = menu.add_item("Point Plot") { pointplot }
menu.set_validation_proc(item) {check_line}
end
这段较大的代码将在用户右键单击某行时向菜单添加一个选项。附加功能称为“点图”。
但是,当您单击 'Point Plot' 函数时,它不会在 [2,3,4] 和 [5,6,7] 处创建两个点。
这些行似乎有问题。如果我在这两行之前放一个 UI.messagebox() ,消息框就会出现。但是如果我把 UI.messagebox() 放在这两行之后,它就不会出现。
addpoint1 = entities.add_cpoint p1
addpoint2 = entities.add_cpoint p1
谁能解释一下我 运行 遇到的问题?
谢谢!
这里是在选定边的每个顶点创建 'construction point' 的示例...
model = Sketchup.active_model
entities = model.active_entities
selection = model.selection
edges = selection.grep(Sketchup::Edge)
if edges.empty?
msg = 'Select one or more edges before using this tool.'
UI.messagebox(msg)
return
end
vertices = []
edges.each { |edge| vertices << edge.vertices }
vertices.flatten!
vertices.uniq!
vertices.each { |vertex| entities.add_cpoint vertex.position }
下面有一段代码,当代码在 SketchUp 的 Ruby 控制台中为 运行 时,在 [2,3,4] 和 [5,6,7] 处绘制了两个点。最终目标是能够让用户 select 一条线并在该线的两端创建点,但我是一步一步来的。
sel = Sketchup.active_model.selection
fp = [2,3,4]
sp = [5,6,7]
fp = fp.map {|a| 39.3701 *a}
sp = sp.map {|a| 39.3701 *a}
p1 = Geom::Point3d.new(fp)
p2 = Geom::Point3d.new(sp)
addpoint1 = entities.add_cpoint p1
addpoint2 = entities.add_cpoint p2
我正在慢慢尝试使这段代码更加用户友好。我试图通过制作它来升级它,所以你需要 select 一条线来在 [2,3,4] 和 [5,6,7].
处创建两个点此外,数字 39.3701 是将单位转换为我想要的单位(米),SketchUp 有它自己的奇怪单位,我用 'band aid solution'.
解决了这个问题([2,3,4] [5,6,7] 是硬编码数组,我使用它只是为了查看我是否正确编写了脚本)。
这是我对下一段代码的尝试。
def pointplot
sel = Sketchup.active_model.selection
fp = [2,3,4]
sp = [5,6,7]
fp = fp.map {|a| 39.3701 *a}
sp = sp.map {|a| 39.3701 *a}
p1 = Geom::Point3d.new(fp)
p2 = Geom::Point3d.new(sp)
addpoint1 = entities.add_cpoint p1
addpoint2 = entities.add_cpoint p2
end
def check_line
sel = Sketchup.active_model.selection
ok = sel.find { |e| e.typename == "Edge" }
ok ? MF_ENABLED : MF_GRAYED
end
UI.add_context_menu_handler do |menu|
menu.add_separator
item = menu.add_item("Point Plot") { pointplot }
menu.set_validation_proc(item) {check_line}
end
这段较大的代码将在用户右键单击某行时向菜单添加一个选项。附加功能称为“点图”。
但是,当您单击 'Point Plot' 函数时,它不会在 [2,3,4] 和 [5,6,7] 处创建两个点。
这些行似乎有问题。如果我在这两行之前放一个 UI.messagebox() ,消息框就会出现。但是如果我把 UI.messagebox() 放在这两行之后,它就不会出现。
addpoint1 = entities.add_cpoint p1
addpoint2 = entities.add_cpoint p1
谁能解释一下我 运行 遇到的问题?
谢谢!
这里是在选定边的每个顶点创建 'construction point' 的示例...
model = Sketchup.active_model
entities = model.active_entities
selection = model.selection
edges = selection.grep(Sketchup::Edge)
if edges.empty?
msg = 'Select one or more edges before using this tool.'
UI.messagebox(msg)
return
end
vertices = []
edges.each { |edge| vertices << edge.vertices }
vertices.flatten!
vertices.uniq!
vertices.each { |vertex| entities.add_cpoint vertex.position }