FDM技術(shù)是快速成型技術(shù)中的一種,該技術(shù)基于離散/堆積原理,將模型按照一定的方向(通常為z軸正方向)、一定的厚度離散為一系列二維截面信息,根據(jù)每層輪廓信息確定加工路徑,將熔融的絲狀材料按照每一層生成的路徑逐層堆積成型[1]。在基于FDM技術(shù)的3D打印過(guò)程中,由于模型當(dāng)前打印層都是在下一層基礎(chǔ)上進(jìn)行堆積,模型下一層對(duì)當(dāng)前層有著關(guān)鍵的定位和支撐作用。如果當(dāng)前打印的截面大于對(duì)其起支撐作用的截面,而且上層截面沒(méi)有合理的支撐結(jié)構(gòu),模型懸空部分就會(huì)出現(xiàn)塌陷或變形,影響打印過(guò)程以及模型的精度。由于FDM技術(shù)這種特殊的工藝原理,能否準(zhǔn)確找到模型的待支撐區(qū)域,以及能否為相應(yīng)的區(qū)域添加合理的支撐結(jié)構(gòu),直接影響到模型能否連續(xù)打印以及模型最終的精度。
目前,F(xiàn)DM工藝支撐主要有基礎(chǔ)支撐,突出部分支撐和懸掛支撐等,主要的支撐形式有斜支撐,直支撐和十字支撐等。2013年Strano等采用一個(gè)三維周期很小的曲面函數(shù)生成一種具有多孔結(jié)構(gòu)的支撐形式,結(jié)構(gòu)的穩(wěn)定性很好,主要用于基礎(chǔ)支撐,不適合斜支撐[2]。2013年Wang等提出一種蒙皮框架的輕量化打印模型,在此基礎(chǔ)上提出一種圓柱狀的支撐結(jié)構(gòu),雖然可以節(jié)省材料,但是支撐解結(jié)構(gòu)的穩(wěn)定性不好[3]。2014年Dumas等提出一種類(lèi)似于橋梁的支撐結(jié)構(gòu)的生成方法,結(jié)構(gòu)具有良好的穩(wěn)定性,但受支撐類(lèi)型的限制,不適合于斜支撐[4]。2015年Zhang等提出一種基于中軸樹(shù)的骨架結(jié)構(gòu),結(jié)構(gòu)的穩(wěn)定性好,但是由于結(jié)構(gòu)是實(shí)體的一部分,不能夠剝除[5]。
針對(duì)以上不足,本文設(shè)計(jì)了一種基于臨界角的樹(shù)狀支撐結(jié)構(gòu)生成算法,算法利用上層待支撐點(diǎn)的臨界約束角獲取下層支撐點(diǎn)的位置,依次迭代找到所有的帶支撐點(diǎn)作為樹(shù)狀支撐的節(jié)點(diǎn),生成節(jié)點(diǎn)結(jié)構(gòu)體,最后通過(guò)掃略和曲面重建生成樹(shù)狀實(shí)體。
在基于FDM技術(shù)的3D打印過(guò)程中,模型中的存在的懸吊點(diǎn)、懸吊線(xiàn)、懸吊面都是需要添加支撐結(jié)構(gòu)的部分。本文中提出的樹(shù)狀支撐結(jié)構(gòu)是針對(duì)模型中存在的懸吊面設(shè)計(jì)的支撐結(jié)構(gòu)。
算法根據(jù)模型中三角形面片的外法向量與z軸正向(重力的反方向)之間的夾角關(guān)系來(lái)提取待支撐區(qū)域。其中z軸正向向量為v(0,0,1),三角形面片的外法向量為n,兩者滿(mǎn)足:n?v=|n|*|v|cosθ,利用兩者的關(guān)系來(lái)計(jì)算夾角。
首先讀取STL文件模型,構(gòu)建整個(gè)模型的拓?fù)潢P(guān)系[6],根據(jù)上述計(jì)算夾角的方法計(jì)算出模型中第i為模型三角形面片的個(gè)數(shù))個(gè)三角形面片與z軸的正向之間的夾角θi,設(shè)待支撐三角面片的外法向量與z軸正向之間的臨界角為θmin,如圖1所示,1)θ1<θmin,該三角形面片不需要添加支撐結(jié)構(gòu);2)θ2=θmin,可能需要添加支撐結(jié)構(gòu);3)θ3>θmin,需要添加支撐結(jié)構(gòu)。為避免第二種情況可能影響打印過(guò)程,將滿(mǎn)足第二種情況的面片作為待支撐三角形面片[7~9],圖1模型中的加粗部分即為需要添加支撐結(jié)構(gòu)的部分。
圖1 模型待支撐面提取原理
根據(jù)上述算法計(jì)算出模型中所有的待支撐三角形面片,將提取出的所有的待支撐三角形面片依據(jù)模型的拓?fù)潢P(guān)系利用種子擴(kuò)散方法進(jìn)行整合,得到模型的若干個(gè)待支撐區(qū)域。
圖2 單個(gè)待支撐區(qū)域效果
如圖2所示,種子擴(kuò)散法即從整體待支撐三角形面片列表中選出一個(gè)三角形面片,把此面片作為種子并根據(jù)模型拓?fù)潢P(guān)系計(jì)算出與其相鄰的三個(gè)面片是否是待支撐三角形面片,若相鄰的三角形面片有待支撐三角形面片,則將其中的待支撐三角形面片作為種子,再依次判斷與其相鄰的面片是否是待支撐三角形面片,依次循環(huán)直到?jīng)]有種子面片可以使用,即可得到單個(gè)區(qū)域內(nèi)所有待支撐三角形面片,并將得到的該區(qū)域內(nèi)的待支撐三角形面片從整體待支撐面片列表中去除。再?gòu)哪P驼w待支撐三角形面片列表中取出一個(gè)面片計(jì)算下一個(gè)區(qū)域,直到整體列表中待支撐三角形面片為空,即得到整個(gè)模型的所有待支撐區(qū)域。具體流程如圖3所示。
圖3 模型待支撐區(qū)域提取流程圖
根據(jù)以上算法計(jì)算出整個(gè)模型所有的需要加支撐的區(qū)域,算法驗(yàn)證如圖4(a)、圖4(b)中的灰色區(qū)域所示。
圖4 待支撐區(qū)域提取結(jié)果
通過(guò)遍歷以上得到的每個(gè)待支撐區(qū)域內(nèi)的三角形面片的三個(gè)點(diǎn)的坐標(biāo),找到每個(gè)區(qū)域?qū)?yīng)的包絡(luò)矩形,即得到區(qū)域在x,y兩個(gè)方向的x和y最小值和最大值,由于材料自身具有粘性,可以在一定的距離內(nèi)實(shí)現(xiàn)自支撐,設(shè)定材料的自支撐長(zhǎng)度l,并以其作為步長(zhǎng),在包絡(luò)矩形內(nèi)的x軸和y軸兩個(gè)方向按步長(zhǎng)做直線(xiàn)段,求取包絡(luò)矩形內(nèi)交點(diǎn)坐標(biāo)作為支撐待支撐區(qū)域的支撐點(diǎn)相應(yīng)坐標(biāo)x和y的值。
根據(jù)x和y的值,依次遍歷區(qū)域內(nèi)的三角形,找到包含該二維點(diǎn)的三角形,建立三角形平面方程計(jì)算出對(duì)應(yīng)該二維點(diǎn)在平面內(nèi)的z值,得到該點(diǎn)的三維坐標(biāo)點(diǎn)(x,y,z),依次計(jì)算出各個(gè)相交處的二維點(diǎn)對(duì)應(yīng)在待支撐區(qū)域內(nèi)三角形面上的三維點(diǎn)作為待支撐區(qū)域的支撐點(diǎn),最終得到待支撐區(qū)域的頂層支撐點(diǎn)集合P。
如圖5(a)所示,依次選取得到的兩個(gè)相鄰的頂層的支撐點(diǎn)p1,p2(p1,p2∈P),以p1,p2作為頂點(diǎn),以臨界角θmin作為圓錐軸線(xiàn)和z軸負(fù)方向的夾角,建立兩個(gè)圓錐C1,C2,兩個(gè)圓錐的交叉區(qū)域?yàn)镠,用存在于H區(qū)域內(nèi)的一點(diǎn)s連接p1,p2實(shí)現(xiàn)對(duì)p1,p2兩點(diǎn)的支撐。為了減少支撐結(jié)構(gòu)的長(zhǎng)度,提高支撐結(jié)構(gòu)的穩(wěn)定性,選取區(qū)域H內(nèi)的最高點(diǎn)s作為p1,p2的支撐點(diǎn)[10]。如圖5(b)所示,過(guò)交叉區(qū)域最高點(diǎn)做一個(gè)平行于xoy平面的平面,該平面與兩個(gè)圓錐相交得到兩個(gè)圓,半徑分別為r1和r2,已知兩個(gè)頂點(diǎn)p1(px1,py1,pz1)p2(px2,py2,pz2),求點(diǎn)s的坐標(biāo)(Sx,Sy,Sz)。
建立以下關(guān)系式:
圖5 下一層支撐點(diǎn)提取原理
根據(jù)上述的關(guān)系式可以得到點(diǎn)s的坐標(biāo):
上述算法僅僅考慮了使用臨界角建立的相鄰圓錐體之間的交點(diǎn)作為樹(shù)狀支撐結(jié)構(gòu)的節(jié)點(diǎn),并未考慮用圓錐體和模型的交點(diǎn)作為支撐結(jié)構(gòu)的節(jié)點(diǎn),為了減少打印使用的材料,提高打印的效率,需要計(jì)算出路徑最短的支撐結(jié)構(gòu),即根據(jù)計(jì)算出的所有可能的節(jié)點(diǎn)選取出能完成支撐作用并且路徑最短的方式,以這些節(jié)點(diǎn)作為整個(gè)樹(shù)形支撐結(jié)構(gòu)的節(jié)點(diǎn)集合。圖6顯示了模型待支撐面的待支撐點(diǎn)以及生成支撐結(jié)構(gòu)過(guò)程中的用于計(jì)算支撐節(jié)點(diǎn)的圓錐體。集體支撐結(jié)構(gòu)設(shè)計(jì)算法如下:
集合P是模型中待支撐面中點(diǎn)的集合,C中存放了P中點(diǎn)對(duì)應(yīng)的圓錐體,而S則作為根據(jù)臨界角計(jì)算出的下層待支撐點(diǎn)的集合(按點(diǎn)的z值由大到小存放)。
依次遍歷點(diǎn)p∈P和對(duì)應(yīng)的圓錐進(jìn)行以下操作:
1)計(jì)算出圓錐c與模型最近最近的交點(diǎn)sm,取出計(jì)算出的該點(diǎn)和相鄰點(diǎn)計(jì)算出的交點(diǎn)s,如果線(xiàn)段psm的長(zhǎng)度小于ps,刪除對(duì)應(yīng)的點(diǎn)p和點(diǎn)對(duì)應(yīng)的圓錐,重復(fù)計(jì)算下一個(gè)點(diǎn)。
2)將計(jì)算得到的sm保存到集合P中,生成對(duì)應(yīng)sm的圓錐。
3)保存ps和與pis(pi為與p相鄰的點(diǎn)),刪除p和pi以及兩點(diǎn)相應(yīng)的圓錐c和ci。
4)如果集合P不為空,利用上述過(guò)程計(jì)算下一個(gè)點(diǎn)。
建立樹(shù)形數(shù)據(jù)結(jié)構(gòu),根據(jù)計(jì)算得到的線(xiàn)段的點(diǎn),將屬于同一個(gè)個(gè)樹(shù)的點(diǎn)按z值由大到小排列,得到若干個(gè)支撐樹(shù)的枝干。
圖6 支撐結(jié)構(gòu)計(jì)算
在得到待支撐區(qū)域所對(duì)應(yīng)的樹(shù)狀支撐結(jié)構(gòu)的枝干節(jié)點(diǎn)后,如圖7(a)以一個(gè)節(jié)點(diǎn)為中心以r1為半徑做一個(gè)圓,再以對(duì)該節(jié)點(diǎn)實(shí)現(xiàn)支撐作用的點(diǎn)為中心以r2做一個(gè)圓(由于下層枝干比上層的枝干承受更大的壓力,對(duì)應(yīng)r2的值應(yīng)大于r1的值,可以加強(qiáng)支撐結(jié)構(gòu)的穩(wěn)定性),按照一定的弧度將兩個(gè)圓分成n份,計(jì)算出相應(yīng)的分割點(diǎn)坐標(biāo),將兩個(gè)圓上的分割點(diǎn)按照一定的規(guī)則連接,構(gòu)成三角網(wǎng)格,如圖7(b)所示,作為樹(shù)狀支撐結(jié)構(gòu)的枝干。將r2作為下一層枝干起始點(diǎn)圓的半徑,依次構(gòu)建出整個(gè)樹(shù)形支撐結(jié)構(gòu)的網(wǎng)格曲面。
圖7 枝干結(jié)構(gòu)網(wǎng)格化
在構(gòu)建p1s和p2s兩條線(xiàn)段對(duì)應(yīng)的網(wǎng)格曲面過(guò)程中,會(huì)出現(xiàn)p1s和p2s對(duì)應(yīng)的兩段網(wǎng)格曲面存在交叉的情況,如圖8(b)深色區(qū)域所示,在打印過(guò)程中交叉部分會(huì)重復(fù)打印而引起震動(dòng),影響打印的穩(wěn)定性,因此需要對(duì)曲面進(jìn)行重建。本文采用Johns Hopkins University研究人員的算法(Version8.0)完成曲面重建[11]。為了得到穩(wěn)定的支撐結(jié)構(gòu),在設(shè)計(jì)過(guò)程中下層枝干的直徑略大于上層支撐結(jié)構(gòu),為了減少支撐結(jié)構(gòu)和模型的接觸面積,采用尖頂結(jié)構(gòu),方便打印完畢后模型和支撐結(jié)構(gòu)的剝離,如圖8(c)所示。
圖8 樹(shù)狀支撐結(jié)構(gòu)枝干處理
算法的目的是為模型的待支撐的區(qū)域建立穩(wěn)定且節(jié)省材料的樹(shù)狀支撐結(jié)構(gòu),為模型的順利打印建立良好的前提。如圖6所示,支撐結(jié)構(gòu)起始于待支撐面上的待支撐點(diǎn),利用臨界角構(gòu)建出樹(shù)狀結(jié)構(gòu)枝干的各層節(jié)點(diǎn),樹(shù)狀支撐結(jié)構(gòu)終點(diǎn)連接在模型或打印的起始面上,將得到的各層枝干節(jié)點(diǎn)利用圖8所示的算法構(gòu)建出各層枝干的網(wǎng)格曲面,組成整個(gè)區(qū)域的樹(shù)狀支撐結(jié)構(gòu),支撐結(jié)構(gòu)的生長(zhǎng)過(guò)程如圖9所示。
圖9 支撐結(jié)構(gòu)的生成過(guò)程
使用c++完成算法的編寫(xiě),并進(jìn)行模型的三維顯示,驗(yàn)證模型待支撐區(qū)域提取算法的正確性。將得到的支撐結(jié)構(gòu)的網(wǎng)格曲面與模型合并,最終生成一個(gè)STL文件。算法效果如圖10(a)、圖10(b)所示。
通過(guò)對(duì)FDM技術(shù)原理以及基于STL文件模型支撐結(jié)構(gòu)自動(dòng)生成算法的研究,有效地解決了模型待支撐區(qū)域的自動(dòng)提取和驗(yàn)證,樹(shù)狀支撐結(jié)構(gòu)的設(shè)計(jì),支撐結(jié)構(gòu)起點(diǎn)和終點(diǎn)的確定等問(wèn)題,有效減少了材料使用,節(jié)省了制作時(shí)間,支撐結(jié)構(gòu)更加簡(jiǎn)單,提高了制作過(guò)程的效率。
圖10 支撐結(jié)構(gòu)自動(dòng)生成算法驗(yàn)證
參考文獻(xiàn):
[1]孔楚海,等.3D打印技術(shù)在澆筑成型模中的應(yīng)用[J].模具工業(yè).2017,43(1):57-60.
[2]G.Strano.L,Hao.R,M.Eversion.K,E.Evan A new apporach to the design and optimisation of support structure in additive manfacturing[J].International Journal of Advanced Manufacturing Technology.2013,66(9):1247-1254.
[3]Weiming Wang,Tuanfeng Y.Wang Cost-effective Printing of 3D Objects With Skin-Frame Structure[J].Computer Aided Geometric Design.2013,32(6):2504-2507.
[4]J.Dumas,J.Hergel. Bridge the Gap:Automated Steady Scaffoldings For 3D Printing[J].ACM Transaction on Graphic.2014,33(4):1-10.
[5]Zhang.X,Xia.Y,Wang.J. Medial axis-an internal supporting structure for 3D printing[J].Computer Aided Geometric Design.2015,35:149-162.
[6]楊光,劉偉軍,王偉,田鳳杰,等.STL格式文件拓?fù)渲亟翱焖偾衅惴╗J].現(xiàn)代制造工程.2009,9(10):32-35.
[7]卞宏友,劉偉軍,王天然,等.基于STL模型支撐生成算法的研究[J].機(jī)械設(shè)計(jì)與制造.2005,(07):49-52.
[8]沈威,陶孟侖,李立杰,陳定方,陳萍,呂學(xué)昭,等.快速成型支撐結(jié)構(gòu)設(shè)計(jì)的算法研究[N].武漢理工大學(xué)學(xué)報(bào).2014,36(6):63-68.
[9]董學(xué)珍,莫健華,張李超,等.光固化快速成型中柱形支撐生成算法的研究[N].華中科技大學(xué)學(xué)報(bào).2004,32(8):16-19.
[10]沈振宏,戴寧,李大偉,吳長(zhǎng)友,等.基于臨界傾角約束的樹(shù)狀支撐結(jié)構(gòu)生成算法[J].中國(guó)機(jī)械工程.2016,27(8):1107-1112.
[11]Jhons Hopkins University and HUG HOPPE Microsoft Research.Screened possion Surface Reconstruction.