目前,我们还在函数prepareModel中徘徊,因为这函数实在是太长了,近乎包含了整个数据处理过程。通过前面两篇,几何图形已经被导入到内存中,并且由一个simplemodel变成了一个optimizedmodel。现在程序拿起了屠刀,开始了切片过程。
通常来讲,在3D打印中所说的slicer过程包含了切割几何体,连接多边形,生成Gcode的所有过程,但在此程序中,slicer步仅为生成切片的切割操作。每一个切包含若干个闭合平面多边形。这些多边形的产生分两步。第一,所有的三角形面片被切割成为一条线段;第二,将每层的线段连接起来形成闭合多边形。前篇所述的点-面对应关系可以帮助这一过程快速进行,因为两个相邻的面上的切割线段很有可能就是相邻线段。这段程序还可以帮助修补几何图形中的空洞,因此STL模型不需要那么完美。它也可以处理错误的法向量,所以它可以翻转线段来满足端点到端点的连接。slicer步骤之后我们得到了一系列闭合多边形,然后会用到clipper来处理这些多边形(clipper只可以处理2D闭合多边形)。这一段来自cura-engine github主页的介绍。
切割过程代码在slicer.h和slicer.cpp这两个文件中。首先我们看其中的class slicer
1 SlicerSegment project2D(Point3& p0, Point3& p1, Point3& p2, int32_t z) const2 {3 SlicerSegment seg;4 seg.start.X = p0.x + int64_t(p1.x - p0.x) * int64_t(z - p0.z) / int64_t(p1.z - p0.z);5 seg.start.Y = p0.y + int64_t(p1.y - p0.y) * int64_t(z - p0.z) 


