🌓
搜索
 找回密码
 立即注册

SketchUp插件开发(四)带窗洞的墙——添加底面

Miss求敗 2022-8-24 13:28:11 43766

本篇开始,从实例出发介绍SketchUp的插件开发,主要是常用API的使用。第一个实例非常简单,就是创建一个带窗洞的墙。

创建带窗洞的墙对于手工操作来说再简单不过了,只有简单的几步:

  1. 创建墙的矩形底面。
  2. 向上推拉底面形成墙体。
  3. 在墙面上创建一个矩形窗面。
  4. 沿墙厚度方向推拉墙厚的距离。
Aw8T7N6X8KrtJrkr.jpg

这样一个带窗洞的墙就做好了,剩下的无非就是把这个模型创建群组、命名、设置材质等。但是如果用代码来重复这个过程,则涵盖了很多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)
aXYNuLPPVMnp9m00.jpg

模型

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

来获取面上的边和顶点。作为几何拓扑结构的一部分,边和面是可独立存在的,是可见的,而顶点则不能独立存在,也是不可见的。所以把实体列表的所有实体打印出来

p entities.to_a

输出的是

[#, #, #, #, #]

只能看到四条边和一个面,是没有顶点的。

更多内容可以关注“小众程序员”微信公众号获取。

扫一扫

0 回复

高级模式
游客
返回顶部