Lớp Tool SketchUp
Lớp Tool
là giao diện để triển khai tạo công cụ trong SketchUp (các công cụ như Selection, Line, Circle ...), bạn cần định nghĩa lớp mới và triển khai các phương thức bắt các sự kiện tương ứng.
Vòng đời của công cụ Tool
Tại một thời điểm chỉ có một tool được kích hoạt, mặc định thì đó là công cụ Selection chọn đối tượng.
Để kích hoạt một công cụ cần thi hành phương thức select_tool
của lớp Model.
Ví dụ, để kích hoạt my_tool
(đối tượng) thì thi hành:
Sketchup.active_model.select_tool my_tool
Khi Tool hoàn thành tác vụ nó sẽ bất hoạt, nếu muốn bất hoạt trực tiếp thì gọi phương thức deactivate
Các Event Handler của Tool
Các Event Handler của Tool
Khi xây dựng lớp Tool, cần triển khai các phương thức theo giao diện như activate
, draw
và các phương thức bắt các sự kiện như onKeyUp
, onMouseMove
... gọi là các Event Handler
Event Handler | Mô tả |
onCancel
|
onCancel(reason, view) ⇒ Object
def onCancel(reason, view) puts "Hủy chọn tool ##{reason} trong view: #{view}" end
Được gọi khi hủy chọn tool, tham số reason cho biết nguyên nhân theo giá trị: 0 do nhấn ESC,
1 do chọn tool khác, 2 người dùng undo trong khi tool đang kích hoạt
|
onKeyDown |
onKeyDown(key, repeat, flags, view) ⇒ Boolean
def onKeyDown(key, repeat, flags, view) puts "onKeyDown: key = #{key}" puts " repeat = #{repeat}" puts " flags = #{flags}" puts " view = #{view}" end Người dùng nhấn bàn phím, |
onKeyUp |
Người dùng nhả bàn phím |
onLButtonDoubleClick |
onLButtonDoubleClick(flags, x, y, view) ⇒ Object
Nhấn kép chuột trái
|
onLButtonDown |
onLButtonDown(flags, x, y, view) ⇒ Object
Nhấn chuột trái
|
onLButtonUp |
onLButtonUp(flags, x, y, view) ⇒ Object
Nhả chuột trái
|
onLButtonUp |
onLButtonUp(flags, x, y, view) ⇒ Object
Nhả chuột trái
|
onMouseEnter |
onMouseEnter(view) ⇒ Object
Chuột đi vào view
|
onMouseLeave |
onMouseLeave(view) ⇒ Object
Chuột ra khỏi view
|
onReturn(view) |
Nhấn Enter |
onSetCursor |
Khi muốn thiết lập cursor |
onUserText |
onUserText(text, view) ⇒ Object
Khi người dùng nhập dữ liệu vào VCB và nhấn Return |
# 27.tool.rb # load "/Users/xuanthulab/Desktop/learn-ruby/sketchup/27.tool.rb" require 'sketchup.rb' require 'extensions.rb' ## Công cụ vẽ Line class MyLineTool # Gọi khi kích hoạt công cụ def activate puts 'Kích hoạt Tool' # InputPoint để nhấn chuột chọn các Entity @input = Sketchup::InputPoint.new # @type [Sketchup::Point3d] điểm thứ nhất @point1 = nil # @type [Sketchup::Point3d] điểm thứ 2 @point2 = nil # @type [Sketchup::Point3d] điểm chuột @pointmove = nil # Hiện thông báo VCB Sketchup.set_status_text "Nhập điểm 1", SB_VCB_LABEL end # Gọi khi hủy chọn công cụ def deactivate(view) puts "Bất hoạt tool: #{view}" end def onCancel(reason, view) puts "Hủy chọn tool ##{reason} trong view: #{view}" end # Vẽ thông tin trong View def draw(view) options = { :font => "Arial", :size => 20, :bold => true, :align => TextAlignRight } point = Geom::Point3d.new(200, 200, 0) view.draw_text(point, "Test - Đây là công cụ Line", options) view.drawing_color = Sketchup::Color.new(255, 0, 0, 64) if !@pointmove.nil? # Vẽ điểm tại chuột status = view.draw_points @pointmove, 10, 2, "red" end if !@pointmove.nil? && !@point1.nil? # Vẽ line trong View status = view.drawing_color="red" status = view.draw_lines @point1, @pointmove end end # Bắt sự kiện di chuyển chuột def onMouseMove(flags, x, y, view) # Hiện thị tọa độ trong VCB @input.pick view, x, y @pointmove = @input.position # Hiện thị tooltip điểm view.tooltip = @input.tooltip view.invalidate end # Bắt sự kiện nhấn chuột trái def onLButtonDown flags, x, y, view @input.pick view, x, y if !@point1.nil? @point2 = @input.position elsif @point1 = @input.position Sketchup.set_status_text "Nhập điểm 2", SB_VCB_LABEL end if !@point1.nil? && !@point2.nil? Sketchup.active_model.entities.add_line @point1, @point2 Sketchup.active_model.select_tool nil end end end if( not file_loaded? "27.tool.rb" ) # Tạo menu chọn công cụ simple_cmd = UI::Command.new("MyLineTool") { # Chọn công cụ Sketchup.active_model.select_tool MyLineTool.new } tool_menu = UI.menu "Tools" tool_menu.add_separator tool_menu.add_item simple_cmd file_loaded "27.tool.rb" end