多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > 綜合技術(shù) > 3D打印切片軟件Cura及CuraEngine原理分析

3D打印切片軟件Cura及CuraEngine原理分析

來(lái)源:程序員人生   發(fā)布時(shí)間:2016-03-31 08:47:52 閱讀次數(shù):12740次

引言

        年初開(kāi)始進(jìn)入3D打印行業(yè),受命以Cura為基礎(chǔ),研發(fā)1款自主的3D打印切片軟件。

        自主研發(fā)要取其長(zhǎng)處,補(bǔ)其不足,首先自然是要弄清楚Cura到底做了甚么,讀Cura的代碼是必須的。我1向都覺(jué)得比起自己寫代碼來(lái),讀他人的代碼是1個(gè)漫又而痛苦的進(jìn)程,讀者的思想與寫者總有偏差,常常又沒(méi)法驗(yàn)證自己的料想是不是正確,只嘆人腦不是電腦,沒(méi)法把眼前的代碼從頭到尾履行1遍。不知道各位資深程序會(huì)有甚么辦法,我的辦法是“翻譯”,看著他人寫的代碼,加上自己的理解以后,按自己的喜好重新寫出來(lái),看1段翻譯1段,等全部翻譯完成,理論上作者的思路也明白了,同時(shí)還有了1份功能1模1樣的代碼,自己的理解是不是正確,也能夠通過(guò)履行“翻譯”出來(lái)的代碼驗(yàn)證。

        計(jì)劃總是美好的,中間的工程卻是充滿變數(shù),之間的曲折折疊不說(shuō)。經(jīng)過(guò)若干次推倒重寫,委曲算是有了1份自己的切片軟件,又經(jīng)過(guò)了半年的斟酌摸索和打印經(jīng)驗(yàn)積累,1個(gè)還算另自己滿意的切片軟件終究誕生。起名Pango,先觀大略。

        Pango的介紹和說(shuō)明先按下不表,以會(huì)有機(jī)會(huì)另外發(fā)文詳述。
        在Pango的開(kāi)發(fā)進(jìn)程中,我對(duì)Cura的理解也日趨深入。時(shí)至本日,我也有了信心可以把我的這些經(jīng)驗(yàn)、理解和心得分享出來(lái),供大家參詳12,若能對(duì)后來(lái)的Cura研究者有所助益,那是再好不過(guò)。


Cura的架構(gòu)

        Cura是1個(gè)python語(yǔ)言實(shí)現(xiàn),使用wxpython圖形界面框架的3D打印切片界面軟件,說(shuō)它是界面軟件是由于Cura本身其實(shí)不會(huì)進(jìn)行實(shí)際的切片操作。實(shí)際的切片工作是由另外1個(gè)C++語(yǔ)言實(shí)現(xiàn)的CuraEngine命令行軟件來(lái)具體負(fù)責(zé)的,用戶在Cura界面上的絕大多數(shù)操作,如加載模型、安穩(wěn)旋轉(zhuǎn)縮放、參數(shù)設(shè)置等終究會(huì)轉(zhuǎn)換成并履行1條CuraEngine命令;CuraEngine把輸入的STL、DAE或OBJ模型文件切片輸出成gcode字符串返回給Cura;Cura再把gcode在3D界面上可視化成路徑展現(xiàn)給用戶。

        我主要參考的代碼是CuraEngine,本文主要篇幅也會(huì)放在CuraEngine上。而Pango的界面代碼就主要靠我自己發(fā)揮了。

        Cura和CuraEngine都可以Github上找到,地址:


        https://github.com/daid/Cura

        https://github.com/Ultimaker/CuraEngine

        我所參考的版本是15.04,15.06以后Cura和CuraEngine都有較大的改動(dòng),但核心流程沒(méi)變。所以本文分析的版本也到15.04為止。

        言歸正傳,下面我們將開(kāi)始1步1步揭開(kāi)CuraEngine把1個(gè)模型文件轉(zhuǎn)換成為gcode的進(jìn)程。

切片流程

        從整體上講,CuraEngine的切片分為5個(gè)步驟:


步驟1:模型載入

        有1點(diǎn)3D編程經(jīng)驗(yàn)的人都知道,計(jì)算機(jī)中的3D模型大多是以3角形面組合成的表面所包裹的空間來(lái)表示的。3角形作為3D模型的基本單元,有結(jié)構(gòu)簡(jiǎn)單,通用性強(qiáng),可組合成任意面的特點(diǎn);空間坐標(biāo)中只要3個(gè)點(diǎn)就能夠表示1個(gè)唯1的3角形,兩點(diǎn)只能表示1條直線,而再多的直線也沒(méi)法組成1個(gè)平面;空間中的任意3個(gè)不共線的點(diǎn)都可以組成1個(gè)3角形,而4個(gè)點(diǎn)所組成的4邊形就必須要求4點(diǎn)共面;任意的表面都可以拆解成3角形,1個(gè)4邊形可以拆解成兩個(gè)3角形,但1個(gè)3角形卻沒(méi)有辦法用4邊形組合而成。計(jì)算機(jī)所善于的事情就是把簡(jiǎn)單的事情不斷重復(fù),而3角形正是由于這些特性,成了計(jì)算機(jī)3D世界的基石。

        CuraEngine內(nèi)部也是用3角形組合來(lái)表示模型的,不過(guò)一樣1個(gè)3角形組合,卻有沒(méi)有窮多種數(shù)據(jù)結(jié)構(gòu)來(lái)進(jìn)行存儲(chǔ)。CuraEngine切片的第1步,就是從外部讀入模型數(shù)據(jù),轉(zhuǎn)換成以CuraEngine內(nèi)部的數(shù)據(jù)結(jié)構(gòu)所表示的3角形組合。

        有了3角形組合還不夠,CuraEngine在載入模型階段還要對(duì)3角形進(jìn)行關(guān)聯(lián)。兩個(gè)3角形共有1條邊的,就能夠判斷它們?yōu)橄噜?角形。1個(gè)3角形有3條邊,所以最多可以有3個(gè)相鄰3角形。1般而言,如果模型是封閉的,那它的每個(gè)3角形都會(huì)有3個(gè)相鄰3角形。

        有了3角形的相鄰關(guān)系,可以大幅提高低1個(gè)步驟分層進(jìn)程的處理速度。Cura之所以成為當(dāng)前市場(chǎng)上切片速度最快的軟件,這是其中最顯著的優(yōu)化之1。

        模型載入更詳細(xì)的進(jìn)程會(huì)另文分析,敬請(qǐng)期待。

步驟2:分層

        如果把模型放在XY平面上,Z軸對(duì)應(yīng)的就是模型高度。我們把XY平面抬高1定高度再與模型的表面相交,就能夠得到模型在這個(gè)高度上的切片。所謂的分層就是每隔1定高度就用1個(gè)XY平面去和模型相交作切片,層與層之間的距離稱為層高。全部層高切完后就能夠得到模型在每個(gè)層上的輪廓線。就像是切土豆片1樣,把1個(gè)圓的或不圓的異或不管甚么奇形怪狀的土豆用菜刀1刀1刀切開(kāi),最后就可以得到1盤薄如紙片的土豆片,固然那還得你的刀功要足夠好才行。

        分層本質(zhì)上就是1個(gè)把3D模型轉(zhuǎn)化為1系列2D平面的進(jìn)程,自此以后的所有操作就都是在2D圖形的基礎(chǔ)上進(jìn)行了。

        在前面模型載入階段我說(shuō)到了CuraEngine埋了1個(gè)3角形關(guān)聯(lián)的伏筆,作用是甚么,現(xiàn)在可以揭曉答案了。我們知道,兩個(gè)平面相交,得到的是1條直線,1個(gè)平面和1個(gè)3角形相交,就得到1條線段。固然也有可能甚么也得不到,平臺(tái)平行啦,3角形的3個(gè)點(diǎn)都在平面的同1面之類。這些我們可以不管,我們現(xiàn)在只關(guān)心和平面有交集的那些3角形便可。我們把1個(gè)平面和所有的3角形都相交了1遍,得到了許許多多的線段。但是我們需要的是2D圖形,3角形是2D圖形,4邊形,任意多邊形都是2D圖形,而線段不是。所以我們就要把這些線段試著連成1個(gè)多邊形,那末問(wèn)題來(lái)了,要把這些線段連起來(lái),只能兩個(gè)兩個(gè)地去試,看看它們是否是共端點(diǎn)。粗算1下,每層都是平方級(jí)的復(fù)雜度,再算上層數(shù),那就是3次方級(jí)。但現(xiàn)在,我們知道了3角形的關(guān)聯(lián)關(guān)系。兩個(gè)關(guān)聯(lián)的3角形,如果都與1個(gè)平面相交,那它們的交線1定也是關(guān)聯(lián)的。如此1來(lái),每條線段只需要判斷3個(gè)與它相鄰3角形,看看與這個(gè)平面有無(wú)交線便可,1下子就把問(wèn)題的復(fù)雜度降了1個(gè)次元。速度自然可以有質(zhì)的提升。

        分層更詳細(xì)的進(jìn)程會(huì)另文分析,敬請(qǐng)期待。

步驟3:劃分組件

        經(jīng)過(guò)分層以后,我們得到了1疊2D平面圖形。接下來(lái)需要做的事情就是對(duì)每層的平面圖形進(jìn)行跑馬圈地,標(biāo)記出哪里是外墻、內(nèi)墻、填充、上下表面、支持等等。

         3D打印在每層是以組件單位,所謂組件指的就是每層2D平面圖形里可以連通的區(qū)域,比如左圖就能夠拆分為黃、綠、藍(lán)3個(gè)組件。而打印的順序就每打印完1個(gè)組件,接著會(huì)挑選1個(gè)離上1個(gè)組件最近的組件作為下1個(gè)進(jìn)行打印,如此循環(huán)直至1層的組件全部打印完成;接著會(huì)Z軸上升,重復(fù)上述步驟打印下1層的所有組件。

        至于每個(gè)組件怎樣打印,就和我們手工畫(huà)畫(huà)1樣,先打邊線再對(duì)邊線內(nèi)部填充。邊線可以打印多圈,最外層圈邊線稱為外墻,其它的統(tǒng)稱為內(nèi)墻,CuraEngine之所以要對(duì)內(nèi)外墻進(jìn)行辨別,是為了可以為它們定制不同的打印參數(shù):外墻會(huì)被人視察到,所以可以采取低速以提高表面質(zhì)量,內(nèi)墻只是起增加強(qiáng)度的作用,可以稍略加快打印速度以節(jié)省時(shí)間。這些都可以在Cura界面的高級(jí)選項(xiàng)里進(jìn)行配置。

        有1點(diǎn)值得注意,這也是我半年打印的經(jīng)驗(yàn):由于FDM擠出裝置的特性所至,擠出機(jī)是通過(guò)影響加熱腔里的熔絲壓力,間接決定噴嘴擠出速度的。而加熱腔本身對(duì)壓力就有1個(gè)緩沖作用,所以擠出機(jī)進(jìn)絲速度的突變其實(shí)不會(huì)使得噴嘴的擠出速度立即隨著變化,而是有1個(gè)延遲。這1點(diǎn)在遠(yuǎn)端送絲的機(jī)器上更加明顯,而恰恰我們公司的主打產(chǎn)品F3CL就是遠(yuǎn)端送絲,在Pango中斟酌到這個(gè)問(wèn)題,并加上了特殊處理,事實(shí)證明的確對(duì)打印質(zhì)量有1定的提升。具體辦法是甚么,我先賣個(gè)關(guān)子,會(huì)Pango的專文里進(jìn)行講授。

        內(nèi)外墻標(biāo)記完以后就是填充和上下表面的標(biāo)記了。填充有1個(gè)填充率,0%填充率就是無(wú)填充,100%就是打成1個(gè)密實(shí)的平面,上下表面就是填充率為100%的填充。中間的填充率自然介于二者之間,就像1張魚(yú)網(wǎng),填充率越高網(wǎng)眼越細(xì)。

        軟件會(huì)先把內(nèi)墻之內(nèi)部份統(tǒng)統(tǒng)標(biāo)記成填充,以后再進(jìn)1步判斷其中有哪些部份要轉(zhuǎn)換成為上下表面。是哪些部份呢?在Cura的基本設(shè)置里有1個(gè)上下表面層數(shù)的設(shè)置,它代表了模型的上下與空氣接觸的表面有幾層,它就在這里會(huì)被用到。CuraEngine會(huì)把當(dāng)前層上下n層(上下表面層數(shù))取出來(lái)與當(dāng)前層進(jìn)行比較,凡是當(dāng)前層有而上下n層沒(méi)有的部份就會(huì)被劃歸到表皮。而原來(lái)的填充區(qū)域在割除被劃到表皮的部份后剩下的部份就是終究的填充區(qū)域。

        CuraEngine在處理進(jìn)程中大量用到了2D圖形運(yùn)算操作。有關(guān)2D圖形的運(yùn)算,有很多人研究,也被做成許多成熟的庫(kù)以供調(diào)用。CuraEngine的作者拿來(lái)主義,選取了1個(gè)他認(rèn)為比較好用的庫(kù),叫ClipperLib的庫(kù)直接內(nèi)嵌到軟件當(dāng)中。ClipperLib所使用的2D圖形算法也很著名,叫Vattis Clipping Algorithm,很復(fù)雜,我也沒(méi)有完全弄懂,有興趣的讀者要是弄懂了可以多多交換。ClipperLib的網(wǎng)址是:http://www.angusj.com/delphi/clipper.php

        這里我先簡(jiǎn)單介紹1下CuraEngine所用到的幾種2D圖形的運(yùn)算,都是由ClipperLib實(shí)現(xiàn)的:交、并、減、偏移。它們與集合操作類似,先看圖:

 

圖形相交

        2元圖形操作,終究結(jié)果為兩個(gè)圖形共同包括的區(qū)域。記作:A * B

圖形相并

        2元圖形操作,終究結(jié)果為兩個(gè)圖形其中之1或二者所包括的區(qū)域。記作:A + B

圖形相減

        2元圖形操作,終究結(jié)果為屬于前者但不屬于后者的區(qū)域。記作:A - B

圖形偏移(外擴(kuò))

        1元圖形操作,終究結(jié)果為圖形區(qū)域的邊界向外擴(kuò)大指定的距離。

圖形偏移(內(nèi)縮)

        1元圖形操作,終究結(jié)果為圖形區(qū)域的邊界向內(nèi)收縮指定的距離。內(nèi)縮與外擴(kuò)互為逆運(yùn)算。

        這些就是CuraEngine所用到的2D圖形操作。運(yùn)算不多,卻可以做許許多多的事情。比如上面所說(shuō)的上下表面計(jì)算,就能夠用數(shù)學(xué)公式來(lái)表示:

表面(i) = [填充(i) - 層(i + n)] + [填充(i) - 層(i - n)]

填充(i) = 填充(i) - 表面(i)

        其中,i為當(dāng)前層號(hào),n為上下表面層數(shù)(可以不1樣)。多簡(jiǎn)單,數(shù)學(xué)就是這么任性!

        一樣的,組件里面內(nèi)外墻,填充怎樣劃分,只用1個(gè)內(nèi)縮運(yùn)算就能夠弄定:

外墻 = 組件.offset(-線寬)

內(nèi)墻1 = 組件.offset(-線寬 * 2)

...

內(nèi)墻n = 組件.offset(-線寬 * (n + 1))

填充 = 組件.offset(-線寬 * (n + 2))

        如果模型無(wú)需支持,那組件劃分到這里就能夠收工了。否則,接下就是計(jì)算支持的時(shí)間。

        我用CuraEngine半年下來(lái)覺(jué)得它最大的不足就是在支持上,這也是我在Pango投入最大精力要改進(jìn)的地方,這里就先簡(jiǎn)單介紹1下CuraEngine所用的支持算法。

        CuraEngine首先把全部打印空間在XY平臺(tái)上劃分成為200um*200um的網(wǎng)格。每一個(gè)網(wǎng)格的中心點(diǎn)再延Z軸向上作1條直線,這條直線可能會(huì)與組成3D模型的3角形相交。3角形與直線的交點(diǎn)和這個(gè)3角形的傾斜度會(huì)被記錄到網(wǎng)格里面。

        現(xiàn)在每一個(gè)網(wǎng)格里記錄下了1串被稱為支持點(diǎn)的列表,每一個(gè)支持點(diǎn)包括1個(gè)高度和1個(gè)傾斜度信息。接下來(lái)會(huì)對(duì)每一個(gè)網(wǎng)格的支持點(diǎn)列表依照高度從低到高排序。根據(jù)這些信息就能夠判斷模型上任意1個(gè)點(diǎn)是不是需要支持了,怎樣判斷,我們看圖說(shuō)話:

        讓我們從底面開(kāi)始延著1根網(wǎng)格中心線往上走。起始我們是在模型外部的,當(dāng)遇到第1個(gè)支持點(diǎn)的時(shí)候,就從模型外部進(jìn)入到了模型內(nèi)部。我們稱這個(gè)支持點(diǎn)為進(jìn)點(diǎn)。

        繼續(xù)向上,遇到了第2個(gè)支持點(diǎn),又從模型內(nèi)部又退到了模型外部。我們稱這個(gè)支持點(diǎn)為出點(diǎn)。

        接著向上,我們可以發(fā)現(xiàn),進(jìn)點(diǎn)與出點(diǎn)總是交替出現(xiàn)的。

        利用這個(gè)規(guī)律,對(duì)模型上任何1個(gè)點(diǎn),我們只要找到這個(gè)點(diǎn)所對(duì)應(yīng)的網(wǎng)格,再找到這個(gè)網(wǎng)格里在這個(gè)點(diǎn)以上最近的1個(gè)支持點(diǎn),我們就能夠得到兩個(gè)信息:這個(gè)點(diǎn)之上是不是有模型懸空;這個(gè)點(diǎn)上面的懸空點(diǎn)的面的傾斜度是多少。

        Cura界面的專家設(shè)置里面有支持角度的設(shè)置,如果1個(gè)點(diǎn)處于模型懸空部份以下,并且懸空點(diǎn)傾斜度大于支持角度,那這個(gè)點(diǎn)就是需要支持的。所1個(gè)平臺(tái)上所有的需要支持的點(diǎn)連接起來(lái)圍成的2D圖形就是支持區(qū)域。

        CuraEngine所使用的支持算法比較粗糙,但勝在速度很快。先不說(shuō)網(wǎng)格化后失去了精度,通過(guò)傾斜角度來(lái)判斷,模型下方1旦傾斜角產(chǎn)生了突變,像左圖這類從負(fù)45

度1下突變成正45度,傾斜角判斷無(wú)能為力,除非把它改大到60度,這樣的話,全部模型都會(huì)被過(guò)度支持。這樣矯枉過(guò)正,既不科學(xué),也浪費(fèi)材料和打印時(shí)間,還會(huì)對(duì)模型表面質(zhì)量帶來(lái)不好的影響。

        科學(xué)的支持算法應(yīng)當(dāng)是找到模型局部最低點(diǎn)進(jìn)行支持,最低點(diǎn)以上不1定需要支持。由于FDM材料本身的粘性,使得材料的走線可以有1部份懸空而不坍塌,這個(gè)效果被稱為

Overhang,只要上層材料的懸空距離小于1定的值,它就不需要支持,這個(gè)距離以我的經(jīng)驗(yàn)應(yīng)當(dāng)在1/4到1/2線寬之間。我在Pango中就基于這個(gè)思路重新實(shí)現(xiàn)了支持的算法,結(jié)果雖然速度不如Cura的支持算法那末快,但效果非常好,該撐的地方撐,不該撐的地方也不會(huì)多此1舉。

        Pango的支持算法我會(huì)在以后專文介紹。順帶1說(shuō),CuraEngine在下半年做了很大的改動(dòng),其中之1就是拋棄了之前的支持算法,而新的算法也和我上面所講的思想異曲同工。我要聲明的是Pango的支持算法和CuraEngine誰(shuí)也沒(méi)有抄誰(shuí),我的算法是自己拍腦袋想出來(lái)的。算是英雄所見(jiàn)略同吧。

        支持范圍肯定以后,也和組件1樣,可以有外墻、內(nèi)墻、填充、上下表面。依樣畫(huà)葫蘆便可。CuraEngine對(duì)支持,只會(huì)生成外墻和填充,Pango則會(huì)生成更多。

        組件和支持就是CuraEngine在這1步所生成的結(jié)果,這1步可以說(shuō)是全部切片進(jìn)程的核心,更詳細(xì)的進(jìn)程會(huì)另文分析,敬請(qǐng)期待。



步驟4:路徑生成

        地圈好了,就該在里面種菜了。這1步路徑生成績(jī)要開(kāi)始計(jì)劃噴頭在不同的組件中怎樣運(yùn)動(dòng)。路徑按大類來(lái)分,有輪廓和填充兩種。

        輪廓很簡(jiǎn)單,沿著2D圖形的邊線走1圈便可。前1步所生成的外墻、內(nèi)墻都屬于輪廓,可以直接把它們的圖形以設(shè)置里的線寬轉(zhuǎn)換為輪廓路徑。

        填充略微要復(fù)雜1些,2D圖形指定的只是填充的邊界,而生成的路徑則是在邊界的范圍內(nèi)的條紋或網(wǎng)格結(jié)構(gòu),就像窗簾或魚(yú)網(wǎng),如左圖。這兩種就最基本的結(jié)構(gòu),固然或許你還可以想出其它花式的填充,比如蜂窩狀或S型,這些在新的Cura或別的甚么切片軟件里可能會(huì)實(shí)現(xiàn),但我打印下來(lái)還是這兩種基本結(jié)構(gòu)更讓人放心。CuraEngine在專家設(shè)置里可以對(duì)填充類型進(jìn)行選擇,里面除條紋和網(wǎng)格外還有1個(gè)自動(dòng)選項(xiàng),默許就是自動(dòng)。自動(dòng)模式會(huì)根據(jù)當(dāng)前的填充率進(jìn)行切換,當(dāng)填充率小于20%就用條紋填充,否則使用網(wǎng)格填充。由于網(wǎng)格結(jié)構(gòu)雖然更加公道,但它有1個(gè)問(wèn)題,就是交點(diǎn)的地方會(huì)打兩次。填充率越高,交點(diǎn)越密,對(duì)打印質(zhì)量的影響會(huì)越大。我們知道,表面就是100%的填充,如果表面用網(wǎng)格打,不但沒(méi)法打密實(shí),表面還會(huì)坑坑洼洼,所以100%填充只能用條紋打,這就是CuraEngine推薦自動(dòng)模式的緣由。

        至于填充率,就反應(yīng)在線與線的間距上。100%填充率間距為0;0%填充率間距無(wú)窮大,1根線條也不會(huì)有。

        每一個(gè)組件獨(dú)立的路徑生成好了,還要肯定打印的前后順序。順序先好了可以少走彎路,打印速度和質(zhì)量都會(huì)有提升。路徑的順序以先近后遠(yuǎn)為基本原則:每打印完1條路徑,當(dāng)前位置是上1條路徑的終點(diǎn);在當(dāng)前層里剩下還沒(méi)打印的路徑中挑選1條出發(fā)點(diǎn)離當(dāng)前位置最近的1條路徑開(kāi)打。路徑的出發(fā)點(diǎn)可以是路徑中的任意1個(gè)點(diǎn),程序會(huì)自行判斷。而路徑的終點(diǎn)有兩種可能:對(duì)直線,圖形只有兩個(gè)點(diǎn),終點(diǎn)就是除出發(fā)點(diǎn)以外的那個(gè)點(diǎn);對(duì)輪廓,終點(diǎn)就是出發(fā)點(diǎn),由于輪廓是1個(gè)封閉圖形,從它的出發(fā)點(diǎn)開(kāi)始沿任意方向走1圈,最后還會(huì)回到出發(fā)點(diǎn)。CuraEngine對(duì)路徑選擇做了1個(gè)估值,除斟酌到先近后遠(yuǎn)外,還順便參考了下1個(gè)點(diǎn)相對(duì)當(dāng)前點(diǎn)的方向,它的物理意義就是減少噴頭轉(zhuǎn)彎。賽車在直道上開(kāi)得1定比彎道快,不是么。

        路徑的順序也肯定了,還有1個(gè)問(wèn)題需要斟酌:如果前后兩條路徑首尾相連,那直接走就是了,但大多數(shù)情況并不是如此,前1條路徑的終點(diǎn)常常和后1條路徑出發(fā)點(diǎn)之間有1段距離。這時(shí)候候去往下1點(diǎn)的路上要謹(jǐn)慎了,肯定不能繼續(xù)擠出材料,否則輕則拉絲,重則模型面目全非。這段路噴頭就需要空走,即噴頭只移動(dòng),不吐絲,那只要把擠出機(jī)停下來(lái)不轉(zhuǎn)就好了嗎?也不行,由于前面分析過(guò),擠出機(jī)的速度要傳導(dǎo)到噴嘴,有1個(gè)延遲,不是你說(shuō)停它就立即停下來(lái)的。這是FDM打印的通病,解決辦法就是回抽。所謂回抽,就是在空走之前先讓擠出機(jī)高速反轉(zhuǎn)1段材料,這樣就能夠瞬間把加熱腔里的材料抽光,再移動(dòng)過(guò)去,中間就不會(huì)擠出材料,到了下1個(gè)點(diǎn),在打印之前,先把剛才抽回去的絲再按1樣的長(zhǎng)度放回來(lái),繼續(xù)打印。回抽可以很好地解決空走拉絲的問(wèn)題,但是它很慢,以抽1次0.5秒來(lái)算的話,如果打印1個(gè)表面,0.4線寬,10厘米的距離最少回抽25下,10幾秒鐘的時(shí)間1層,幾百上千層打下來(lái),光回抽所用的時(shí)間就是幾個(gè)小時(shí),是可忍孰不可忍!


        CuraEngine給我們提供了解決方案就是Comb,也就是繞路。我們先來(lái)看,是否是所有的回抽都是必須的呢?不回抽會(huì)拉絲是肯定的,但如果需要空走的路徑本來(lái)就要打印的,那拉絲又有何妨。按這個(gè)思路,就能夠給每一個(gè)組件設(shè)定1個(gè)邊界,只要路徑的出發(fā)點(diǎn)和終點(diǎn)都在這個(gè)邊界以內(nèi)的,空走都不回抽。這樣可以解決80%的問(wèn)題,但如果是左圖這樣的情況就行不通。

        紅色是出發(fā)點(diǎn),綠色是終點(diǎn),直接走過(guò)去會(huì)走出邊界的范圍。這時(shí)候我們就要繞1點(diǎn)路,走1條曲線到達(dá)我們的目的地。這就是Comb所做的事情,在Cura專家設(shè)置里面可以對(duì)Comb進(jìn)行設(shè)置,選擇開(kāi)啟、關(guān)閉還有表面不Comb。Comb可以大幅節(jié)省打印時(shí)間,但是同1個(gè)地方打印屢次對(duì)模型質(zhì)量還是會(huì)有細(xì)微的影響,個(gè)中利弊,交給用戶自己判斷。

        Comb的調(diào)劑是個(gè)細(xì)致活,Pango花了相當(dāng)多的時(shí)間來(lái)微調(diào)Comb功能以求到達(dá)更好的效果,進(jìn)程繁瑣,不再贅述。

        至此路徑生成完成,更詳細(xì)的進(jìn)程另文分析,敬請(qǐng)期待。

步驟5:gcode生成

        路徑都生成好了,還需要翻譯對(duì)打印機(jī)可以實(shí)別的gcode代碼才行。這1步花樣不多,循序漸進(jìn)便可。

        先讓打印機(jī)做1些準(zhǔn)備工作:歸零、加熱噴頭和平臺(tái)、抬高噴頭、擠1小段絲、風(fēng)扇設(shè)置。

        從下到上1層1層打印,每層打印之前先用G0抬高Z坐標(biāo)到相應(yīng)位置。

        依照路徑,每一個(gè)點(diǎn)生成1條gcode。其中空走G0;邊擠邊走用G1,Cura的設(shè)置里有絲材的直徑、線寬,可以算出走這些距離需要擠出多少材料;G0和G1的速度也都在設(shè)置里可以調(diào)劑。

        若需回抽,用G1生成1條E軸倒退的代碼。在下1條G1履行之前,再用G1生成1條相應(yīng)的E軸前進(jìn)的代碼。

        所有層都打完后讓打印機(jī)做1些掃尾工作:關(guān)閉加熱、XY歸零、機(jī)電釋放。

        生成gcode的進(jìn)程中,CuraEngine也會(huì)摹擬1遍打印進(jìn)程,用來(lái)計(jì)算出打印所需要的時(shí)間和材料長(zhǎng)度,這些也會(huì)寫在gcode的注釋里供用戶參考。

        gcode生成不用另文詳細(xì)分析,但是gcode的說(shuō)明還是可以專文分析1下,敬請(qǐng)期待。

待續(xù)

         寫了這么多,Cura的切片流程也只能講個(gè)大概,也算是個(gè)提綱,希望對(duì)大家有所幫助。我計(jì)劃對(duì)上面的第1個(gè)步驟再專文分析。除此以外,還有Cura界臉部分和Cura與CuraEngine的通訊也能夠講講。以后就是我半年創(chuàng)作,自我感覺(jué)良好到覺(jué)得可以超出Cura的Pango,也是不說(shuō)不快的。

生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 欧美精品xxxxx| 亚洲综合久久1区2区3区 | 在线免费看网站 | 一级爱爱片一级毛片-一毛 一级爱一级做a性视频 | 一级做a爱片久久蜜桃 | 男女性高清爱潮视频免费观看 | 亚洲二区在线视频 | 免费毛片网 | 国产综合欧美 | 亚洲精品视频在线播放 | 成人三级精品视频在线观看 | 国产成人一区二区三区免费观看 | 欧美人与物3dvideos | 综合色网站 | 亚洲欧美小视频 | 日韩字幕无线乱码 | 国产精品久久久精品视频 | 久久成人小视频 | 欧美久久综合性欧美 | 欧美xxxx做受欧美 | 一区二区三区四区亚洲 | 亚洲久久在线观看 | jjzz欧美 | 亚洲精品美女久久久久 | 波多野结衣久久高清免费 | 中文字幕一区二区三区精彩视频 | 日本欧美一区二区三区乱码 | 最近免费中文字幕中文高清 | 精品国产日韩一区三区 | 国产精品福利片 | 国产精品特黄毛片 | jizzjlzz大学生 | 国产精品爱久久久久久久三级 | 69精品免费视频 | 久久精品免费播放 | 欧美一区二区三区精品影视 | 国产高清不卡一区二区 | 国产日产亚洲欧美综合另类 | 国产高清在线精品一区在线 | 手机在线亚洲 | 欧美日韩国产精品综合 |