Có hai dạng Menu, hầu hết ở dạng thứ nhật các menu chính trong cửa số ứng dụng và các context menu xuất hiện khi nhấn phải chuột vào Entity ... Menu được tạo bằng cách gọi một phương thức trong module UI, sau đó cấu hình và định nghĩa các ứng xử của menu.
Sửa menu chính của SketchUp
Phía trên cửa sổ SketchUp, thấy các tiêu đề menu như File, Edit, View ..., mỗi mục đó trong code là một đối tượng Menu.
Gọi phương thức menu
trong module UI với tham số chuỗi tên menu, để tạo đối tượng menu.
Ví dụ sau tạo đối tượng Menu tương ứng với menu "View"
view_menu = UI.menu "View"
Khi có đối tượng menu này có thể gọi các phương thức như:
add_item |
add_item(menu)
Để thêm một mục menu
menu = UI.menu('View') menu.add_item("Xin Chào") { UI.messagebox "Xin chào", MB_OK } add_item(command)
cmd = UI::Command.new("Xin chào 2") { UI.messagebox("Chào tiếp") } menu = UI.menu('View') menu.add_item(cmd) |
add_submenu |
add_submenu(title)
Thêm menu con
plugins_menu = UI.menu("View") submenu = plugins_menu.add_submenu("Test") submenu.add_item("Hello World") { UI.messagebox("Hi there!") |
add_separator |
Thêm đường kẻ ngang phân cách |
set_validation_proc |
set_validation_proc(menu) { ... }
Kiểm tra trạng thái hiện tại để xác định xem menu được hiện thị như thế nào, có thể trả về
các giá trị: MF_ENABLED, MF_DISABLED, MF_CHECKED, MF_UNCHECKED, MF_GRAYED
|
Context menu trong SketchUp
Tạo ContextMenu bằng phương thức UI.add_context_menu_handler
để nhận về menu context,
sau đó sửa đổi nó, cú pháp
UI.add_context_menu_handler { |m| # các thao tác, như thêm menu item m.add_item("Hi") { } }
Ví dụ: Menu context khi nhấn phải chuột vào các Entity có face đang chọn:
# 25.context_menu.rb # load "/Users/xuanthulab/Desktop/learn-ruby/sketchup/25.context_menu.rb" require 'sketchup.rb' require 'extensions.rb' # Hàm chuyển các face đang chọn có vật liệu tô màu xanh def makegreen sel = Sketchup.active_model.selection sel.each do |e| if e.typename == "Face" e.material = [0, 255, 0] end end end # Hàm trả về MF_ENABLED nếu có face, MF_GRAYED nếu không def check_face sel = Sketchup.active_model.selection ok = sel.find{ |e| e.typename == "Face"} ok ? MF_ENABLED : MF_GRAYED end # Truy cập và sửa đổi context UI.add_context_menu_handler do |menu| # @type [Sketchup::Menu] menu = menu # thêm đường phân cách menu.add_separator # Thêm menu item item = menu.add_item("Face -> Xanh") { makegreen } menu.set_validation_proc(item) { check_face } end
Command trong SketchUp Ruby
Trong SketchUp, một Command nó thi hành thông qua một mục chọn menu hay thanh công cụ. Khi có đối tượng Command bạn có thể liên kết nó với toolbar hay menu.
Ví dụ:
# Khởi tạo đối tượng command cmd = UI::Command.new("Tester") { UI.messagebox("My Command") } # Tiêu đề khi đưa vào menu cmd.menu_text = "My Command" # Hàm thiết lập trạng thái nếu có lựa chọn thì enable cmd.set_validation_proc { if Sketchup.active_model.selection.length == 0 MF_GRAYED else MF_ENABLED end } # Thêm vào Menu Draw UI.menu("Draw").add_item cmd