吳建 吳婷 陳廷豪 包涵
摘 ?要:為提高STL模型的切片效率,提出一種基于MATLAB的STL模型切片分層新算法。首先對STL模型進行數(shù)據(jù)預處理,篩選出只與切平面相交的三角片集合,然后利用相鄰三角面片邊的拓撲關系依次求交,獲得各層截面輪廓信息。實驗結果表明,該方法簡單、有效,不僅優(yōu)化了數(shù)據(jù)結構,而且提高了切片效率,具有較好的可行性和準確性。
關鍵詞:3D打印;切片;STL模型;MATLAB
中圖分類號:TP391.73 ? ? ?文獻標志碼:A ? ? ? ? 文章編號:2095-2945(2020)02-0023-02
Abstract: In order to improve the slicing efficiency of STL model, a new slicing algorithm of STL model based on MATLAB is proposed. First, the STL model is preprocessed, and the set of triangles which only intersect with the tangent plane is selected, and then the topological relationship between the edges of the adjacent triangular patches is used to obtain the profile information of each layer. The experimental results show that the method is simple and effective, not only optimizes the data structure, but also improves the slicing efficiency and has good feasibility and accuracy.
Keywords: 3D printing; slicing; STL model; MATLAB
引言
3D打印,又稱作快速成形,是一種以數(shù)字模型文件為基礎,運用粉末狀金屬或塑料等可粘合材料,通過逐層堆疊累積的方式來構造物體的技術[1]。它對結構復雜、形態(tài)多變、骨架分支多的難加工形體具有顯著優(yōu)勢,因而在現(xiàn)代醫(yī)學、高端制造等領域有著廣泛的應用[2]。在3D打印工藝過程中,分層切片處理是最為關鍵的內容之一。它通過層切平面與3D模型截面相交, 得到各層截面輪廓信息,因此切片處理的效率和精度直接影響模型制作的精度和質量[3]。
本文以MATLAB軟件作為開發(fā)平臺,對3D打印切片問題展開研究,運用矩陣和數(shù)組及MATLAB自帶的一些函數(shù),在MATLAB軟件平臺下實現(xiàn)STL模型的快速分層切片處理。
1 算法原理
STL模型是由多個三角形面片組成的三維物體,因此對模型進行切片就是沿切層方向(z軸)建立多個切平面,分別求出每層切平面與三角面片的交點,然后進行拓撲重連,從而獲得截面輪廓線。
由于STL模型數(shù)據(jù)量較大,為提高切片處理的效率,本文采用如下方法進行計算:首先對STL模型進行數(shù)據(jù)排序,然后篩選出與各層切平面相交的三角面片集合, 以減少三角面片與切平面的求交判斷次數(shù);在計算三角面片與各層切平面間的交點時, 利用相鄰三角面片邊的拓撲關系求交,可快速確定交點,減少冗余點計算。
1.1 數(shù)據(jù)預處理
利用MATLAB軟件的stlread函數(shù)讀取STL模型數(shù)據(jù),得到一個三角網(wǎng)格對象,其中包含兩個矩陣成員:一個為網(wǎng)格頂點的坐標矩陣,設為P;另一個為組成三角面片的頂點索引矩陣,設為T。
依次從三角面片索引矩陣T中取出每個三角面片的頂點索引號,并從頂點坐標矩陣P中找到其頂點的x、y、z坐標,然后將它們按照z坐標值的大小進行排序,并排成一行:
[x1,y1,zmin,x2,y2,zmid,x3,y3,zmax]
從而得到一個新的三角面片坐標矩陣Vm×9,其中每行表示一個三角面片坐標信息,m為三角面片總數(shù)。然后將矩陣V按照zmin進行升序排序,如果zmin相同的,將zmax值小的三角面片排在前面。
1.2 相交三角片的智能篩選
在計算每層切平面與三角面片的交點時,根據(jù)每個三角面片的z坐標數(shù)據(jù)進行判斷,篩選出只與當前切平面相交的三角面片集合,以提高分層處理速度。具體步驟如下:
步驟1,首先根據(jù)切片精度Δz和模型z坐標的最大值與最小值進行等厚度分層,得到各層切平面的高度zi(i=1,2,…,n,n為切片總數(shù))。
步驟2,利用判斷條件篩選出與每層切平面zi相交的三角面片集合。若三角面片與切平面zi相交,則需滿足zmin≤zi≤zmax,如圖1所示,具體分為以下幾種情況:
(1)三角面片的兩條邊與切片面相交(圖1(a));(2)三角面片的一條邊與切平面重合(圖1(b)(c)),若圖1(b)三角片和圖1(c)三角片共邊,為避免產(chǎn)生冗余點,只保留圖1(b)所示三角片;(3)三角面片的一個頂點在切平面上(圖1(d)(e)),為避免產(chǎn)生冗余點,只保留圖1(d)所示三角片;(4)三角面片與切平面重合(圖1(f)),這種情況無法產(chǎn)生有效相交線段,故做排除。
1.3 拓撲求交
三角網(wǎng)格模型中,每條邊都有兩個三角面片與之共享,因此利用這種鄰接拓撲關系,按順序依次求交即可得到首尾相連的切片輪廓。具體步驟如下:
步驟1,從篩選出的相交三角面片集合中,隨機確定一個三角面片作為起始三角面片,計算該三角面片與切平面的交點,并保存交點所在的邊,然后從集合中刪除這個三角面片。
步驟2,在相交三角面片的集合中找到一個和上一個三角面片的交點邊是公共邊的三角面片,然后再對這個三角面片進行交點計算,保存交點所在的邊后,從集合中刪除這個三角面片。如圖2所示,根據(jù)三角面片1的交點P1所在的邊AB找到與之相鄰的三角面片2,然后計算切平面與三角面片2的另一個交點P2,根據(jù)交點P2所在的邊BC找到三角面片3,依次類推。
步驟3,重復步驟2,直到找不到下一個拓撲三角面片,按順序連接交點即可獲得當前封閉輪廓。
步驟4,重復步驟1、步驟2、步驟3,直到相交的三角面片集合為空集,從而完成該層切片所有封閉輪廓的創(chuàng)建。
2 實例驗證
為檢驗本文算法的有效性,以圖3所示的蝎子模型為實例,進行切片測試。該模型共有461708個三角面片,230856個頂點,X、Y、Z方向總體尺寸約為59mm、42mm、20mm。采用0.4mm的分層精度對該模型進行切片測試,從圖4結果可以看出,即使該模型復雜、具有多條分支結構,本文算法也能產(chǎn)生較好的效果。
3 結束語
本文以MATLAB軟件為平臺,通過數(shù)據(jù)預處理、篩選相交三角面片集合、拓撲求交等步驟有效地對模型進行切片分層處理,最大化的保留了原始形狀特征,重構出準確率高的切片模型。該方法方便快捷,加強了切片數(shù)據(jù)的可控性,優(yōu)化了切片的效率,提高了切片輪廓的準確性,且該程序簡短易懂,具有較好的應用價值。
參考文獻:
[1]郭亮,安芬菊,王貴.便攜式3D打印機設計[J].機電工程技術,2017,46(10):90-92+108.
[2]徐敬華,任新華,陳前勇,等.基于雙傾斜度概率的流形模型3D打印層切優(yōu)化方法[J].機械工程學報,2019,55(13):129-143.
[3]徐敬華,盛紅升,張樹有,等.基于鄰接拓撲的流形網(wǎng)格模型層切多連通域構建方法[J].計算機輔助設計與圖形學學報,2018,30(1):180-190.