2010-05-26 2 views
1

Я делаю плагин, чтобы суммировать область всего материала в эскизе. Мне удалось получить все лица и т. Д., Но теперь компоненты попадают в картину.Сумма Площадь для материала в компонентах, Google Sketchup

Я использую термин одно или многоуровневый компонент, так как я не знаю лучшего способа объяснить возникновение наличия компонента внутри компонента и т. Д.

Я заметил, что некоторые компоненты также имеют больше, чем один уровень. Поэтому, если вы заходите внутрь одного компонента, внутри этого компонента могут быть компоненты, которые также имеют материалы. Поэтому я хочу подвести итог всему материалу конкретного компонента и получить все «рекурсивные» материалы, если они есть, внутри компонента.

Итак, как мне подсчитать площадь всего материала внутри компонента (одного или многоуровневого)?

ответ

2

Вот что я хотел бы сделать, давайте предположим, что вы проходите через все сущности и проверяете тип сущности.

if entity.is_a? Sketchup::ComponentInstance 
    entity.definition.entities.each {|ent| 
    if ent.is_a? Sketchup::Face 
     #here do what you have to do to add area to your total 
    end 
    } 
end 

Вы можете сделать то же самое с группой с:

if entity.is_a? Sketchup::Group 
    entity.entities.each {|ent| 
    if ent.is_a? Sketchup::Face 
     #here do what you have to do to add area to your total 
    end 
    } 
end 

Надеется, что это помогает Ладиславу

2

примеру Ладислав в не копаться все уровни.

Для этого вам нужно рекурсивный метод:

def sum_area(material, entities, tr = Geom::Transformation.new) 
    area = 0.0 
    for entity in entities 
    if entity.is_a?(Sketchup::Group) 
     area += sum_area(material, entity.entities, tr * entity.transformation) 
    elsif entity.is_a?(Sketchup::ComponentInstance) 
     area += sum_area(material, entity.definition.entities, tr * entity.transformation) 
    elsif entity.is_a?(Sketchup::Face) && entity.material == material 
     # (!) The area returned is the unscaled area of the definition. 
     #  Use the combined transformation to calculate the correct area. 
     #  (Sorry, I don't remember from the top of my head how one does that.) 
     # 
     # (!) Also not that this only takes into account materials on the front 
     #  of faces. You must decide if you want to take into account the back 
     #  size as well. 
     area += entity.area 
    end 
    end 
    area 
end 

 Смежные вопросы

  • Нет связанных вопросов^_^