给定Sketchup::ComponentDefinition
对象c_def
,如果我使用c_def.count_instances
或cdef.instances.length
,我会在整个模型中获得组件的实例总数,就像文档说的那样应该。
不幸的是,我需要计算按组或子组件分隔的实例。 例如。假设我在模型中有两个使用相同基本组件的不同组件。 第一个有3个基本组件实例,第二个有5个。
c_def.count_instances
将始终返回8,因为它是实例的总数,但我需要能够告诉第一个组件只有3个而第二个组件只有5个。
怎么做?
谢谢!
答案 0 :(得分:2)
然后,您需要以递归方式遍历您感兴趣的实例的entities
。我担心没有API方法可以执行此操作。
module Example
def self.count_definition_in_entities(entities, find_definition, count = 0)
entities.each { |entity|
definition = self.get_definition(entity)
next if definition.nil?
count += 1 if find_definition == definition
count = self.count_definition_in_entities(definition.entities, find_definition, count)
}
count
end
def self.get_definition(entity)
if entity.is_a?(Sketchup::ComponentInstance)
entity.definition
elsif entity.is_a?(Sketchup::Group)
entity.entities.parent
else
nil
end
end
end # module
d = Sketchup.active_model.definitions["Sophie"]
Example.count_definition_in_entities(Sketchup.active_model.entities, d)
另外,请注意count_instances
没有完整的完整模型计数。如果在另一个组件C2中放置了两次组件C1。然后C1.count_instances
返回2
。如果您添加另一个副本C2
,则可能会C1.count_instances
4
产生2
- 但它仍然不会产生Entities
。该方法仅计算实例在任何{{1}}集合中放置的次数,但不考虑整个模型三次。