We are currently developing a Ruby to extract component information within the group.
The component information inside the group is extracted, but the component information within the group and within the group cannot be extracted.
Is there a way to continue searching for a child group by applying a repeat statement to get some component information?
code :
- Code: Select all
sel.each do |ss|
if not ss.class == Sketchup::Group
UI.messagebox ('그룹을 선택해 주세요')
return
end
#@group_names.push(ss.name)
#@num_entities.push(ss.entities.length)
#각 인스턴스 별 Definition 이름을 @name 배열에 넣는다.
ss.entities.each do |e|
if e.class == Sketchup::ComponentInstance
if e.definition.name.include? '-' or e.definition.name.include? '_'
if e.definition.name.include? '~'
ename = e.definition.name.gsub!('~','')
else
ename = e.definition.name
end
if ename.include? '#'
@names.push(ename.split('#')[0].strip)
else
@names.push(ename)
end
end
elsif e.class == Sketchup::Group
e.entities.each do |ee|
if ee.definition.name.include? '-' or ee.definition.name.include? '_'
if ee.definition.name.include? '~'
ename = ee.definition.name.gsub!('~','')
else
ename = ee.definition.name
end
if ename.include? '#'
@names.push(ename.split('#')[0].strip)
else
@names.push(ename)
end
end
end
end
end #ss.each에 대한 END
#@name의 배열 순서를 정렬한다.
@names = @names.sort!
#@name의 배열을 같은 내용을 묶어 해시로 통합한다.
hash_overlap = @names.each_with_object(Hash.new(0)) { |word,counts| counts[word] += 1 }
@comp_names = (hash_overlap.to_a)
#comp_names의 내용을 h, b, t1, t2, length별로 분류한다.
@comp_names.each do |str|
num = str[0].split('-')[1].strip
i = 0
while i < num.count('X') + 1
str.push(num.split('X')[i].strip)
i = i + 1
end
#str.push(num.split('X')[1].strip)
#str.push(num.split('X')[2].strip)
#str.push(num.split('X')[3].strip)
#str.push(num.split('X')[4].strip)
end
@hash_names.store(ss.name, @comp_names)
@names = []
hash_overlap = {}
end #sel.each에 대한 end