仅在选择中使用Sketchup Ruby ComponentDefinition.count_instances

时间:2014-05-23 20:19:12

标签: ruby sketchup

给定Sketchup::ComponentDefinition对象c_def,如果我使用c_def.count_instancescdef.instances.length,我会在整个模型中获得组件的实例总数,就像文档说的那样应该。

不幸的是,我需要计算按组或子组件分隔的实例。 例如。假设我在模型中有两个使用相同基本组件的不同组件。 第一个有3个基本组件实例,第二个有5个。

c_def.count_instances将始终返回8,因为它是实例的总数,但我需要能够告诉第一个组件只有3个而第二个组件只有5个。

怎么做?

谢谢!

1 个答案:

答案 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}}集合中放置的次数,但不考虑整个模型三次。