Ruby 是否将实体添加到实体集合?

Ruby 是否将实体添加到实体集合?,ruby,sketchup,Ruby,Sketchup,我想向entities集合添加一个实体数组,但entities集合(如您在参考中所看到的)要求我按类型添加它们,即entities.add_edge()。对于混合类型的数组,最好的方法是什么 下面是一个代码片段-最后第二行无效(generic.add不存在) layers.each do|层| 分层租金=[] entities.each{| e | layerEnts您可以使用 假设您可以通过执行layer.type来获取类型,这应该可以解决您的问题 layerEnts.each do |l|

我想向entities集合添加一个实体数组,但entities集合(如您在参考中所看到的)要求我按类型添加它们,即entities.add_edge()。对于混合类型的数组,最好的方法是什么

下面是一个代码片段-最后第二行无效(generic.add不存在)

layers.each do|层|
分层租金=[]

entities.each{| e | layerEnts您可以使用

假设您可以通过执行
layer.type来获取类型,这应该可以解决您的问题

layerEnts.each do |l|
  type = l.typename.downcase
  layerGroup.entities.send("add_#{type}".to_sym, l)
end
更新:仅仅阅读文档似乎实际上有一种方法可以获取类型,它是typename,而且似乎是驼峰式的,所以我们需要对其进行简化


另外,似乎有些类型的单词不止一个,所以你需要一些下划线

layerEnts.each do |l|
  type = l.typename.gsub(/(.)([A-Z])/,'\1_\2').downcase
  layerGroup.entities.send("add_#{type}".to_sym, l)
end
添加组时,可以指定要添加到该组的一组现有实体

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

实体。每个{| e | layerEnts谢谢!不同的方法似乎有一些特殊之处,但这让我走上了正确的道路。不-不要使用| typename来确定实体的类型-它在进行字符串比较时非常慢。因为您迭代了可能是数百万的实体,所以您希望避免处理字符串。相反,请测试类-#is|a()或#kind_of?()有关性能影响的原因和示例的进一步阅读,请参阅以下主题的书面说明:您想按层对现有实体进行分组,是吗?或者,您自己创建所有实体吗?如果您自己创建所有几何体,最好直接将其添加到目标上下文中,而不是稍后对其进行分组。(这与使用SU UI建模时通常执行的操作不同)
layers.each do |layer|
  layerEnts = []
  entities.each { |e| layerEnts << e if layer == (e.layer) }
  layerGroup = entities.add_group(layerEnts)
  layerGroup.name = layer.name
end