- Biến hình (biến đổi hình)
- Translation - dịch chuyển
- Rotate - Quay
- Scale - Thu phóng
- Kết hợp các Translation
Biến hình trong Sketchup
Ở hình dưới, khi dịch chuyển (chọn công cụ Move của SketchUp) đường kẻ trên mái nó đã tạo thành mái nghiêng của nhà.
Trong code Ruby lớp Entities
có phương thức transform_entities
để thực hiện điều này:
Tham số thứ nhất là đối tượng Transformation
và tham số thứ 2 là mảng các Entity
.
# 11. transform.rb # load "/Users/xuanthulab/Desktop/learn-ruby/sketchup/11. transform.rb" require 'sketchup.rb' require 'extensions.rb' ents = Sketchup.active_model.entities # tr = Geom::Transformation.translation [0, 0, 5] # ents.transform_entities tr, roof_line face = ents.add_face([0,0,0], [100, 0, 0], [100,100,0], [0,100,0]) face.reverse! face.pushpull 50, true roof_line = ents.add_line [0, 50, 50], [100, 50, 50] vector = [0,0, 30] tr = Geom::Transformation.translation vector ents.transform_entities tr, roof_line
Ngoài tạo Transformation dịch chuyển theo một vector Geom::Transformation.translation
,
còn có thể quay và thu phóng với cách tạo bằng Geom::Transformation.rotation
và
Geom::Transformation.scaling
Translation - dịch chuyển
Biến đổi bằng cách dịch chuyển một khoảng cách theo một hướng nào đó. Để định nghĩa biến đổi này cần tạo một mảng với ba thành phần (vector), các tọa độ tương ứng của Entity sẽ thay đổi bằng cách cộng tương ứng các thành phần này.
Ví dụ, di chuyển hình từ [1,2,3] đến [3,2,1] bạn cần dùng mảng vector [2,0,-2].
Trong SketchUp có 3 cách để tạo Transformation tịnh tiến:
- Gọi
Geom::Transformation.new
với tham số vector dịch chuyển - Gọi
Geom::Transformation.translation
với tham số vector dịch chuyển - Sử dụng ngay vector
# 12.translation.rb # load "/Users/xuanthulab/Desktop/learn-ruby/sketchup/12.translation.rb" require 'sketchup.rb' require 'extensions.rb' ents = Sketchup.active_model.entities tran_face = ents.add_face [-1, -1, 0], [-1, 1, 0], [1, 1, 0], [1, -1, 0] # Tịnh tiến hình theo vector [4,0,0] t = Geom::Transformation.new [4, 0, 0] ents.transform_entities t, tran_face # Tịnh tiến hình theo vector [0,6,0] t = Geom::Transformation.new [0, 6, 0] ents.transform_entities t, tran_face # Tịnh tiến hình theo vector [-3,0,0] ents.transform_entities [-3, 0, 0], tran_face
Rotate - Quay
Có hai cách để tạo ra đối tượng Transformation có chức năng quay:
- Gọi
Transformation.new
chỉ ra ba tham số gồm tọa độ gốc quay, trục quay và góc quay - Gọi
Geom::Transformation.rotation
cũng chỉ ra ba tham số gốc quay, trục quay và góc quay
# 13.rotate.rb # load "/Users/xuanthulab/Desktop/learn-ruby/sketchup/13.rotate.rb" require 'sketchup.rb' require 'extensions.rb' ents = Sketchup.active_model.entities # tạo hình tròn (tậm trên x) circle = ents.add_circle [50,0,0], [0,0,1], 10, 24 # Transformation quay 30 độ quanh z t = Geom::Transformation.new [0, 0, 0], [0, 0, 1], 30.degrees ents.transform_entities t, circle # Quay 60 độ quanh z t = Geom::Transformation.rotation [0, 0, 0], [0, 0, 1], 60.degrees ents.transform_entities t, circle
Scale - Thu phóng
Có thể tạo đối tượng Transformation có chức năng thu phóng với một tỷ lệ nào đó, điểm gốc để thu phóng
# Thu phóng 3 chiều cùng tỷ lệ, gốc là [0,0,0] Geom::Transformation.scaling(scale) # Thu phóng 3 chiều với tỷ lệ khác nhau, gốc là [0,0,0] Geom::Transformation.scaling(xscale, yscale, zscale) # Thu phóng với 1 tỷ lệ, điểm gốc là point Geom::Transformation.scaling(point, scale) # Thu phóng 3 chiều với tỷ lệ khác nhau, gốc là point Geom::Transformation.scaling(point, xscale, yscale, zscale)
Kết hợp các biến đổi
Từng chuyển đổi (tịnh tiến, thu phóng, quay) có thể kết hợp lại thành 1 Transformation bằng toán tử *
, ví dụ có một Transformation dịch chuyển tr_dichchuyn
,
một Transformation quay tr_quay
, hai đối tượng này có thể kết hợp lại thành 1
tr = tr_dichchuyen * tr_quay