本篇开始,从实例出发介绍SketchUp的插件开发,主要是常用API的使用。第一个实例非常简单,就是创建一个带窗洞的墙。 创建带窗洞的墙对于手工操作来说再简单不过了,只有简单的几步: - 创建墙的矩形底面。
- 向上推拉底面形成墙体。
- 在墙面上创建一个矩形窗面。
- 沿墙厚度方向推拉墙厚的距离。
这样一个带窗洞的墙就做好了,剩下的无非就是把这个模型创建群组、命名、设置材质等。但是如果用代码来重复这个过程,则涵盖了很多SketchUp的基本概念和基本API的使用。 本篇介绍如何用代码添加墙的底面,并介绍了几个常用的概念和API。先把代码放出来整体感受一下: model = Sketchup.active_model
entities = model.entities
points = [Geom::Point3d.new(0, 0, 0), Geom::Point3d.new(0, 200.mm, 0), Geom::Point3d.new(5000.mm, 200.mm, 0), Geom::Point3d.new(5000.mm, 0, 0)]
face = entities.add_face(points)
模型SketchUp的模型指的是一个完整的设计方案通过建模构造出的结果,从SketchUp的数据结构来说,模型相当于是所有绘制出的实体的管理者,可以说是SketchUp中最外层最的结构,比如上面我们创建出的带窗洞的墙所在的结构就是模型。在SketchUp中,使用Model对象来表示模型,使用 model = Sketchup.active_model
可以获取到当前活动模型,实际在PC机上,启动一个SketchUp只会有一个模型,所以获取到的肯定是这个模型。之所以有当前活动模型这个概念是因为在MAC机上,启动一个SketchUp可以建立多个模型文档,这样就需要确定哪个是当前活动的。 实体列表实体列表是实体的容器,可以使用 entities = model.entities
获取模型的实体列表,上面创建出的带窗洞的墙的线面实体就保存在这个实体列表中。实体列表是实际管理模型实体的对象,添加实体、删除实体、获取实体的操作都封装在了实体列表类中,是我们在建模过程中最常用于的一个对象。 底面的坐标列表在添加底面之前需要明确底面各个顶点的坐标,例如我们要创建一个厚度是200mm,长度是5000mm的墙,顶点坐标列表可以构造成: points = [Geom::Point3d.new(0, 0, 0), Geom::Point3d.new(0, 200.mm, 0), Geom::Point3d.new(5000.mm, 200.mm, 0), Geom::Point3d.new(5000.mm, 0, 0)]
这里再说明一下SketchUp的单位,由于其底层默认是英寸单位(再次吐槽),如果要表示毫米需要在数字后面添加.mm转为长度对象,否则创建的是英寸单位的长度。 添加面在实体列表中添加面,使用 face = entities.add_face(points)
这样我们就添加了一个实体面到模型中,并且得到了这个面的对象face。这里需要注意的是,参数中的点集不能有重复点,否则SketchUp会抛出异常。 add_face方法是实体列表添加面的接口,有多种参数可选,我们暂时只使用坐标点数组参数。得到的face是一个Face对象,表示实体面。我们添加的实体面有4条边和4个顶点,可以使用 edges = face.edges
vertices = face.vertices
来获取面上的边和顶点。作为几何拓扑结构的一部分,边和面是可独立存在的,是可见的,而顶点则不能独立存在,也是不可见的。所以把实体列表的所有实体打印出来 输出的是 只能看到四条边和一个面,是没有顶点的。 更多内容可以关注“小众程序员”微信公众号获取。
|