我是Sketchup Ruby的新手并且被吹走了这不是更简单但是这里......
我想将匹配特定图层名称的所有组复制到新的临时组。我基本上放弃了试图复制整个小组,因为这似乎充满了危险和Bugsplats,如果没有采用一些超级肛门保持方式,考虑上下文,立即爆炸的对象等...
所以,我试图循环遍历所有匹配的组实体和复制面,这似乎更直截了当。我的目标不是成为一个Ruby向导,而是完成这个脚本。
我已经能够复制面部但是面部在副本上失去了它们的转换并且最终在原点处以一些随机大小而不是它们在模型的任何地方。
这是代码:
SKETCHUP_CONSOLE.clear
mod = Sketchup.active_model # Open model
ent = mod.entities # All entities in model
temp_wall_primitives = ent.add_group #create a new empty temporary group
mod.definitions.each{|d|
next if d.image? || d.group? || d.name!="WALL"
d.entities.each{ |wall_primative_group|
if wall_primative_group.layer.name == "WALL_PRIMITIVES"
wall_primative_group.entities.each{ |wall_primative_group_entity|
if wall_primative_group_entity.is_a? Sketchup::Face
new_face = temp_wall_primitives.entities.add_face(wall_primative_group_entity.vertices)
end
}
end
}
}
我相信我需要以某种方式获得每张脸的转换,并将它们应用到新面孔中?
不要试图将实体从实例复制到另一个实体,而是放置一个new instance;
# Lets say we have a group.
source_group = model.entities.grep(Sketchup::Group)
# We can "copy" this to another group by fetching it'd definition and adding a new one:
new_group = model.entities.add_group
new_group.entities.add_instance(source_group.definition, source_group.transformation)
在您当前的解决方案中,您重新创建每个面,转换丢失的原因是顶点位置相对于其父级。您传入直接复制的顶点:temp_wall_primitives.entities.add_face(wall_primative_group_entity.vertices)
但是你需要为它们所涉及的实例应用转换。
此外,您当前的解决方案似乎没有考虑嵌套实例。而那些面孔可能会有洞 - 在这种情况下,face.vertices
不会形成有效的单循环。手动重新创建面部很快变得复杂。如果您想要组或组件实例的全部内容,只需复制实例本身。如果需要,您可以爆炸新实例。
但我会质疑为什么你首先要有一个临时小组。 (通常情况下这并不是必要的。如果你解释了你想要在这里执行的更高级别的任务,那将会有所帮助。)