- Component - Trong giao diện SketchUp
- Tạo Component bằng Code Ruby
- Nạp ComponentDefinition từ file
- Component Behavior
- ComponentInstance
Giống như Group, Component trong SketchUp chứa các đối tượng Entity để có thể thi hành tác vụ trên nhiều Entity một lúc. Nhưng Component mạnh mẽ hơn, có thể điều khiển ứng sử của Component, tạo Component dễ dàng, một phiên bản copy của Component có ứng sử biến đổi giống nhau trong bản vẽ thiết kế. Có hai lớp làm việc với Component là: ComponentDefinition (có vai trò như class) và ComponentInstance (có vai trò như object).
Component - Trong giao diện SketchUp
Trước khi viết code tương tác với Component, hãy tìm hiểu về nó trong giao diện ứng dụng SketchUp
Home
, chọn mũi tên bên cạnh - đổ xuống menu chọn Components, từ danh sách chọn Component Sample - bấm chọn mục Bed
Tạo Component bằng Code
Nếu trong cửa sổ SketchUp đơn giản tạo Component bằng cách chọn các hình và nhấn phải chuột chọn Make component ..., còn trong code cần quan tâm hai đối tượng gồm:
- Đối tượng lớp
ComponentDefinition
lưu thông tin về model của Component, đối tượng này có thể đọc và lưu ra file. - Đối tượng lớp
ComponentInstance
là đối tượng triển khai trong thiết kế hiện tại
Có hai cách tạo component, thứ nhất nếu có Group, có thể chuyển nó thành một ComponentInstant bằng phương thức to_component
, khi đó SketchUp cũng tự động tạo ra một ComponentDefinition.
Thứ hai, có thể truy cập DefinitionList
từ Mode, nó cung cấp phương thức add
với tham số là tên ComponentDefinition. Ví dụ tạo ra ComponentDefinition mới và lưu ra file newcomp.skp
def_list = Sketchup.active_model.definitions new_def = def_list.add "NewComp" new_def.save_as "newcomp.skp"
Ví dụ sau, tạo ComponentDefinition sau đó thêm các Entity vào nó, lưu ra file với đường dẫn đầy đủ
# 21.component.rb # load "/Users/xuanthulab/Desktop/learn-ruby/sketchup/21.component.rb" require 'sketchup.rb' require 'extensions.rb' def create_com # Tạo ComponentDefinition tên Cube list = Sketchup.active_model.definitions comp_def = list.add "Khối lập phương" comp_def.description = "Đây là component khối lập phương." # Thêm các Entity vào ents = comp_def.entities face = ents.add_face [0,0,0], [1,0,0], [1,1,0], [0,1,0] face.reverse! face.pushpull 1 # Lưu ra file save_path = Sketchup.find_support_file "Components", "" comp_def.save_as(save_path + "/myshape.skp") puts "Path: " + comp_def.path end
Nạp ComponentDefinition từ file
DefinitionList của Model có hai phương thức giúp nạp ComponentDefinition từ file
load
để nạp file skp từ máy cục bộload_from_url
nạp từ địa chỉ Url
# Nạp file cube.skp trong thư mục Components dl = Sketchup.active_model.definitions file_path = Sketchup.find_support_file "cube.skp", "Components" comp_def = dl.load file_path
Component Behavior
Mỗi ComponentDefinition có một đối tượng Behavior liên kết với nó, nó xác định ứng xử của Component trong màn hình thiết kế, có 6 loại:
always_face_camera
Component quay quanh trục z để hướng theo hướng nhìn camerashadows_face_sun
đổ bóngno_scale_mask
hệ số tỷ lệ không hiệu lực (không thu phóng)is2d
là loại 2Dsnapto
cuts_opening
beh = comp_def.behavior beh.no_scale_mask = 0b110 beh.always_face_camera = true
Tạo ComponentInstance
Khi đã có ComponentDefinition có thể tạo các ComponentInstance bằng phương thức add_instance
của Entity. Chú ý điểm gốc chèn trong ComponentDefinition có thể xem bằng phương thức insertion_point
của ComponentDefinition
ent = Sketchup.active_model.entities t = Geom::Transformation.translation [3, 3, 0] inst = ent.add_instance comp_def, t