微信公众号:老顽童与小东邪
关注可了解更多的教程及编程技巧。问题或建议,请加好友留言;
如果你觉得对你有帮助,欢迎赞赏
Drawingelement类
上一章节我们学习了entity类,entity类的主要子类是Drawingelement类。
Drawingelement类是我们今后重点学习的类,包括Image、Text、Edge、Face、Group、Component Definition和Component Instance。
下面对Drawingelement类做简要说明。
Drawingelement类包含的一些方法用于如何把元素图形在Sketchup中显示出来,并设置一些元素的属性信息,例如阴影、组成材质等。
该Drawingelement类提供了一个非常有用的方法,该方法返回一个BoundingBox的对象。这代表了最小矩形体积,它可以包含在Drawingelement同时保持其侧面与x,y和z轴对齐,下面我们来获取一条边线的boundingbox。
1、在模型中创建一条边线
model= Sketchup.active_model
entities = model.active_entities
line = entities.add_line [0,0,0],[10,10,0] #<Sketchup::Edge:0x000002342bf96e90>
2、获取这条边线的boundingbox对象
boundingbox = line.bounds #<Geom::BoundingBox:0x000002342be69748>
在boundingbox对象中,提供了关于该元素的尺寸,对角线,角落和最大/最小点的一系列方法。例如:
1、获取中心点位置
center = boundingbox.center #(127 mm, 127 mm, 0 mm)
2、获取对角线长度
diagonal = boundingbox.diagonal # ~ 359 mm
子类之Edge类
Edge是构图元素中最基本的对象,也是最容易理解的。在小学我们就接触了边的概念,例如四边形,等边三角形。
一条边表示两个点之间的线段,即我们在数学中学到的两点成线就是边。
那么,我们在编程过程中应该怎么样来表示呢?这里提供了两种创建边的方法。
第一种是add_line,返回Edge对象。
model = Sketchup.active_model
entities = model.active_entities
edge = entities.add_line [0,0,0],[10,10,0] #<Sketchup::Edge:0x000002342bf96e90>
第二种是add_edges,返回存放Edge对象的数组。
edges = entities.add_edges [0,0,0],[10,10,0] # [#<Sketchup::Edge:0x000002342bf96e90>]
在Edge类中也包含一系列的方法,如:
vertices- 返回边的两个节点对象(Vertex)
start/end - 返回边的起点或止点对象
other_vertex - 用边的一个节点得到边的另一个端点
used_by? - 表示一个节点是否在边上
edge.vertices # [#<Sketchup::Vertex:0x00018c833e19d8>, #<Sketchup::Vertex:0x00018c833e19b0>]
edge.start # #<Sketchup::Vertex:0x00018c833e19d8>
子类之Face类
Face类也是构图元素中最重要,最基本的。图元素无非就是点、线、面;这里的面就是现在要讲的Face对象。
我们知道面是由一组封闭的边线构成的,边线由一组点构成的,所以在程序中面既可以由一组有序的点构成。那么我们来看一下它在程序中是怎么实现的。
实现方法add_face,但是参数可以是edge对象,也可以是Point3d对象。
points = [
Geom::Point3d.new(0,0,0),
Geom::Point3d.new(10,0,0),
Geom::Point3d.new(10,10,0),
Geom::Point3d.new(0,10,0),
Geom::Point3d.new(0,0,0),
]
edges = entities.add_edges points
# 第一种参数跟一组edge对象
face = entities.add_face edges
# 第二种参数跟一组points对象,注意:此points数组中最后一个点可以去掉
face = entities.add_face points
在Face类中也提供了很多的方法,如:
edges- 返回面上所有边对象
normal - 返回面的法向量
vertices - 返回面上所有顶点
used_by? - 表示一个节点或边是否在面上
还有pushpull、followme、loops等重要方法后面会讲到。
绘制球体实战分析
思路:
1、绘制一个圆形面
2、绘制一条圆形路径
3、让圆形面跟随这条路径
model = Sketchup.active_model
entities = model.active_entities
circle = entities.add_circle(ORIGIN, X_AXIS, 1.m, 48) #通过add_circle添加一组圆形边,查看API了解参数
face = entities.add_face(circle) # 创建圆形面
path = entities.add_circle(ORIGIN, Z_AXIS, 2.m, 48) # 创建路径
face.followme(path) # 路径跟随创建球体
entities.erase_entities(path) # 删除这条路径
效果如下:
下面我们在来了解下pushpull方法
在上面的球体中实际上是有N个face构成的,现在我们选中这个球体执行以下的代码:
model = Sketchup.active_model
selection = model.selection.to_a
faces = selection.grep(Sketchup::Face)
faces.each{|face|
face.pushpull(rand(20))
}
使用pushpull方法对每个面推拉随机高度后效果如下:
引用
参考|一米网校
微信公众号:老顽童与小东邪
欢迎关注我,一起学习,一起进步!