亚洲天堂高清一二三,久久久久久久久久性生活,精品国产污污免费网站AⅤ,色橹橹欧美在线观看视频高清

切片軟件Cura及CuraEngine原理分析3-劃分組件 

2017-03-17 18:14
                                        步驟三:劃分組件

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

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

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


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

        內(nèi)外墻標(biāo)記完之后就是填充和上下表面的標(biāo)記了。填充有一個(gè)填充率,0%填充率就是無(wú)填充,100%就是打成一個(gè)密實(shí)的平面,上下表面就是填充率為100%的填充。中間的填充率自然介于兩者之間,就像一張漁網(wǎng),填充率越高網(wǎng)眼越細(xì)。
        軟件會(huì)先把內(nèi)墻以?xún)?nèi)部分統(tǒng)統(tǒng)標(biāo)記成填充,之后再進(jìn)一步判斷其中有哪些部分要轉(zhuǎn)換成為上下表面。是哪些部分呢?在Cura的基本設(shè)置里有一個(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在處理過(guò)程中大量用到了2D圖形運(yùn)算操作。有關(guān)2D圖形的運(yùn)算,有很多人研究,也被做成許多成熟的庫(kù)以供調(diào)用。CuraEngine的作者拿來(lái)主義,選取了一個(gè)他認(rèn)為比較好用的庫(kù),叫ClipperLib的庫(kù)直接內(nèi)嵌到軟件之中。ClipperLib所使用的2D圖形算法也很著名,叫Vatti's Clipping Algorithm,很復(fù)雜,我也沒(méi)有完全搞懂,有興趣的讀者要是搞懂了可以多多交流。


        ClipperLib的網(wǎng)址是:http://www.angusj.com/delphi/clipper.php
        這里我先簡(jiǎn)單介紹一下CuraEngine所用到的幾種2D圖形的運(yùn)算,都是由ClipperLib實(shí)現(xiàn)的:交、并、減、偏移。它們與集合操作類(lèi)似,先看圖:


2.png

圖形相交

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

圖形相并

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

圖形相減

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

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

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

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

       一元圖形操作,最終結(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ù)(可以不一樣)。多簡(jiǎn)單,數(shù)學(xué)就是這么任性!
       同樣的,組件里面內(nèi)外墻,填充怎么劃分,只用一個(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)單介紹一下CuraEngine所用的支撐算法。
       CuraEngine首先把整個(gè)打印空間在XY平臺(tái)上劃分成為200um*200um的網(wǎng)格。每個(gè)網(wǎng)格的中心點(diǎn)再延Z軸向上作一條直線,這條直線可能會(huì)與組成3D模型的三角形相交。三角形與直線的交點(diǎn)以及這個(gè)三角形的傾斜度會(huì)被記錄到網(wǎng)格里面。

3.png
       現(xiàn)在每個(gè)網(wǎng)格里記錄下了一串被稱(chēng)為支撐點(diǎn)的列表,每個(gè)支撐點(diǎn)包含一個(gè)高度和一個(gè)傾斜度信息。接下來(lái)會(huì)對(duì)每個(gè)網(wǎng)格的支撐點(diǎn)列表按照高度從低到高排序。根據(jù)這些信息就可以判斷模型上任意一個(gè)點(diǎn)是否需要支撐了,怎么判斷,我們看圖說(shuō)話:
       讓我們從底面開(kāi)始延著一根網(wǎng)格中心線往上走。起始我們是在模型外部的,當(dāng)遇到第一個(gè)支撐點(diǎn)的時(shí)候,就從模型外部進(jìn)入到了模型內(nèi)部。我們稱(chēng)這個(gè)支撐點(diǎn)為進(jìn)點(diǎn)。
       繼續(xù)向上,遇到了第二個(gè)支撐點(diǎn),又從模型內(nèi)部又退到了模型外部。我們稱(chēng)這個(gè)支撐點(diǎn)為出點(diǎn)。
       接著向上,我們可以發(fā)現(xiàn),進(jìn)點(diǎn)與出點(diǎn)總是交替出現(xiàn)的。
       利用這個(gè)規(guī)律,對(duì)于模型上任何一個(gè)點(diǎn),我們只要找到這個(gè)點(diǎn)所對(duì)應(yīng)的網(wǎng)格,再找到這個(gè)網(wǎng)格里在這個(gè)點(diǎn)以上最近的一個(gè)支撐點(diǎn),我們就可以得到兩個(gè)信息:這個(gè)點(diǎn)之上是否有模型懸空;這個(gè)點(diǎn)上面的懸空點(diǎn)的面的傾斜度是多少。
       Cura界面的專(zhuān)家設(shè)置里面有支撐角度的設(shè)置,如果一個(gè)點(diǎn)處于模型懸空部分以下,并且懸空點(diǎn)傾斜度大于支撐角度,那這個(gè)點(diǎn)就是需要支撐的。所一個(gè)平臺(tái)上所有的需要支撐的點(diǎn)連接起來(lái)圍成的2D圖形就是支撐區(qū)域。

4.png
       CuraEngine所使用的支撐算法比較粗糙,但勝在速度很快。先不說(shuō)網(wǎng)格化后失去了精度,通過(guò)傾斜角度來(lái)判斷,模型下方一旦傾斜角發(fā)生了突變,像左圖這種從負(fù)45度一下突變成正45度,傾斜角判斷無(wú)能為力,除非把它改大到60度,這樣的話,整個(gè)模型都會(huì)被過(guò)度支撐。這樣矯枉過(guò)正,既不科學(xué),也浪費(fèi)材料和打印時(shí)間,還會(huì)對(duì)模型表面質(zhì)量帶來(lái)不好的影響。

       科學(xué)的支撐算法應(yīng)該是找到模型局部最低點(diǎn)進(jìn)行支撐,最低點(diǎn)以上不一定需要支撐。因?yàn)镕DM材料本身的粘性,使得材料的走線可以有一部分懸空而不坍塌,這個(gè)效果被稱(chēng)為Overhang,只要上層材料的懸空距離小于一定的值,它就不需要支撐,這個(gè)距離以我的經(jīng)驗(yàn)應(yīng)該在1/4到1/2線寬之間。我在Pango中就基于這個(gè)思路重新實(shí)現(xiàn)了支撐的算法,結(jié)果雖然速度不如Cura的支撐算法那么快,但效果非常好,該撐的地方撐,不該撐的地方也不會(huì)多此一舉。

5.png
        Pango的支撐算法我會(huì)在以后專(zhuān)文介紹。順帶一說(shuō),CuraEngine在下半年做了很大的改動(dòng),其中之一就是拋棄了之前的支撐算法,而新的算法也和我上面所講的思想異曲同工。我要聲明的是Pango的支撐算法和CuraEngine誰(shuí)也沒(méi)有抄誰(shuí),我的算法是自己拍腦袋想出來(lái)的。算是英雄所見(jiàn)略同吧。
        支撐范圍確定之后,也和組件一樣,可以有外墻、內(nèi)墻、填充、上下表面。依樣畫(huà)葫蘆即可。CuraEngine對(duì)于支撐,只會(huì)生成外墻和填充,Pango則會(huì)生成更多。
        組件和支撐就是CuraEngine在這一步所生成的結(jié)果,這一步可以說(shuō)是整個(gè)切片過(guò)程的核心。
                                
聲明:3D打印資源庫(kù)(3dzyk)內(nèi)網(wǎng)友所發(fā)表的所有內(nèi)容及言論僅代表其本人,并不代表3D打印資源庫(kù)(3dzyk)觀點(diǎn)和立場(chǎng);如對(duì)文章有異議或投訴,請(qǐng)联系kefu@3dzyk.cn。
標(biāo)簽:
切片軟件Cura及CuraEngine原理分析3-劃分組件 
快速回復(fù) 返回頂部 返回列表
文登市| 遵义县| 伊川县| 水富县| 会昌县| 怀安县| 绿春县| 南投市| 卢氏县| 庆元县| 芮城县| 阳城县| 黄冈市| 兴义市| 海丰县| 石城县| 宁蒗| 郓城县| 白玉县| 扎鲁特旗| 论坛| 乐昌市| 石台县| 邵阳市| 富民县| 宣汉县| 乐业县| 宁陵县| 福安市| 临潭县| 阿尔山市| 日照市| 巴塘县| 晋州市| 安宁市| 甘泉县| 兴国县| 信阳市| 涿州市| 枣阳市| 宜州市|