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