2009年2月1日星期日

Sketchup 插件设计笔记

#如何系统的了解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就直接把你的数据转换成当前的单位尺寸。

没有评论:

发表评论