I am trying to develop a custom tool which will allow the user to select a line and they will be given the slope distance, azimuth and zenith angle of the line. A small table with all that info will then appear on their screen.
I currently have a little bit of code written which you can see below:
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
This will add a tool under the 'Extensions' tab at the top of SketchUp called 'Darrian's Special Line Tool'. When you click on this tool, then click anywhere in SketchUp, a message box appears which says, "You clicked somewhere in SketchUp." But that's about it, I've hit a brick wall so far.
Below is a picture of what 'should' happen if the whole thing worked as intended. https://i.sstatic.net/DPmdF.png
I'm quite okay with the calculations. It's just being able to get the code to know that a line has been clicked and to retrieve the Delta X, Y and Z of that line in order to be able to calculate the slope distance, azimuth and zenith angle.
I'm not too concerned about starting and ending point. I am aware this will have an affect on the azimuth and zenith angle, but I was already thinking of providing information from both directions to the user.
I can provide more info if required.
Thanks for your help!
The code below might help you with creating class variables of the selected edge's vertex start & end positions of X, Y, Z coordinates. These values might be needed to calculate some math formulas. Let me know if it helped or not.
I recommend encapsulating your code with Ruby modules for variable or method names not clashing with other SketchUp scripts on the Plugins folder.
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