SketchUp Ruby - 如果用户单击 SketchUp 中的一行,则向用户显示一个消息框
SketchUp Ruby - Display a message box to user if they clicked on a line in SketchUp
我正在尝试开发一个自定义工具,它允许用户 select 一条线,他们将得到该线的斜距、方位角和天顶角。包含所有这些信息的小 table 将出现在他们的屏幕上。
我目前已经编写了一些代码,您可以在下面看到:
class MySpecialLineTool
def onLButtonDown(flags, x, y, view)
puts "onMButtonDoubleClick: flags = #{flags}"
puts " x = #{x}"
puts " y = #{y}"
puts " view = #{view}"
UI.messagebox("You clicked somewhere in SketchUp.")
end
end
def self.activate_special_tool
Sketchup.active_model.select_tool(MySpecialLineTool.new)
end
unless file_loaded?(__FILE__)
menu = UI.menu('Plugins')
menu.add_item("Darrian's Special Line Tool") {
self.activate_special_tool
}
file_loaded(__FILE__)
end
这将在 SketchUp 顶部的 'Extensions' 选项卡下添加一个名为“Darrian 的专线工具”的工具。当您单击此工具,然后单击 SketchUp 中的任意位置时,会出现一个消息框,显示“您单击了 SketchUp 中的某处”。但仅此而已,到目前为止我已经碰壁了。
下图显示了如果整个事情按预期进行,'should' 会发生什么。
https://i.stack.imgur.com/DPmdF.png
我对这些计算很满意。它只是能够让代码知道一条线已被单击并检索该线的 Delta X、Y 和 Z,以便能够计算斜距、方位角和天顶角。
我不太在意起点和终点。我知道这会对方位角和天顶角产生影响,但我已经在考虑从两个方向向用户提供信息。
如果需要,我可以提供更多信息。
感谢您的帮助!
下面的代码可能会帮助您创建 class 所选边的 X、Y、Z 坐标的顶点开始和结束位置的变量。计算某些数学公式可能需要这些值。让我知道是否有帮助。
我建议使用 Ruby 模块封装您的代码,以使变量或方法名称不会与插件文件夹中的其他 SketchUp 脚本冲突。
module CodeZealot
# # #
module MySpecialLineTool
# # #
class Main
def initialize
@model = Sketchup.active_model
@selection = @model.selection
@edges = @selection.grep(Sketchup::Edge)
@edge = @edges[0]
end
def activate
if @edges.empty?
msg = 'Select edge before using this tool.'
UI.messagebox(msg)
return
end
# # # XYZ Cordinate values of first edge vertex
@edge_start_x = @edge.start.position.x
@edge_start_y = @edge.start.position.y
@edge_start_z = @edge.start.position.z
# # # XYZ Cordinate values of other edge vertex
# These XYZ might be used for MATH formulas maybe?
@edge_end_x = @edge.end.position.x
@edge_end_y = @edge.end.position.y
@edge_end_z = @edge.end.position.z
# call math calculation method here...
math_calculation
end
def math_calculation
# Use class variables for you Math formulas here.
# Example...
result = @edge_start_x + @edge_end_x
msg = "The result = #{result}"
UI.messagebox(msg, MB_OK)
end
end
# # #
def self.activate_special_tool
Sketchup.active_model.select_tool(Main.new)
end
unless file_loaded?(__FILE__)
menu = UI.menu('Plugins')
menu.add_item("Darrian's Special Line Tool") { self.activate_special_tool }
file_loaded(__FILE__)
end
# # #
end
end
我正在尝试开发一个自定义工具,它允许用户 select 一条线,他们将得到该线的斜距、方位角和天顶角。包含所有这些信息的小 table 将出现在他们的屏幕上。
我目前已经编写了一些代码,您可以在下面看到:
class MySpecialLineTool
def onLButtonDown(flags, x, y, view)
puts "onMButtonDoubleClick: flags = #{flags}"
puts " x = #{x}"
puts " y = #{y}"
puts " view = #{view}"
UI.messagebox("You clicked somewhere in SketchUp.")
end
end
def self.activate_special_tool
Sketchup.active_model.select_tool(MySpecialLineTool.new)
end
unless file_loaded?(__FILE__)
menu = UI.menu('Plugins')
menu.add_item("Darrian's Special Line Tool") {
self.activate_special_tool
}
file_loaded(__FILE__)
end
这将在 SketchUp 顶部的 'Extensions' 选项卡下添加一个名为“Darrian 的专线工具”的工具。当您单击此工具,然后单击 SketchUp 中的任意位置时,会出现一个消息框,显示“您单击了 SketchUp 中的某处”。但仅此而已,到目前为止我已经碰壁了。
下图显示了如果整个事情按预期进行,'should' 会发生什么。 https://i.stack.imgur.com/DPmdF.png
我对这些计算很满意。它只是能够让代码知道一条线已被单击并检索该线的 Delta X、Y 和 Z,以便能够计算斜距、方位角和天顶角。
我不太在意起点和终点。我知道这会对方位角和天顶角产生影响,但我已经在考虑从两个方向向用户提供信息。
如果需要,我可以提供更多信息。
感谢您的帮助!
下面的代码可能会帮助您创建 class 所选边的 X、Y、Z 坐标的顶点开始和结束位置的变量。计算某些数学公式可能需要这些值。让我知道是否有帮助。
我建议使用 Ruby 模块封装您的代码,以使变量或方法名称不会与插件文件夹中的其他 SketchUp 脚本冲突。
module CodeZealot
# # #
module MySpecialLineTool
# # #
class Main
def initialize
@model = Sketchup.active_model
@selection = @model.selection
@edges = @selection.grep(Sketchup::Edge)
@edge = @edges[0]
end
def activate
if @edges.empty?
msg = 'Select edge before using this tool.'
UI.messagebox(msg)
return
end
# # # XYZ Cordinate values of first edge vertex
@edge_start_x = @edge.start.position.x
@edge_start_y = @edge.start.position.y
@edge_start_z = @edge.start.position.z
# # # XYZ Cordinate values of other edge vertex
# These XYZ might be used for MATH formulas maybe?
@edge_end_x = @edge.end.position.x
@edge_end_y = @edge.end.position.y
@edge_end_z = @edge.end.position.z
# call math calculation method here...
math_calculation
end
def math_calculation
# Use class variables for you Math formulas here.
# Example...
result = @edge_start_x + @edge_end_x
msg = "The result = #{result}"
UI.messagebox(msg, MB_OK)
end
end
# # #
def self.activate_special_tool
Sketchup.active_model.select_tool(Main.new)
end
unless file_loaded?(__FILE__)
menu = UI.menu('Plugins')
menu.add_item("Darrian's Special Line Tool") { self.activate_special_tool }
file_loaded(__FILE__)
end
# # #
end
end