0

https://developers.google.com/sketchup/docs/ourdoc/entities

我想将实体数组添加到实体集合中,但是实体集合(如您在参考资料中所见)要求我按类型添加它们,即。实体.add_edge()。对混合类型数组执行此操作的最佳方法是什么?

这是一个片段-倒数第二行无效(通用 .add 不存在)

layers.each do |layer|
    layerEnts = []
    entities.each { |e| layerEnts << e if layer == (e.layer) }
    layerGroup = entities.add_group
    layerGroup.name = layer.name
    layerGroup.entities.add(layerEnts)
end
4

2 回答 2

1

添加组时,您可以指定要添加到该组的一组现有实体。

layers.each do |layer|
  layerEnts = []
  entities.each { |e| layerEnts << e if layer == (e.layer) }
  layerGroup = entities.add_group(layerEnts)
  layerGroup.name = layer.name
end

请注意!如果操作不正确,在这样的上下文之间移动实体很容易崩溃 - 而且操作不正确很容易 - SU 在这里没有做太多的保护。

仅使用entities.add_group(ents)when和are 中entities的实体。model.active_entitiesentsmodel.active_entities

而且,我在这里不是 100% 确定的,如果您尝试在不添加边缘的情况下对面进行分组,则可能会出现问题。(这需要测试。)

如果您的插件创建了您想要分组的几何图形,那么您最好将它们直接添加到目标组 - 而不是将它们添加到一个上下文中,然后再分组。它避免了许多潜在的问题和崩溃——而且速度更快。

如果您描述了插件或功能的更抽象目的,则答案可能完全不同。

于 2012-05-22T11:01:35.837 回答
0

您可以使用send以动态方式调用方法

假设您可以获得执行layer.type此操作的类型应该可以解决您的问题。

layerEnts.each do |l|
  type = l.typename.downcase
  layerGroup.entities.send("add_#{type}".to_sym, l)
end

更新:仅阅读文档似乎实际上有一种获取类型的方法,它是 typename 并且似乎是骆驼大小写,所以我们需要将其小写。

https://developers.google.com/sketchup/docs/ourdoc/entity#typename


此外,似乎有多个单词的类型,因此您需要在其中添加一些下划线。这是一个解决方案

layerEnts.each do |l|
  type = l.typename.gsub(/(.)([A-Z])/,'\1_\2').downcase
  layerGroup.entities.send("add_#{type}".to_sym, l)
end
于 2012-05-17T04:03:15.590 回答