胡浩亮,陳 萍,張爭艷,陶孟侖,陳定方,陳 瓊
(1武漢理工大學(xué)智能制造與控制研究所,湖北 武漢430063;2南昌大學(xué)共青學(xué)院,江西 九江332020)
快速成型(Rapid Prototyping,RP)技術(shù)采用材料逐層堆積的方法來制造實體,可以直接、快速地將三維CAD模型制造出來,大大縮短制造周期,降低成本,具有良好的發(fā)展前景。雖然可以用不同的方法建立三維CAD模型,但制造實體的過程必須要依據(jù)這些模型的切片數(shù)據(jù),因此切片方法將會直接影響加工質(zhì)量以及生產(chǎn)效率。然而,即使是同一個模型,不同的切片方法也會產(chǎn)生不同的切片數(shù)據(jù),如何將模型分割成單一的切片層并得到適宜的輪廓數(shù)據(jù)是一項至關(guān)重要的工作[1]??焖俪尚偷那衅椒ǚ譃榛赟TL模型的切片方法和基于三維CAD模型的直接分層切片方法[2]。前者先用小三角面片近似模擬三維CAD模型,再對近似模型進行切片獲取輪廓數(shù)據(jù)。這種方法具有格式清晰、易于分割等優(yōu)點,在快速成型發(fā)展初期得到了廣泛運用,且被幾乎所有的快速成型設(shè)備和CAD系統(tǒng)所支持。但STL格式僅僅是對三維CAD模型的近似模擬,且不包含拓?fù)湫畔ⅲ虼藭a(chǎn)生一些諸如法向量錯誤、不共頂點、頂點分離、違反取向原則、重疊面片等缺陷。而基于三維CAD模型的直接分層切片方法則直接對原始模型切片獲取輪廓數(shù)據(jù),具有精度高、速度快等優(yōu)點?;谏鲜鲈颍疚奶岢隽艘环N基于AutoCAD的直接分層切片方法,實現(xiàn)了對三維CAD模型的直接切片。
AutoCAD不僅是提供基本功能的應(yīng)用平臺,更是可以進行二次開發(fā)的軟件平臺。在AutoCAD平臺下對三維CAD模型直接分層切片的二次開發(fā)有兩種方法[3]:一種方法是基于ObjectARX開發(fā)一個切片的動態(tài)鏈接庫(DLL),通過使用AcBr庫(libacbr.dll)查詢?nèi)S實體任意方向上的剖面數(shù)據(jù)從而獲得分層切片,這種方法難度較大,同時容易導(dǎo)致系統(tǒng)崩潰;另一種方法是借助于AutoCAD內(nèi)嵌的Visual LISP語言,通過調(diào)用剖切命令實現(xiàn)對三維CAD模型的直接切片。該語言易于掌握,便于交互。
切片程序借助于AutoCAD軟件平臺,利用Visual LISP語言進行二次開發(fā),得到直接切片的輪廓信息[4],同時得到快速成型機的驅(qū)動指令掃描路徑。
首先利用command函數(shù)調(diào)用layer命令建立兩個圖層——countor和hatch,分別用于保存各個切片層的邊界輪廓數(shù)據(jù)以及內(nèi)部填充數(shù)據(jù),便于后續(xù)數(shù)據(jù)的提取以及生成數(shù)控代碼。接下來設(shè)置坐標(biāo)系,將用戶坐標(biāo)系(UCS)設(shè)置在模型底部,Z軸方向指向切片方向。值得注意的是,在運行程序代碼之前,必須關(guān)閉特征點捕捉、正交等自動功能,否則得到的不一定是預(yù)期高度的切片。完成上述工作后,進入切片過程。
1)用DCL語言編寫一個用戶對話框,得到模型的最低點坐標(biāo)值bottom、最高點坐標(biāo)值top、切片方向以及切片厚度delta(圖1)。
圖1 切片程序用戶框界面
2)調(diào)用剖切(section)命令,對模型的指定位置進行剖切操作,得到子類標(biāo)記為AcDbModelerGeometry的面域(Region)形式的切片,并添加至選擇集A,置于圖層0中。
3)調(diào)用提取邊(xedges)命令。由于AutoDesk公司尚未公布DXF文件中關(guān)于保存面域的私有數(shù)據(jù)的格式細(xì)節(jié),因此關(guān)于面域這一特殊圖元的數(shù)據(jù)提取少有報道??紤]到AutoCAD 2008已經(jīng)增加提取邊命令,可以調(diào)用該命令對面域切片提取邊得到一個由二維圖元組成的輪廓線框。若提取得到的輪廓線框包含樣條曲線(spline),可以調(diào)用編輯多段線(pedit)命令轉(zhuǎn)化為指定擬合精度(一般20)的多段線,并調(diào)用炸開(explode)命令得到一系列符合工藝參數(shù)的內(nèi)部填充直線。
4)調(diào)用填充(hatch)命令對面域切片進行平行線填充,并調(diào)用炸開(explode)命令炸開填充圖案,得到一系列相互平行的直線,并添加至選擇集C,置于hatch圖層中。上述得到的直線可以作為后續(xù)驅(qū)動指令的掃描路徑。若設(shè)置填充原點為左上角,則上述得到的直線按由上到下、由左到右的順序記錄,提取時可以不考慮順序。
5)刪除選擇集B中的面域形式的切片,高度z增加一個切層厚度,將UCS置于當(dāng)前位置,當(dāng)z≤模型最大高度值top時,重復(fù)上述步驟2)~5)。
該過程的流程如圖2所示。
(setvar"osmode"0);關(guān)閉目標(biāo)對象捕捉
(setvar"blipmode"0);不顯示光標(biāo)痕跡
(setvar"hporiginmode"1);填充對象設(shè)置填充原點為左上角
(setvar"hpname""_user");設(shè)置填充的默認(rèn)圖案名稱為用戶自定義
(while(<=z top);變量控制為切片方向z
(command"section"A"""XY"(list 0 0z));對選擇集A剖切,方向平行于XY平面
(command"ucs"(list 0 0z)"");設(shè)置用戶坐標(biāo)系
(command"xedges"B"");提取邊,即輪廓線框
(command"change"C"""p""la""countor""");置于countor圖層中
(if(or(< n 3)(> n layer))(setq filldelta 0.4)(setq filldelta 2));前后三層驅(qū)動指令掃描線間距較小,增加模型強度,中間層間距適當(dāng)疏些,以節(jié)省材料
(setq ang(+ang(/pi 2)));相鄰層的填充角度相差90°,增加打印時材料粘合度
(setvar"hpspace"filldelta);指定填充方案的間距
(setvar"hpang"ang);指定填充方案的角度
(command"hatch""""""""n"B"");填充
(command"explode""last""");炸開,獲得直線
(command"change"D"""p""la""hatch""");置于hatch圖層中)
以上只是最為核心的幾個代碼,并不能直接運行。
圖2 技術(shù)流程圖
建立圖3所示的三維CAD模型,其中整體邊界框為44mm×60mm×50mm。為了演示切片程序,將切片厚度定為3(實際應(yīng)該為0.15~0.2),得到圖4所示的切片數(shù)據(jù)。
圖3 三維CAD模型
圖4 模型切片
圖5 為該模型高度分別為5mm、15mm、30 mm處的切片輪廓。其中直線為驅(qū)動指令的填充直線,線框為實體的切片輪廓。證明本程序可以實現(xiàn)對三維CAD模型的直接切片。
圖5 模型指定層切片
[1] Cao W,Miyamoto Y.Direct slicng from AutoCAD solid models for rapid prototying[J].International Journal of Advanced Manufacturing Technology,2003,21(10-11):739-742.
[2] 馬靜靜,胥光申.基于AutoCAD的CAD模型直接切層方法研究[J].計算機光盤軟件與應(yīng)用,2012(13):120-130.
[3] 馬錦華,盧章平.AutoCAD環(huán)境下直接適應(yīng)性切片方法及實現(xiàn)[J]機械設(shè)計與制造,2007(07):100-102.
[4] 李占利,胡德州.三維模型的直接分層軟件研究與開發(fā)[J].西安科技學(xué)院學(xué)報,2002,22(02):189-193.