Sketchup, Model, Entities ba cấu trúc cơ bản của SketchUp API

Hầu như mọi script SketchUp đều bắt đầu bởi truy cập đến ba cấu trúc dữ liệu cơ bản là: Sketchup, Model, Entities.

Module Sketchup

Hầu hết các script đều gọi các phương thức có trong module này, module này cũng cung cấp các thuộc tính liên quan đến ứng dụng SketchUp, để xem sự hoạt động của nó hãy mở cửa sổ Ruby Console (Windows > Ruby Console) và thi hành các lệnh:

Có thể cài đặt Ruby Console+ từ plugin Ruby Console+ để có cửa sổ Ruby Console tiện dụng hơn, mở bằng menu: Windows > Ruby Console+

# lấy ngôn ngữ
Sketchup.os_language

# Môi trường làm việc của Designer
Sketchup.get_locale

# Liệt kê danh sách các phương thức
Sketchup.methods

Phương thức quan trong nhất trong module Sketchup này là active_model, nó trả về đối tượng Model hiện tại đang làm việc trong Sketchup.

# Lấy Model hiện tại, lưu vào biến mode
mod = Sketchup.active_model

Từ Model lấy được sẽ thực hiện các tương tác với Model ở các phần sau

Các phương thức của modul này tìm hiểu dần từ Sketchup

Đối tượng lớp Model

Sketchup là modul biểu diễn ứng dụng SketchUp, còn Model biểu diễn một file cụ thể (.skp), các phương thức trong Model cung cấp các thông tin thiết kế hiện tại, ví dụ kiểm tra xem file có bị sửa đổi từ khi lần lưu cuối với phương thức modified

mod = Sketchup.active_model
mod.modified?

Có nhiều phương thức của Model, sẽ tìm hiểu dần trong danh sách Model method

Lớp Model sử dụng để truy cập vào các thành phần mà nó chứa các đối tượng thiết kế như: Entity, Layer, Definition, Material, OptionManager, Page tương ứng có các phương thức

Model

Các phương thức lấy đối tượng chứa dữ liệu trong Model:

  1. entities: trả về đối tượng Entities nó chứa các hình thiết kế
  2. layers: trả về đối tượng lớp Layers là các layer trog file SketchUp hiện tại
  3. definitions: trả về đối tượng lớp ComponentDefinitions lưu trữ các định nghĩa component.
  4. materials: trả về đối tượng lớp Materials quản lý các vật liệu trong file thiết kế hiện tại.
  5. options: trả về đối tượng lớp OptionManager cung cấp khả năng truy cập tới nhiều OptionsProviders
  6. pages: trả về đối tượng lớp Pages chứa các trang trong file hiện tại

Đối tượng lớp Entities

Ở thời điểm này muốn vẽ các hành cơ bản của SketchUp cần lấy được đối tượng chứa các Entity là Entities

ents = Sketchup.active_model.entities

Mọi đối tượng hình học trong SketchUp được biểu diễn bởi một đối tượng Entity hay một lớp kế thừa, gồm có các line (đường), face (mặt), image (ảnh), text (chữ), group (nhóm) và component. Đối tượng Entities phục vụ để quản lý các đối tượng này với các mục đích:

  1. Thêm vào một Entity mới
  2. Di chuyển, thu - phóng, quay, xóa các đối tượng Entity
  3. Lưu trữ các Entity trong một mảng để có thể truy cập bởi chỉ số

Các phương thức quan trong đầu tiên là thêm Entity mới vào với tiền tố add_

  • add_line - thêm một đối tượng Edge (đường biên) từ 2 điểm
    entities = Sketchup.active_model.active_entities
    line = entities.add_line [0,0,0], [10,10,0]
    
  • add_edges - thêm mảng các Edge từ chuỗi các điểm
    entities = Sketchup.active_model.active_entities
    line = entities.add_line [0,0,0], [10,10,0], [10,0,0]
    
  • add_circle - thêm mảng các Edge biểu diễn một hình tròn
    entities = Sketchup.active_model.active_entities
    soduong = 10            # số đường, mặc định 24
    tam = [0,0,0]           # tâm hình tròn
    phap_tuyen = 0,0,1      # phương pháp tuyến (vuông góc mới mặt)
    bankinh = 4             # bán kính
    edges = entities.add_circle tam, phap_tuyen, bankinh, soduong
    
  • add_ngon - thêm các Edge kết hợp tạo ra một đa giác (polygon) - sử dụng tương tự thêm circle
  • add_face - tạo ra một Face (mặt) từ các biên hoặc điểm
    depth = 1
    width = 2
    entities = Sketchup.active_model.active_entities
    pts = []
    pts[0] = [0, 0, 0]
    pts[1] = [width, 0, 0]
    pts[2] = [width, depth, 0]
    face = entities.add_face(pts)
    
  • add_text - thêm nhãn
    text = entities.add_text "Xin chào", [1,1,1]
    

Lớp Entity và Drawingelement

Lớp Entity và các lớp kế thừa nó có sơ đồ tóm tắt như hình vẽ, trong đó lưu ý hai lớp chính là DrawingelementEntity

Model

Lớp Entity

Entity là lớp cơ sơ trong cây kế thừa ở trên, cung cấp các phương thức chung cho các lớp con kế thừa nó, trong đó có các phương thức:

  • entityID: trả về định danh (tên) duy nhất của Entity
  • typename: xác định kiểu hình học của Entity (như Edge, Face, ...)
  • valid?/deleted?: xác định xem Entity còn có thể truy cập (chưa bị xóa)
  • model: trả về Model của đối tượng
  • attribute_dictionaries: truy cập thông tin định nghĩa bởi người dùng trên Entity
  • Ngoài ra mỗi đối tượng Entity có một hay nhiều đối tượng lớp EntityObserver liên kết với nó, vấn đề này thảo luận các các phần sau

Ví dụ:

test_line = Sketchup.active_model.entities.add_line [0,0,0], [1,1,1]
test_line.typename              #Edge
test_line.entityID              #18310

Lớp Drawingelement

Lớp Drawingelement là lớp cha cho các lớp Edge, Face, Group, Image, Text, ComponentDefinition, ComponentInstance. Nhiều phương thức trong nó điều khiển cách mà các phần tử hiện thị, các tính chất, điều khiển phần tử hiện thị hay ẩn (tương tự cách thức hoạt động của hộp thoại Entity Info của SketchUp) ...

Lớp Drawingelement cung cấp một phương thức hữu dụng bounds, trả về đối tượng BoundingBox. Nó biểu diễn khối hộp nhỏ chất bọc lấy đối tượng Drawingelement có các mặt của nó căn thẳng với trục x, y, z.

new_line = Sketchup.active_model.entities.add_line [0,0,0], [2,2,5]
box = new_line.bounds
box.center                  # Tâm
box.diagonal                # Đường kính

BoundingBox tiện dụng khi xác định xem người dùng bấm vào hình, ngay khi có BoundingBox bạ có thể so sánh kích thước của nó với vị trí bấm chuột.

Edge

Edge biểu diễn đường giữa hai điểm, nó kế thừa Drawingelement. Edge được tạo ra bằng phương thức add_line của Entity.

Sketchup.active_model.entities.add_line [5, 0, 0], [10, 0, 0]

Các phương thức của Edge hầu hết chia làm hai loại: các phương thức cấu hình hiện thị Edge và các phương thức truy cập kết nối tới Edge.

Các phương thức điều khiển hiển thị nó tác động đến cách hiện thị Edge trong cửa sổ thiết kế. Ngoài phương thức hidden cung cấp bởi Drawingelement, Edge cung cấp phương thức softsmooth. Nhớ điều quan trọng khác nhau giữa đường ẩn (hidden) và smooth là: đường smooth có sự kết hợp tương ứng giữa mặt và đường thành một mặt, trong khi hidden thì không thay đổi các mặt.

Xem thêm: Thuộc tính smooth, soft của Edge

Trong nhóm thứ hai, phương thức all_connected trả về tất cả các đối tượng Entity kết nối với Edge, tương tự phương thức faces trả về tất cả các đối tượng Face nối với đường Edge.

Trong SketchUp, các điểm cuối của Edge được biểu diễn bởi đối tượng Vertex. Edge có các phương thức tương tác với nó:

  • vertices : trả về các đối tượng Vertex của Edge
  • start/end : trả về Vertext điểm đầu/cuối
  • other_vertex(vertex1) : trả về Vertex đối xứng vertex1
  • used_by?: xác đính xem một Vertex hoặc Face được sử dụng bởi Edge không

Hai phương thức lengthsplit không thuộc hai nhóm trên: phương thức length trả về chiều dài. Phương thức split(position) phân chi một Edge thành các Edge nhỏ độc lập, tham số positon là số thự 0 - 1 hoặc một điểm thuộc nằm trên đường.

line = Sketchup.active_model.entities.add_line [0, 0, 0], [1, 1, 0]
line.length             # 1.4142135623730951
line.start.position     # Point3d(0, 0, 0)
line.end.position       # Point3d(1, 1, 0)
line.split(0.5)         # chia đôi

Đăng ký nhận bài viết mới