Ruby Script

Các file script chứa các lệnh để chạy chương trình, có thể dùng bất kỳ chương trình soạn thảo text nào để soạn, các file tạo ra có phần mở rộng .rb. Để chạy script bạn phải nạp vào SketchUp, khi nạp vào từ cửa sổ nó sẽ thi hành từng lệnh viết trong file script.

Ví dụ sau, file script vẽ hình một ngôi sao:

01.star.rb
=begin
Vẽ ngôi sao năm cánh, bán kính ngôi sao r = 100.mm
=end

# Định nghĩa hàm chuyển độ sang radian
def to_radian(degrees)
    degrees * Math::PI / 180
end

r = 100.mm

ents = Sketchup.active_model.entities

pt1 = [r * Math.cos(to_radian(18)),  r * Math.sin(to_radian(18)),  0]     # góc 18
pt2 = [r * Math.cos(to_radian(90)),  r * Math.sin(to_radian(90)),  0]     # góc 90
pt3 = [r * Math.cos(to_radian(162)), r * Math.sin(to_radian(162)), 0]     # góc 162
pt4 = [r * Math.cos(to_radian(225)), r * Math.sin(to_radian(225)), 0]     # góc 225
pt5 = [r * Math.cos(to_radian(-45)), r * Math.sin(to_radian(-45)), 0]     # góc -45

ents.add_line pt1, pt3
ents.add_line pt1, pt4
ents.add_line pt2, pt5
ents.add_line pt2, pt4
ents.add_line pt3, pt5

Ví dụ lưu file này ở đường dẫn: /Users/xuanthulab/Desktop/learn-ruby/sketchup/01.star.rb

Để nạo vào SketchUp từ Ruby Console+ thực hiện

load "/Users/xuanthulab/Desktop/learn-ruby/sketchup/01.star.rb"

Cũng có thể copy vào thư mục Plugins của SketchUp rồi thực hiện lệnh ngắn gọn

load "01.star.rb"

Các Vector

Trong thiết kế với SketchUp, các Vector được dùng để xác định hướng, mỗi vector có tọa độ biểu diễn theo tọa độ điểm mút của nó trong xyz, ví dụ:

Các vector biểu diễn bởi mảng 3 tọa độ [x, y, z], nó xác định hướng mặt của hình. Ví dụ [0,0,1] thì hình phẳng trong x-y có hướng mặt lên trên, nếu hướng [0,0,-1] thì hướng mặt xuống dưới.

Vẽ đường cong - Curve

Entities.add_curve(*point)

Để vẽ đường cong (đường hình thành bởi nhiều đoạn thẳng Edge nối lại với nhau) dùng phương thức add_curve(*point) của lớp Entities, tham số của phương thức là các điểm, mảng các điểm (cần tối thiểu 2 điểm), phương thức này trả về là mảng các Edge được tạo ra

# 02.curve.rb
# load "/Users/xuanthulab/Desktop/learn-ruby/sketchup/02.curve.rb"

ents = Sketchup.active_model.entities
p1 = [0,0,0]
p2 = [1,1,0]
p3 = [2,0,0]
p4 = [3,-1,0]
p5 = [4,0,0]

ents.add_text(p1.inspect, p1)
ents.add_text(p2.inspect, p2)
ents.add_text(p3.inspect, p3)
ents.add_text(p4.inspect, p4)
ents.add_text(p5.inspect, p5)

curve = ents.add_curve p1 p2 p3 p4 p5
curve.class         # Array (kiểm tra kiểu trả về)
curve.size          # Số Edge tạo ra = 4

Vẽ đường tròn - Circle

add_circle(center, normal, radius, numsegs = 24)

Phương thức này của Entities thêm một hình tròn với các tham số

  • center - tọa độ tâm hình tròn
  • normal - vector pháp tuyến của mặt chứa hình tròn
  • radius - bán kính cung tròn
  • numsegs - số phân đoạn (mặc đinh 24), nếu muốn đường tròn mịn hơn tăng số phân đoạn lên ví dụ 72, hình bên chia đường tròn thành 10 phân đoạn
# 03.circle.rb
# load "/Users/xuanthulab/Desktop/learn-ruby/sketchup/03.circle.rb"

ents = Sketchup.active_model.entities
c = [150.mm,150.mm,100.mm] # tâm
n = [200.mm,200.mm,200.mm] # pháp tuyến
r = 150.mm                 # bán kính
s = 10                     # số phân đoạn

# ents.add_text(p5.inspect, p5)

circle = ents.add_circle c, n, r, s
normal = ents.add_line [0,0,0], n
ents.add_text("Đường pháp tuyến", n, Geom::Vector3d.new(20.mm, 20.mm, 0))
ents.add_text("Tâm", c, [50.mm, 0.mm, 0])

Vẽ đa giác - Polygon

add_ngon(center, normal, radius, numsides = 24)

Đa giác sử dụng phương thức add_ngon, phương thức này hoàn toàn giống với add_circle

# 04.polygon.rb
# load "/Users/xuanthulab/Desktop/learn-ruby/sketchup/04.polygon.rb"

ents = Sketchup.active_model.entities
normal = [0, 0, 1] # pháp tuyến, mặt các đường vuông góc z
radius = 100.mm

# Đa giác 8 cạnh
ents.add_ngon [0, 0, 0], normal, radius, 8

# Hình tròn giác 8 cạnh
ents.add_circle [250.mm, 0, 0],  normal, radius, 8

# Đa giác 24 cạnh
ents.add_ngon [500.mm, 0, 0], normal, radius

# Hình tròn giác 24 cạnh
ents.add_circle [750.mm, 0, 0],  normal, radius

Tương đồng giữa add_circle và ad_ngon

Vẽ các cung tròn - Arc

add_arc(center, xaxis, normal, radius, start_angle, end_angle)
add_arc(center, xaxis, normal, radius, start_angle, end_angle, num_segments)

Cung tròn tạo ra bởi phương thức add_arc với các tham số:

  • center: tâm cung tròn
  • zero_vec: vector xác định góc khởi đầu của cung tròn
  • normal: pháp tuyến vuông góc với mặt chứa cung tròn
  • radius: bán kính
  • start_angle: góc khởi đầu (tính từ zero_vec)
  • end_angle: góc kết thúc (tính từ zero_vec)
  • num_segments: tùy chọn, số phân đoạn cung tròn
# 05.arc.rb
# load "/Users/xuanthulab/Desktop/learn-ruby/sketchup/05.arc.rb"

ents        = Sketchup.active_model.entities
center      = [0,0,0]            # tâm
normal      = [0, 0, 1]          # pháp tuyến, mặt các đường vuông góc z
radius      = 100.mm
start_angle = 0.degrees
end_angle   = 160.degrees
zezo_vector = [110.mm,0,0]       # lấy trục x làm gốc

ents.add_arc center, zezo_vector, normal, radius, start_angle, end_angle, 20
ents.add_line [0,0,0], zezo_vector
ents.add_text("Vecto gốc", zezo_vector, [50.mm, 0.mm, 0])
Đăng ký theo dõi ủng hộ kênh