SketchUp中创建面的方法很简单也很直观,虽然参数有多种类型和形式,但是使用最多的应该就是传一个点集来创建面。
add_face(edges)
或
add_face(*edges)
或
add_face(points)
或
add_face(*points)
或
add_face(curve)
按参数的类型分类,分别表示:
通过一个边线集合创建面。
通过一个点集创建面。
通过一个曲线创建面。
在这里我们只对使用最多的通过一个点集创建面进行讲解。
关于面
在SketchUp中面有几个属性值得说明一下:
至少有3个顶点。
面的所有点共面不重叠。
面有边界不可以交叉(也有特殊的情况是可以创建出交叉边界的面)。
面分前面(法向方向)和背面。
这几个属性和我们创建面时的点集参数息息相关,根据这几个属性可以得到对点集的要求:
至少3个点。
所有点共面,且不可以不重复点(距离过近的点也不可以)。
相邻点的连线不可以交叉(交叉之后也可以创建出面,但并不是想要的)。
对于面的法向,是通过点集的顺序依据右手定则来确定。
面的朝向
根据上面对点集的要求,我们先创建一个面:
points = [Geom::Point3d.new(0, 0,0), Geom::Point3d.new(0, 1, 0), Geom::Point3d.new(0, 1, 1), Geom::Point3d.new(0, 0, 1)]
entities.add_face(points)
根据右手定则,可以得到面的法向(下面)应该是指向X轴正向的,所以创建的面是这样的:

但是SketchUp中有一个特殊的情况:如果创建的面是在XOY平面上,创建时会忽略点集的顺序,所有创建出的面都是法向朝下的。我猜原因应该是为了适应路径跟随的情况,因为一般创建的体都在XOY平面以上的空间,如果创建的面朝上,在路径跟随创建体的时候会导致体的所有面反而朝外。
创建带洞的面
带洞的面是建模中经常会用到的,但是SketchUp并没有提供创建带洞面的方法,需要我们自己组合处理。其实用API创建带洞的面和手动创建的思路是一样的,先创建一个大面,然后在挖洞的位置创建小面,最后把创建的小面删掉。
points = [Geom::Point3d.new(0, 0, 0), Geom::Point3d.new(0, 3, 0), Geom::Point3d.new(0, 3, 3), Geom::Point3d.new(0, 0, 3)]
entities.add_face(points)
points = [Geom::Point3d.new(0, 1, 1), Geom::Point3d.new(0, 2, 1), Geom::Point3d.new(0, 2, 2), Geom::Point3d.new(0, 1, 2)]
face = entities.add_face(points)
face.erase!
这样就创建出了一个带洞的面:

这里需要注意的是这样的方法不能创建出外环和内洞有点重叠的面,这样的面应用也比较少,这里不再介绍。