https://developers.google.com/sketchup/docs/ourdoc/entities
我想在实体集合中添加一个实体数组,但实体集合(正如您在参考文献中看到的那样)要求我按类型添加它们,即。 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
答案 0 :(得分: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)
entities
model.active_entities
和ents
是model.active_entities
内的实体时才使用{{1}}。
并且,我不是百分百肯定在这里,如果你尝试分组一个面而不添加它的边缘可能会有问题。 (这需要测试。)
如果您的插件创建了要分组的几何体,那么最好将它们直接添加到目标组 - 而不是将它们添加到一个上下文中,然后再进行分组。它避免了这么多潜在的问题,崩溃 - 而且速度更快。
如果您描述了插件或功能的更抽象的目的,那么答案可能就完全不同了。
答案 1 :(得分:0)
您可以使用send
以动态方式调用方法假设您可以获得执行layer.type
的类型,这可以解决您的问题。
layerEnts.each do |l|
type = l.typename.downcase
layerGroup.entities.send("add_#{type}".to_sym, l)
end
更新:只是阅读文档似乎实际上有一种获取类型的方法,它的类型名称,似乎它是骆驼套装,所以我们需要将其缩写。
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