Goo类型转换成gh中的物件

尝试将rhino一个图层中的所有物件导入gh中
import rhinoscriptsyntax as rs
import Rhino
import scriptcontext as sc
sc.doc=Rhino.RhinoDoc.ActiveDoc
objt=sc.doc.Objects
a=Rhino.DocObjects.Tables.ObjectTable.FindByLayer(objt,‘Default’)
代码的输出结果为Goo,不知道如何转换成gh中的物件了

建议使用Grasshopper 的原生功能 Geometry Pipeline,详情请浏览 :point_down:
http://docs.rhino3d.com.cn/gh/Params/56

十分感谢,确实实现了功能 :rose:

goo的类型需要转化为物体,有三个思路



一个是用goo.Id直接拿到物体的guid后输出
guid运算器在GH内可以链接Curve或者Surface等等,会做自动的转化
但是guid转化为不同物体会耗费额外的时间。




另一个方法是直接从goo获取几何属性
缺点就是出来的物体不会带着犀牛文档内的guid,而只是几何信息。



建议用下面第三个方法。用GH_Curve类型
可以确保出来的物体和geometry pipeline一样都是带guid的Referenced Curve
缺点就是不同的物体转化需要用不同的类型

import Rhino
import Grasshopper.Kernel.Types as GHType
doc = Rhino.RhinoDoc.ActiveDoc
goo_list = Rhino.DocObjects.Tables.ObjectTable.FindByLayer(doc.Objects,N)
output_list = []
for goo in goo_list:
    output_list.append(GHType.GH_Curve(goo.Id))
A=output_list    


代码可以适当优化

import Rhino
import Grasshopper.Kernel.Types as GHType
goo_list = Rhino.RhinoDoc.ActiveDoc.Objects.FindByLayer(N)
A = [GHType.GH_Curve(goo.Id) for goo in goo_list]

最后注意以上三个办法都无法做到geometry pipeline的动态监控图层变化

1 个赞

十分感谢,太详尽了,老师费心了 :rose: :rose: :rose:

老师你好,我想直接从goo类型读取Id,用您提到的goo.Id方法读取出的内容直接输入Guid组件中依然提示类型为goo

ID.gh (3.1 KB)
先提供一个C#电池解决一下楼主的问题

一般我会用C#处理这类非数据和算法问题(ID,图块图层,几何相关)
用python处理数据和算法(计算,数据结构,字典等)

@Jorin @NARUTO
两位版主,我刚试了一下,goo.HasId属性是False
python处理这个这触及到了我的知识盲区。

万分感谢老师的回复,成功用老师的电池解燃眉之急。