之所以选择此三者,是因为Point太简单,而Surface物件又太过复杂,剩下不表。当然通过此三者,你可以进而推广到其他地方。最好的资料莫过于SDK。
Rhino.Geometry.Curve
1.是对Curve这个类的的描述,从中我们我们可以看到其中一个重要参数为t。
2.Curve类所在的命名空间
3.RhinoCommon.ll的版本号,主版本号为5。
1.特性,在一定程度上表示Curve的实体是可以序列化,即写入文档文件。
2.Curve类继承自GeometryBase类,这样Curve类就继承GeometryBase的一些方法和属性
1.Rhino.Geometry.Curve的继承关系,表明ArcCurve、CurveProxy、LineCurve、NurbsCurve、PolyCurve、PolyLineCurve是Curve的子类,他们之间存在一定的转换方式。
构造方法Constructor
1.受保护的方法,我们不可以调用,但是可以再类的内部调用,之所以有这样的受保护的方法,可能是因为你单独调用它是无意义的甚至危险的,而我们通过静态方法在类的内部进行调用的话,这样可以完成一系列的赋值操作,使这个实例具有几何意义上的属性。
2、受保护的方法,通过反序列化将数据流转化为Curve实例,它受保护的原因也许仅仅是因为他太难了,我猜的。
1.带小钥匙,受保护的方法,只能在类的内部调用,但是可以通过继承,在子类的内部调用
2.可以调用的实例方法
3.静态方法,通过Curve直接调用,里面在一定程度上调用了Curve()这个受保护的构造方法,多半用于返回一个Curve类实例。
属性Properties
属性,我们可以直接通过 . 运算符直接获取的的实例字段。从中我们可以看到描述Curve类的重要属性,基本上都是几何意义上的描述,阶数、维度、区间、是否闭合的、是否是周期曲线、曲线的起点、曲线的终点等。
如何区别Curve,CurveObject,GH_Curve的区别与不同,答案是属性和方法。至于CurveObject,GH_Curve的类描述,继承关系、构造方法、实例方法、静态方法可以通过上述步骤一探究竟,所以不再赘述。
Curve,CurveObject的属性对比
我们先通过属性来了解CurveObject,它存在一个Document的属性,返回一个RhinoDoc的实例,即物体所在的文档,进而可以猜想到我们在Rhino这个软件界面中看到的物件就是CurveObject,而不是Curve,
而他的另外一个CurveGeometry的属性,返回一个Curve的实例,CurveObject实例通过内部的字段,字段类型为Curve,存储了最为基本的几何数据。如果我们想直接操作文档中的CurveObject的几何特征,我们需要通过调整CurveGeometry的属性进而调整CurveObject。
IsHideen,IsLocked,IsDeleted,Visible是不是很熟悉,这基本上都是rhino界面操作的一些基本命令。
当然如果你不写rhino插件的话,基本上不会接触CurveObject,我们大部分操作的都是Curve这种几何源数据。
接下来我们通过物件描述,以及CurveObject的Attribute来进一步了解文档中物件。我们在几何图形部分看到Curve类的大部分属性。而其他的一些东西则属于CurveObject。CurveObject的另外一个重要属性为Attribute.里面包含了渲染材质,图层等一系列的属于文档物件的特有属性。里面包含东西过多没办法一一列举。
GH_Curve
强调一点,GH_Curve的几何属性存储于字段m_value中。
所以尽量不要调用grasshopper的电池,这样的话会涉及大量的数据转换,Curve转为GH_Curve,GH_Curve转化为Curve。
那么知道这些有什么用,如果涉及几何建模,那么从Curve方向查找,如果涉及材质,图层等物件属性的话,从CurveObject方向查找,比如想查相机,文字,图层等,那么应该在Rhino.DocObject的命名空间中找。至于GH_Curve,还是把它放在一边。
废话颇多,总结下来,Curve是存储几何数据的,CurveObject是在Rhino中可以看见的物件,而GH_Curve是在Grasshopper中可以看见的物件。也算是对框架的一个介绍吧。
最后放个相机小代码。
感谢 远洋设计汇 授权分享
欢迎关注他们的微信公众号
微信ID:Sinooceanland-Design