Các đối tượng trong SketchUp tập hợp thành các mảng, nên có thể duyệt qua chúng bằng các vòng lặp như for, each, while, do ...

Cũng có thể sử dụng các phương thức của mảng để tìm một đối tượng trong tập hợp như phương thức find, find_all ...

Ví dụ: tìm các mặt có phương pháp tuyển chỉ ra

# 16.findface.rb
# load "/Users/xuanthulab/Desktop/learn-ruby/sketchup/16.findface.rb"

require 'sketchup.rb'
require 'extensions.rb'

def findface(normal = [0,0,1])
    # Tìm 1 Face đầu tiên có pháp tuyến normal
    Sketchup.active_model.selection.clear           # xóa selection
    ents = Sketchup.active_model.entities
    xface = ents.find {|ent| ent.typename == "Face" &&
    ent.normal == normal}
    puts "The face is: " + xface.to_s
    Sketchup.active_model.selection.add xface       # thêm kết quả tìm vào selection
end

def findface_all(normal = [0,0,1])
    # Tìm tất cả các mặt có pháp tuyến normal
    Sketchup.active_model.selection.clear
    ents = Sketchup.active_model.entities
    # Duyệt qua tất cả các Entity, tìm các Face trả về mảng
    faces = ents.find_all {|ent| ent.typename == "Face" &&
        ent.normal == normal}
    puts "Founds: #{faces.length}"
    # Duyệt qua tất cả các Face tìm được và in thông tin
    faces.each {
        |face|
        puts face.to_s
    }
    Sketchup.active_model.selection.add faces
end

Kết quả tìm face có pháp tuyến [0, -1, 0]

Ví dụ thứ 2, duyệt qua tất cả các đường (Edge), qua đó tập hợp được tạo độ các đỉnh trong một mảng trả về

# 17.findvertex.rb
# load "/Users/xuanthulab/Desktop/learn-ruby/sketchup/17.findvertex.rb"

require 'sketchup.rb'
require 'extensions.rb'

def findvertex
    ents = Sketchup.active_model.entities
    # mảng chứa các đỉnh
    vertex_array = []
    ents.each {|ent|
        if ent.typename == "Edge"
            # Hợp hai mảng duy nhất
            vertex_array = vertex_array | ent.vertices
        end
    }
   return vertex_array
end

vertex_array = findvertex
puts vertex_array
vertex_array.each {|pt| puts "Các điểm: " + pt.position.to_s}
Đăng ký theo dõi ủng hộ kênh