柴微等
【摘 要】針對3D打印機(jī)工作時(shí)所需的STL文件,設(shè)計(jì)了一種無需三角形面片法向量信息的切片算法,采用垂直軸與切平面的空間平面信息進(jìn)行切片運(yùn)算,并對切片過程中產(chǎn)生的錯(cuò)誤數(shù)據(jù)進(jìn)行了分析,在VS2008環(huán)境中實(shí)現(xiàn)了對STL文件的切片。研究結(jié)果表明,此種切片算法,經(jīng)過對錯(cuò)誤信息的處理可以得到片層的完整閉合輪廓信息,切片效率高。
【關(guān)鍵詞】3D打?。籗TL;切片算法;VS2008
0.引言
3D打印是將Solidworks或CAD等其它三維設(shè)計(jì)軟件設(shè)計(jì)的三維模型直接打印成真實(shí)物體。3D打印源于快速成型理念,它將所要打印的物體從底層開始,按照一定的層厚,一層一層堆疊起來,最終形成完整的物體。首先,由三維設(shè)計(jì)軟件設(shè)計(jì)物體結(jié)構(gòu),然后將所設(shè)計(jì)的物體存儲(chǔ)為STL格式,其次,計(jì)算機(jī)讀入STL文件,將得到的文件數(shù)據(jù)運(yùn)用一定的切片算法進(jìn)行切片運(yùn)算,得到每一層的完整輪廓,再次,根據(jù)得到的輪廓信息,對輪廓進(jìn)行填充與路徑規(guī)劃,最后,將得到的路徑信息轉(zhuǎn)化為實(shí)際的電機(jī)控制量,通過電機(jī)驅(qū)動(dòng)執(zhí)行機(jī)構(gòu)實(shí)現(xiàn)3D打印。從3D打印的過程中可以看出,對STL文件進(jìn)行切片是實(shí)現(xiàn)3D打印功能的關(guān)鍵,完整正確的切片輪廓是后續(xù)計(jì)算的前提,它的精度直接決定了打印真實(shí)物體的精度。針對STL文件的切片技術(shù)國內(nèi)外有很多算法[1-5]。每種算法都有自己的優(yōu)缺點(diǎn),本文采用的算法所需的數(shù)據(jù)量小,效率高,針對不同的物體能得到任何高度的完整輪廓信息。
1.STL文件概述
應(yīng)用于3D打印的文件有多種文件格式,由于STL文件結(jié)構(gòu)簡單,多數(shù)三維設(shè)計(jì)軟件都可以將設(shè)計(jì)的三維實(shí)物直接存儲(chǔ)成STL文件,使得STL格式文件被廣泛應(yīng)用。
STL文件有兩種格式:二進(jìn)制格式與ASCII碼格式。無論是哪種格式,存儲(chǔ)的信息都是三角形的三個(gè)頂點(diǎn)與法向量。無數(shù)個(gè)這樣的三角形面片構(gòu)成了一個(gè)完整的STL文件。即三維實(shí)體。
二進(jìn)制格式的STL文件格式如下:
零件名 三角形個(gè)數(shù) 三角形面片信息
其中零件名占80字節(jié),三角形個(gè)數(shù)占4字節(jié),每個(gè)三角形面片信息占50字節(jié)。三角形面片信息包含12字節(jié)的法向量、36字節(jié)的坐標(biāo)、2字節(jié)的屬性項(xiàng)。
ASCII碼格式的STL文件格式如下:
solid 文件名
facet normal nx,ny,nz
outer loop
vertex V1x,V1y,V1z
vertex V2x,V2y,V2z
vertex V3x,V3y,V3z
endloop
endfacet
..............................
endsolid
ASCII碼格式的文件第一行是文件名,第二行是三角形法向量,第四行到第六行是三角形的三個(gè)頂點(diǎn)。二進(jìn)制格式的STL文件所占用的內(nèi)存小,ASCII碼格式的STL文件可讀性強(qiáng)。本文是對ASCII碼格式的STL文件操作。
2.基于VS2008切片算法實(shí)現(xiàn)
2.1切片算法基本思想
本文設(shè)計(jì)的算法無需三角形面片法向量計(jì)算,只需根據(jù)設(shè)定的層厚,逐層計(jì)算與切平面的交點(diǎn),求得兩個(gè)交點(diǎn)坐標(biāo),將切平面與所有三角形面片計(jì)算得到的交點(diǎn)存儲(chǔ)到數(shù)組中,將得到的交點(diǎn)坐標(biāo)按照一定的順序重新存儲(chǔ),形成有序的實(shí)數(shù)對以供后續(xù)處理。
2.2切片算法實(shí)現(xiàn)步驟
以VS2008為開發(fā)環(huán)境,實(shí)現(xiàn)步驟如下:
STEP1:解析STL文件,獲取各個(gè)三角形頂點(diǎn)坐標(biāo)信息。
STEP2:指定層厚為LYAYETHICK,第一層高度為k*LYAYETHICK.k=1.遍歷所有三角形,將與平面z=k*LYAYETHICK相交的三角形存儲(chǔ)在一個(gè)數(shù)組中。
STEP3:找到第一個(gè)與平面z相交的三角形,求出交點(diǎn)坐標(biāo),并標(biāo)記此三角形flag=1,表示此三角形已經(jīng)被處理過,本層不在處理。
STEP4:相鄰兩個(gè)三角形只能共有一條邊和兩個(gè)頂點(diǎn),利用三角形鄰邊關(guān)系找到與此三角形相鄰的三角形,并求與平面z的交點(diǎn)坐標(biāo),并標(biāo)記此三角形flag=1。
求交點(diǎn)公式:
x=(x-x)+x (1)
y=(y-y)+y (2)
ZP=z (3)
其中:三角形一個(gè)頂點(diǎn)為(x,y,z),另一個(gè)頂點(diǎn)為(x,y,z)。
STEP5:以此類推直到遍歷完本層所有三角形。
STEP6:若回到第一個(gè)三角形后,本層還有剩余的三角形沒有被標(biāo)記1,說明本層不止一個(gè)輪廓,還有其他輪廓,需要找到另一個(gè)輪廓的第一個(gè)三角形,然后重復(fù)STEP3到STEP5。
STEP7:k=k+1,求新的平面z,重復(fù)STEP3到STEP6,直到z大于STL文件中零件的高度。
STEP8:處理各層得到的交點(diǎn),消除間距過小、間距過大及非法數(shù)據(jù)等,得到完整的切片輪廓。
3.切片輪廓錯(cuò)誤數(shù)據(jù)分析
完整正確的輪廓數(shù)據(jù)是后續(xù)進(jìn)行路徑規(guī)劃及運(yùn)動(dòng)控制的關(guān)鍵因素。然而在三維繪圖或?qū)⑷S繪圖軟件所繪制的物體存儲(chǔ)成STL文件過程中會(huì)產(chǎn)生錯(cuò)誤的三角形鄰接關(guān)系。最終導(dǎo)致計(jì)算出的輪廓不閉合、偏差大等現(xiàn)象。常見的錯(cuò)誤如下:
(1)一個(gè)三角形的一條邊被另外兩個(gè)三角形所共有。
(2)切平面z經(jīng)過三角形的一個(gè)頂點(diǎn)或一條邊。
(3)幾個(gè)三角形面片圍成的區(qū)域形成一個(gè)缺陷區(qū)域。
以上幾點(diǎn)都將導(dǎo)致找不到下一個(gè)鄰接的三角形,從而產(chǎn)生錯(cuò)誤隨機(jī)數(shù)據(jù),需要將切平面z適當(dāng)?shù)姆糯蠡蚩s小。
(4)在切片計(jì)算過程中會(huì)產(chǎn)生INF0和IND0的數(shù)據(jù)點(diǎn)。在VS2008中用_finite()與_isnan()函數(shù)來消除非法的INF0與IND0數(shù)據(jù)
(5)對于曲率變換較大的零件,經(jīng)常會(huì)出現(xiàn)曲率過度時(shí)導(dǎo)致輪廓丟點(diǎn)不閉合,需要人為附加點(diǎn),使輪廓形成完整的閉合輪廓,以便后續(xù)進(jìn)行輪廓填充。
4.數(shù)據(jù)分析
跟據(jù)本文所設(shè)計(jì)的算法,在VS2008中進(jìn)行試驗(yàn)分析。對一個(gè)直徑為50mm壁厚2mm的空心球體進(jìn)行切片分層,層厚為0.3mm,共有166層,三角形個(gè)數(shù)為19842個(gè),切片耗時(shí)2s。切片效率很高。從仿真過程中可以看到,經(jīng)過一系列錯(cuò)誤數(shù)據(jù)處理后能得到完整的輪廓。
5.結(jié)論
本文設(shè)計(jì)的切片算法切片速度快,能夠處理多種原因產(chǎn)生的錯(cuò)誤數(shù)據(jù),處理錯(cuò)誤數(shù)據(jù)能力強(qiáng),經(jīng)過輪廓閉合處理后,消除大量冗余數(shù)據(jù),補(bǔ)償丟失數(shù)據(jù),能得到完成的片層輪廓。
【參考文獻(xiàn)】
[1]黃新華,孫琨,方亮等.STL模型的分層輪廓數(shù)據(jù)優(yōu)化算法[J].機(jī)械科學(xué)與技術(shù),2004,23(5):605~607.
[2]胡德洲,李占利,李滌塵等.基于STL模型幾何特征分類的快熟分層處理算法研究[J].西安交通大學(xué)學(xué)報(bào),2000,34(1):37~41.
[3]牟小云,鄭建明,田靜云.基于坐標(biāo)分層的STL模型切片算法的研究[J].機(jī)床與液壓,2008(36):52~54.
[4]趙吉賓,劉偉軍.快速成型技術(shù)中基于STL模型的分層算法研究[J].應(yīng)用基礎(chǔ)與工程科學(xué)學(xué)報(bào),2008(16):224~233.
[5]趙吉賓,劉偉軍,王超越.STL文件的錯(cuò)誤檢測與修復(fù)算法研究[J].計(jì)算機(jī)應(yīng)用,2003,23(2):32~34.