#如何系统的了解su的API的知识,首先我个人认为从以下四个class: #Point3d,Vector3d,Vertex,Transformation #以上4个class可以说是相互关联,哪一个不明白,那么在设计编写程序的时候就有可能陷入困境。 #1:首先来说说Point3d吧 #简单的来说就是一个3维空间的一个点。 #新建一个 point=Geom::Point3d,new 1,1,1 #就生成了一个点,x=1,y=1,z=1 #但是这3个数字并不是代表当前单位值,(1不等于1mm,而代表25.4mm) #point.to_s,则会返回(25.4mm,25,4mm,25.4mm) #例子: model=Sketchup.active_model sel=model.selectiono#......假如选择一个边线... point1=sel[0].start.position#当前边线的起始点position point2=sel[0].end.position#当前边线的终点position #那么我们可以利用这2个点做点其他的事情,例如添加一个结构线: ents=model.active_entities ents.add_cline(point1,point2) ################### #继续 #Point3d class里有好几个常用的方法 #a: distance距离 point1=Geom::Point3d.new 0,0,0 point2=Geom::Point3d.new 0, 100, 0 dis=point1.distance point2 #dis=100,2点之间的距离就是100还是注意:100并不代表是当前单位的100mm #b:点与点之间的加减操作是个怎样的概念? #2个Point3d点之间是不能相加的? #只能相减,得到的是一个向量Vector3d #c:vector_to 使用 #vector是矢量, 向量的意思,那么就肯定会带有方向及其它的数据。 #如果想计算选择的一个线段的方向的话,就会用到 vector_to 这个方法。 #例子: model=Sketchup.active_model sel=model.selectiono #......假如选择一个边线... point1=sel[0].start.position point2=sel[0].end.position vector=point1.vector_to point2 #这个vector就是一个带有方向,并且有长度的一个向量数据。很有用哦! #d:point3d的clone用法 #为什么要提着个clone的方法。举个例子 point1=Geom::Point3d.new 1,2,3 point2=point1#简单的赋值操作。 #现在改变point2的x的值 point2.x=10#返回值Point3d(10, 2, 3) #现在是point2已经改变了, #在看看point1:返回值也是Point3d(10, 2, 3) #就是说我改变point2值的时候,point1也被改变了,这个和平常的编程语言赋值可不是一样的。#具体是什么原因,我个人感觉是:point1的指针和point2的指针是同一个,所以你改变了#point2也就改变了point1.就这个问题,在设计插件的时候如果不注意的话,基本上就是一操作就#会出错。 #这时候就需要用clone了。 point2=point1.clone #e:创建Point3d方法 #创建Point3d有2个方法: #第一: point1=[1,1,1] #第二: point2=Geom::Point3d.new 1,1,1 #但是point1不等于point2 #而是:point1==point2.to_a # to_a是把point2转换成了数组,而point1就是一个数组 #例如创建结构线的例子: model=Sketchup.active_model ents=model.active_entities p1=[0,0,0] p2=[0,10,0] ents.add_cline(p1,p2) #另外一个方法就是: model=Sketchup.active_modelo ents=model.active_entities p1=Geom::Point3d.new 0,0,0 p2=Geom::Point3d.new 0,10,0 ents.add_cline(p1,p2) #以上2个结果是一样的,可见,在使用第二个例子的p1及p2的时候自动作了一个to_a的转换 #F:point3d的单位换算关系 #Point3d中的数据代表着x,y,的3维空间中的一个点, #但是数据和当前的单位尺寸是需要经难过一个转换的 #例如: point1=Geom::Point3d.new 1,1,1 #假如当前的单位尺寸是毫米, #则代表着这个点:x=25.3mm,y=25.4mm,z=25.4mm #那么说Point3d为什么不是直接代表这当前尺寸呢。 #我认为这样有一个好处: #因为每个人的习惯不同,我用毫米,他可能用m,这样就存在着好多种可能性,你可不想编写 #一个插件要写出各个单位尺寸的版本吧. #所以point就直接把你的数据转换成当前的单位尺寸。
2009年2月1日星期日
Sketchup 插件设计笔记
订阅:
博文评论 (Atom)
没有评论:
发表评论