目前,我們還在函數(shù)prepareModel中徘徊,因為這函數(shù)實在是太長了,近乎包含了整個數(shù)據(jù)處理過程。通過前面兩篇,幾何圖形已經(jīng)被導入到內(nèi)存中,并且由一個simplemodel變成了一個optimizedmodel?,F(xiàn)在程序拿起了屠刀,開始了切片過程。

  通常來講,在3D打印中所說的slicer過程包含了切割幾何體,連接多邊形,生成Gcode的所有過程,但在此程序中,slicer步僅為生成切片的切割操作。每一個切包含若干個閉合平面多邊形。這些多邊形的產(chǎn)生分兩步。第一,所有的三角形面片被切割成為一條線段;第二,將每層的線段連接起來形成閉合多邊形。前篇所述的點-面對應關系可以幫助這一過程快速進行,因為兩個相鄰的面上的切割線段很有可能就是相鄰線段。這段程序還可以幫助修補幾何圖形中的空洞,因此STL模型不需要那么完美。它也可以處理錯誤的法向量,所以它可以翻轉(zhuǎn)線段來滿足端點到端點的連接。slicer步驟之后我們得到了一系列閉合多邊形,然后會用到clipper來處理這些多邊形(clipper只可以處理2D閉合多邊形)。這一段來自cura-engine github主頁的介紹。

  切割過程代碼在slicer.h和slicer.cpp這兩個文件中。首先我們看其中的class slicer

平面設計培訓,網(wǎng)頁設計培訓,美工培訓,游戲開發(fā),動畫培訓

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) 
        
		

網(wǎng)友評論