摘 要: 介紹了三維STL模型描述文件中存在的缺陷,分析了產(chǎn)生這些缺陷的原因,結(jié)合實(shí)際生產(chǎn)應(yīng)用中的經(jīng)驗(yàn)提出了對(duì)STL模型文件進(jìn)行修復(fù)的實(shí)際可行的修補(bǔ)方法,給出了相關(guān)的計(jì)算機(jī)程序。
關(guān)鍵詞: STL;快速成型;切片
快速成型RP(Rapid Prototyping)技術(shù)被認(rèn)為是近年來(lái)制造技術(shù)領(lǐng)域的一次重大突破,其對(duì)制造業(yè)的影響可與數(shù)控技術(shù)的出現(xiàn)相媲美。RP系統(tǒng)綜合了計(jì)算機(jī)、機(jī)械工程、CAD、數(shù)控技術(shù)、激光技術(shù)及材料科學(xué)技術(shù),可以自動(dòng)、直接、快速、精確地將設(shè)計(jì)思想物化為具有一定功能的原型或直接制造零件,從而可以對(duì)產(chǎn)品設(shè)計(jì)進(jìn)行快速評(píng)價(jià)、修改及功能試驗(yàn),有效地縮短了產(chǎn)品的研發(fā)周期。而以RP系統(tǒng)為基礎(chǔ)發(fā)展起來(lái)并已成熟的快速模具工裝制造(Quick Tooling)技術(shù)、快速精鑄技術(shù)(Quick Casting)、快速金屬粉末燒結(jié)技術(shù)(Quick Powder Sintering)則可實(shí)現(xiàn)零件的快速成型??焖俪尚图夹g(shù)不但廣泛應(yīng)用于航空航天、汽車、家電、工藝設(shè)計(jì)、醫(yī)療等領(lǐng)域,而且藝術(shù)建筑等領(lǐng)域的工作者也已經(jīng)開(kāi)始使用快速成型設(shè)備,越來(lái)越多的藝術(shù)家已經(jīng)成為計(jì)算機(jī)工作者,即不再單純地依靠手工,而是由快速成型設(shè)備來(lái)表達(dá)新的思路和創(chuàng)新。
1 三維STL文件在系統(tǒng)中的作用
快速成型系統(tǒng)中,將加工對(duì)象的計(jì)算機(jī)三維CAD模型表面離散化,生成三維STL文件,根據(jù)該文件進(jìn)行分層切片處理,得到層片文件后生成數(shù)控代碼文件,最后在數(shù)控代碼的控制下,按照層片文件逐層加工堆積得到物理原型。三維STL文件是一種數(shù)據(jù)格式,它用一系列的小三角形平面片去近似表示原CAD模型,從而實(shí)現(xiàn)從CAD系統(tǒng)到RP系統(tǒng)的數(shù)據(jù)交換。其格式簡(jiǎn)單,數(shù)據(jù)處理方便,被廣泛采用。目前各主要的CAD/CAM軟件系統(tǒng)都提供STL文件接口。STL文件的數(shù)據(jù)處理在RP系統(tǒng)處理過(guò)程中占有重要的作用,數(shù)據(jù)處理效率的高低也直接影響快速成型的效率。
2 STL文件缺陷分析及其修補(bǔ)算法
2.1 STL文件格式
STL文件標(biāo)準(zhǔn)是美國(guó)3D SYSTEM公司于1988年制定的一個(gè)接口協(xié)議。STL模型所描述的是一種空間封閉的、有界的、正則的唯一表達(dá)物體的模型。這種文件格式類似于有限元的網(wǎng)絡(luò)劃分,它將物體表面劃分成很多小三角形,即用很多個(gè)三角面片去逼近CAD實(shí)體模型。STL文件有二進(jìn)制格式和文本格式兩種,文本格式簡(jiǎn)單明了,而二進(jìn)制格式則緊湊得多,如果表示同一個(gè)零件,它的文件大小只有文本格式的六分之一。
STL模型就是用平面三角單元對(duì)三維CAD實(shí)體表面進(jìn)行離散近似而構(gòu)成的三維實(shí)體模型,它是對(duì)原三維實(shí)體的一種幾何近似。當(dāng)三角形小到一定程度,其近似性達(dá)到工程應(yīng)用的精度范圍時(shí),STL模型就表達(dá)了CAD實(shí)體模型。從數(shù)據(jù)結(jié)構(gòu)上看,STL模型是三角形單元的一個(gè)有限集合,即:
式中F為三維實(shí)體表面,Ti是一個(gè)三角形單元,n為三角形單元個(gè)數(shù)。STL文件保存有三角形面片的矢量信息,用于表達(dá)物體的內(nèi)外指向。每個(gè)小平面必須有一個(gè)單位矢量從實(shí)體內(nèi)部指向?qū)嶓w外部,并且按照“右手法則”確定每個(gè)小三角形頂點(diǎn)的次序,如圖1所示。STL文件是一些離散的三角網(wǎng)絡(luò)描述,例如一個(gè)球體用三角網(wǎng)絡(luò)描述如圖2所示,它的正確性依賴于其內(nèi)部隱含的拓?fù)潢P(guān)系。正確的數(shù)據(jù)模型必須滿足如下一致性規(guī)則:
(1)相鄰兩個(gè)三角形之間只有一條公共邊,即必須共享兩個(gè)頂點(diǎn)。
(2) 每一個(gè)組成三角形的邊有且僅有兩個(gè)三角形面片與之相連。
根據(jù)一致性規(guī)則可推導(dǎo)出:在STL文件中頂點(diǎn)數(shù)是三角形個(gè)數(shù)的一半,邊數(shù)是三角形個(gè)數(shù)的1.5倍。同時(shí)正確的實(shí)體數(shù)據(jù)模型應(yīng)該滿足三條法則:
(1) 三角形平面的法矢量方向和三個(gè)頂點(diǎn)符合右手法則;
(2)每相鄰的兩個(gè)三角形平面只能共享兩個(gè)頂點(diǎn);
(3) 三角形的每一條邊必須且只能由兩個(gè)三角形所共有。
2.2 STL模型的缺陷
(1)法向量錯(cuò)誤。三角形平面的法矢量方向與三角形的三個(gè)頂點(diǎn)之間不符合右手法則,因而構(gòu)成錯(cuò)誤。
(2)孔洞錯(cuò)誤。當(dāng)CAD模型的表面有較大曲率的曲面相交時(shí),在曲面相交部分會(huì)因?yàn)閬G失三角面片而造成孔洞。
(3)頂點(diǎn)錯(cuò)誤。某一三角面片的頂點(diǎn)落在另一三角面片的邊上,造成前一三角面片中的一條邊上存在兩個(gè)以上的頂點(diǎn),從而違背頂點(diǎn)法則。
(4)重疊錯(cuò)誤。主要是由三角形頂點(diǎn)計(jì)算時(shí)的舍入誤差造成的,由于三角形的頂點(diǎn)在3D空間中以浮點(diǎn)數(shù)表示,計(jì)算機(jī)運(yùn)行時(shí)對(duì)浮點(diǎn)數(shù)的舍入會(huì)導(dǎo)致兩個(gè)面片重疊。
2.3 STL模型缺陷修補(bǔ)算法
(1)法向量錯(cuò)誤修補(bǔ)算法
可以根據(jù)包含錯(cuò)誤三角形的三條邊形成的三個(gè)三角形的法向量來(lái)計(jì)算出該三角形的法向量方向,并且用新計(jì)算出的法向量替代原來(lái)發(fā)生錯(cuò)誤的法向量,從而對(duì)錯(cuò)誤的數(shù)據(jù)進(jìn)行修補(bǔ)。由于該錯(cuò)誤不影響計(jì)算機(jī)對(duì)STL文件的切片性能,也可以不用加以修復(fù),在實(shí)際應(yīng)用中一般忽略該種錯(cuò)誤。
(2)孔洞錯(cuò)誤修補(bǔ)算法
可以將孔洞錯(cuò)誤劃分為平面孔洞和曲面孔洞兩種類型。平面孔洞可以利用計(jì)算機(jī)繪圖中常用的三角化算法DELAUNAY處理。曲面孔洞可以按照從孔洞的任意一頂點(diǎn)沿順時(shí)針行走,三點(diǎn)即形成一個(gè)三角面片,直到該孔洞走完為止。
// hole_point_num為空洞的頂點(diǎn)總數(shù)
For(i=1;i<hole_point_num-1;i++)
{
/*將第一個(gè)點(diǎn)沿順時(shí)針行走,和第i和第i+1個(gè)點(diǎn)組成一個(gè)三角面片
*/
CreatTriangle(Po[0],po[i],po[i+1];
}
(3)頂點(diǎn)錯(cuò)誤修補(bǔ)算法
發(fā)生該種錯(cuò)誤時(shí),可以將該頂點(diǎn)刪除,由于錯(cuò)誤頂點(diǎn)落在一條邊上,刪除該頂點(diǎn)不影響STL的文件數(shù)據(jù)。
//point_num為STL文件頂點(diǎn)總數(shù)
For(i=0;i<point_num;i++)
{
//判斷點(diǎn)point[i]是否落在邊上
If(OnBorder(point[i])==true)
{
//落在邊上的點(diǎn)刪除
DeletePoint(point[i]);
}
}
(4)重疊錯(cuò)誤
發(fā)生該種錯(cuò)誤時(shí),可以將該三角形刪除。由于數(shù)據(jù)的四舍五入引起三角形的重疊,通過(guò)刪除該三角形,就可以修復(fù)STL文件的數(shù)據(jù)正確性。
//triangle_num為STL文件中三角形的總數(shù)
For(i=0;i<triangle_num;i++)
{
//判斷三角形triangle[i]是否有重合
If(Double(triangle[i])==true)
{
//有重合的三角形刪除
DeleteTriangle(triangle[i]);
}
}
3 分層切片的方法
快速成型制造技術(shù)實(shí)質(zhì)上是分層制造、層層疊加的過(guò)程,其中對(duì)已知的三維CAD實(shí)體數(shù)據(jù)模型求某方向的連續(xù)截面,即對(duì)實(shí)體進(jìn)行分層切片處理的過(guò)程成為必不可少的步驟。分層切片處理的數(shù)據(jù)對(duì)象是大量的小三角形平面片,因此,分層切片問(wèn)題實(shí)際就是切片平面與小三角形平面的求交問(wèn)題。因此分層切片方法合理選擇與優(yōu)化可以大大提高整個(gè)系統(tǒng)的效率。
分層切片根據(jù)分層厚度可以劃分為定層厚和變層厚兩種。
3.1 定層厚
這種方式的每一層分層切片厚度是固定值。此種方式算法簡(jiǎn)便,計(jì)算機(jī)處理速度快,激光可以采用固定功率進(jìn)行燒結(jié),控制系統(tǒng)電路簡(jiǎn)便。但這種方式?jīng)]有考慮三維模型的幾何特性,必然會(huì)帶來(lái)較大的誤差,大大降低加工精度。為了減少因?yàn)樾螤畎l(fā)生變化而造成的誤差,減小階梯效果,采用了變層厚的切片方式解決這個(gè)問(wèn)題。定層厚與變層厚的切片效果如圖3所示。
3.2 變層厚
這種方式是一種層厚度發(fā)生變化的切片方法,它根據(jù)零件形狀變化規(guī)律自動(dòng)選擇合適的切片厚度進(jìn)行切片。如圖3所示,切片時(shí)上半部份彎曲程度較大時(shí)可以采用切片厚度較小的值;下半部份彎曲程度較小時(shí)可以采用切片厚度較大的值。這種方法通過(guò)減小層厚來(lái)提高精度。
不難發(fā)現(xiàn)變層厚方式的原則是“形狀變化慢的地方層片厚度大,形狀變化快的地方層片厚度小”?;谶@一原則,可以采用“面積變化判別法”來(lái)確定層片厚度的大小。這種判別法是通過(guò)計(jì)算相鄰兩層面積的變化率實(shí)現(xiàn)的。
設(shè)上層片截面面積為Sn-1,當(dāng)前層片截面面積為Sn,則:
其中C為允許的面積變化系數(shù),通過(guò)實(shí)驗(yàn)得到C的最佳值約為0.1。
根據(jù)式(2),若當(dāng)前層片不滿足此關(guān)系,則要減小層片厚度,重新切片再判斷是否滿足該關(guān)系式,重復(fù)該過(guò)程,直到滿足條件或?qū)悠穸冗_(dá)到極小值為止。
快速成型技術(shù)與傳統(tǒng)制造技術(shù)的最大區(qū)別在于其分層制造思想和從概念時(shí)間、原型制造到最終產(chǎn)品生成一體化的設(shè)計(jì)和加工方式。這一技術(shù)的出現(xiàn)給現(xiàn)代制造技術(shù)的發(fā)展帶來(lái)了全新的思路。本文通過(guò)對(duì)STL模型文件的修補(bǔ)以及對(duì)切片數(shù)據(jù)的進(jìn)一步處理,改善產(chǎn)品在加工中的質(zhì)量以及產(chǎn)品的精度,從而為產(chǎn)品的制造生產(chǎn)提供堅(jiān)實(shí)的基礎(chǔ)。
參考文獻(xiàn)
[1] 趙保軍,汪蘇,陳五一.STL數(shù)據(jù)模型的快速切片算法[J].北京航空航天大學(xué)學(xué)報(bào),2004,30(4):329-333.
[2] 平雪良,高同軍,孟凡虹.一種提高快速成形系統(tǒng)精度的新切片算法[J].機(jī)械科學(xué)與技術(shù),2008,27(9):1121-1124.
[3] 溫佩芝,黃文明,吳成柯.一種改進(jìn)的STL文件快速分層算法[J].計(jì)算機(jī)應(yīng)用,2008,28(7):1766-1768.
[4] ZHAO Z, LAPERRIEREL. Adaptive direct slicing of the solid model for rapid prototyping[J]. International Journal of Production Research, 2000, 38(3):89-98.
[5] LIAO Y S, CHIU Y Y. Anewslicingprocedure for rapid prototyping system[J]. International Journal of Advanced Manufacturing Technology, 2000, 18:579-585.
[6] 田宗軍.激光燒結(jié)快速成型計(jì)算機(jī)控制系統(tǒng)的研究與應(yīng)用[D].南京:南京航空航天大學(xué),2000.