王秋嬌 謝志祥
(1.西南交通大學(xué)希望學(xué)院基礎(chǔ)部 成都 610400)(2.航空工業(yè)航宇救生裝備有限公司 襄陽(yáng) 441000)
CATIA是法國(guó)達(dá)索公司研發(fā)的一款高端CAD設(shè)計(jì)軟件,在汽車(chē)、航空、船舶、水利水電等領(lǐng)域有非常廣泛的應(yīng)用[1~4],是全球應(yīng)用最廣泛的軟件之一。作為一款通用性的軟件,CATIA原生命令選項(xiàng)較多,設(shè)計(jì)靈活,能滿足不同領(lǐng)域的不同應(yīng)用場(chǎng)景。但是,當(dāng)在某些場(chǎng)景下,需要快速設(shè)計(jì)的時(shí)候,繁多的選項(xiàng)反而限制了設(shè)計(jì)速度。為此,CATIA提供了模塊化的圖形接口工具CAA(Component Ap?plication Architecture),其包含了眾多的基于C++程序語(yǔ)言的API,供客戶定制化使用。文獻(xiàn)[5~10]等分別在不同的領(lǐng)域研究應(yīng)用了CATIA二次開(kāi)發(fā),以提高設(shè)計(jì)效率。文獻(xiàn)[11~13]研究應(yīng)用了CATIA V6平臺(tái)下的API。
多截面(Lofting)曲面也稱(chēng)放樣曲面,是指根據(jù)多個(gè)不同的截面輪廓以及引導(dǎo)線做出的適應(yīng)性的曲面,相鄰截面間平滑過(guò)渡,在汽車(chē)、飛機(jī)、工藝品等造型設(shè)計(jì)中有很廣泛的應(yīng)用。每個(gè)截面(Sec?tion)控制最終模型的橫截面,閉合點(diǎn)(Closing Point)控制縱輪廓線,脊線(Spine)對(duì)整體形狀進(jìn)行引導(dǎo)優(yōu)化。如圖1(a)所示,當(dāng)選擇矩形截面1、圓形截面2以及正六邊形截面3來(lái)創(chuàng)建多截面時(shí),CATIA自動(dòng)在每個(gè)截面輪廓上預(yù)生成閉合點(diǎn),這些閉合點(diǎn)一般為曲線的極值點(diǎn)。
由圖可見(jiàn),使用CATIA現(xiàn)有的算法,每個(gè)截面默認(rèn)生成的閉合點(diǎn)并不處在截面的相同方位,截面1和截面2的閉合點(diǎn)處在偏右側(cè)方位,而截面3的閉合點(diǎn)處在偏左的方位。若執(zhí)行確定命令,則生成失敗,CATIA生成的預(yù)覽圖形如圖1(b)所示。圖1(c)為手動(dòng)調(diào)整了截面3的閉合點(diǎn)位置后的預(yù)覽圖,由圖可知,若不設(shè)置脊線,CATIA會(huì)生成一條默認(rèn)的脊線來(lái)引導(dǎo)整體走向。
文獻(xiàn)[14~17]研究了與曲面相關(guān)的API,并依據(jù)各自所處的場(chǎng)景特點(diǎn)開(kāi)發(fā)出快速建模工具,但尚未有學(xué)者在多截面曲面的API使用和優(yōu)化方面公開(kāi)研究成果。
CATIA多截面曲面對(duì)應(yīng)的API為
可以對(duì)多截面曲面模型進(jìn)行復(fù)雜的處理,如設(shè)置截面順序、設(shè)置或替換閉合點(diǎn)、設(shè)置引導(dǎo)線等。
雖然CATIA API提供了對(duì)截面設(shè)置閉合點(diǎn)的方法,并且可以通過(guò)相關(guān)接口很方便地設(shè)置點(diǎn)在曲線上的位置,但很難保證不同截面閉合點(diǎn)的對(duì)應(yīng)位置關(guān)系。比如,對(duì)于圖1所示的場(chǎng)景,為了與閉合點(diǎn)1和閉合點(diǎn)2的位置對(duì)應(yīng),以保證造型的平滑,一般要求閉合點(diǎn)3在圖1(c)所示的位置附近,而不在圖1(a)、1(b)所示的位置或其他位置,但現(xiàn)有API無(wú)法保證這一點(diǎn)。
為解決該問(wèn)題,本文借助CATIA現(xiàn)有API設(shè)計(jì)了一種對(duì)多截面曲面進(jìn)行平滑的算法,并以插件的形式驗(yàn)證了該算法的可行性和高效性。事實(shí)上,該算法既適用于多截面的曲面特征,也適用于實(shí)體特征,這里以曲面為例。
為更準(zhǔn)確地?cái)⑹龊诵乃惴ǎ谑褂迷撍惴ㄖ?,本文給出以下約定:
1)截面已經(jīng)通過(guò)API或手動(dòng)創(chuàng)建出來(lái),并且是閉合曲線;
圖1 多截面曲面的創(chuàng)建過(guò)程
2)多截面以一條非閉合曲線作為脊線,該曲線通過(guò)所有截面曲線的內(nèi)部,并且不與任何截面所在的平面平行;
3)算法所述API均基于CATIA V6平臺(tái)。
本文算法核心為任意取一個(gè)輸入截面,在其曲線上任意位置作一個(gè)點(diǎn),作為該截面的閉合點(diǎn)。然后從該閉合點(diǎn)出發(fā),以投影的方式,創(chuàng)建該點(diǎn)在其他輸入截面上對(duì)應(yīng)位置的投影點(diǎn)。以下為具體步驟,為便于闡述算法步驟,具體步驟中對(duì)某些一般量作了特殊化處理,如以第一個(gè)截面的極值點(diǎn)作為投影原始點(diǎn)等。
首先,通過(guò)CATIA相關(guān)API獲取模型結(jié)構(gòu)樹(shù)中已經(jīng)定義好的截面曲線,通過(guò)函數(shù):
創(chuàng)建一個(gè)多截面特征對(duì)象,可以通過(guò)函數(shù):
來(lái)設(shè)置脊線。
然后,使用函數(shù)
在截面1(本文按順序?qū)Φ趎個(gè)截面稱(chēng)為“截面n”,n=1,2,3,…)上創(chuàng)建極值點(diǎn)A,作為截面1的閉合點(diǎn)。此時(shí),如果直接創(chuàng)建點(diǎn)A在其他截面上的投影點(diǎn),可能無(wú)法獲取理想的投影點(diǎn),如圖2所示,點(diǎn)A在截面Sb中的理想投影點(diǎn)為點(diǎn)B0,但由于點(diǎn)B1距離點(diǎn)A更近,所以,若直接創(chuàng)建點(diǎn)A在截面Sb中的投影點(diǎn),則投影的結(jié)果為點(diǎn)B1。
為此,對(duì)于任意相鄰兩個(gè)截面Sa與Sb,在其之間的脊線上等距創(chuàng)建n個(gè)過(guò)渡點(diǎn),即將截面Sa與截面Sb之間的曲線等分為n+1份,過(guò)每個(gè)點(diǎn)分別創(chuàng)建脊線的垂直平面,在每個(gè)垂直平面上創(chuàng)建大小合適的過(guò)渡圓C1,C2,C3,…Cn。使用函數(shù):
創(chuàng)建截面Sa的極值點(diǎn)A在圓C1上的投影點(diǎn)P1,創(chuàng)建P1在圓C2上的投影點(diǎn)P2,以此類(lèi)推,創(chuàng)建點(diǎn)Pn-1在圓Cn上的投影點(diǎn)Pn,然后創(chuàng)建點(diǎn)Pn在截面b上的投影點(diǎn)B,作為截面b的閉合點(diǎn)。
如圖2所示,依據(jù)上述步驟,可根據(jù)點(diǎn)A依次創(chuàng)建投影點(diǎn)P1,P2,P3以及投影點(diǎn)B。當(dāng)截面均為規(guī)則曲線時(shí),點(diǎn)B與理想投影點(diǎn)B0重合;否則與點(diǎn)B0接近,過(guò)渡點(diǎn)的數(shù)量越多,最終取得的投影點(diǎn)與理想閉合點(diǎn)B1越接近。但隨著過(guò)渡點(diǎn)數(shù)量的增多,程序所用的時(shí)間也越長(zhǎng),因此,過(guò)渡點(diǎn)的數(shù)量需要在精度和效率上作出一定的考量。
圖2 創(chuàng)建投影閉合點(diǎn)過(guò)程
最后,使用函數(shù):
對(duì)步驟1中創(chuàng)建的多截面特征設(shè)置閉合點(diǎn)為點(diǎn)A,B,C,…。
抽象的算法流程圖如圖3所示,其中圖3(a)為總流程圖,圖3(b)為創(chuàng)建截面投影點(diǎn)的流程圖。
圖3 算法流程
以CATIA V6插件的形式實(shí)現(xiàn)了該算法,交互界面如圖4所示。
對(duì)于圖1(a)所示的場(chǎng)景,使用CATIA原生API無(wú)法一次性創(chuàng)建成功,需要手動(dòng)修改閉合點(diǎn)參數(shù)或創(chuàng)建新的閉合點(diǎn)。并且通過(guò)觀測(cè)并多次嘗試修改參數(shù)來(lái)確定每個(gè)閉合點(diǎn)的位置,不僅操作繁瑣,影響設(shè)計(jì)效率,而且所設(shè)置的閉合點(diǎn)的位置參數(shù)隨機(jī)性大,設(shè)計(jì)質(zhì)量也很難達(dá)到最佳。
圖4 插件交互界面
如圖5所示,使用本文所述的優(yōu)化算法,當(dāng)過(guò)渡圓的數(shù)量為1時(shí),依然生成失敗,閉合點(diǎn)的位置參數(shù)沒(méi)有被正確地傳遞。當(dāng)過(guò)渡圓的數(shù)量為4時(shí),閉合點(diǎn)位置的方位通過(guò)過(guò)渡圓被傳遞到截面3,使得曲面創(chuàng)建成功,但具體的位置參數(shù)卻沒(méi)有被精確地傳遞,所以創(chuàng)建的結(jié)果依然有較大的扭曲變形。當(dāng)過(guò)渡圓的數(shù)量為9時(shí),閉合點(diǎn)位置的方位和具體參數(shù)均被較好地傳遞到截面3,創(chuàng)建結(jié)果較為理想。
圖5 不同過(guò)渡圓數(shù)量n的創(chuàng)建結(jié)果
分析了CATIA多截面曲面算法在自動(dòng)生成閉合點(diǎn)方面的算法缺陷問(wèn)題,在現(xiàn)有API的基礎(chǔ)上,提出一種通過(guò)過(guò)渡截面?zhèn)鬟f閉合點(diǎn)參數(shù)的算法,以達(dá)到光順最終模型的效果。以CATIA V6插件的形式實(shí)現(xiàn)了該算法,設(shè)計(jì)師可以控制過(guò)渡閉合點(diǎn)的迭代次數(shù),在效率與精度之間靈活處理。經(jīng)實(shí)驗(yàn)驗(yàn)證,該算法可快速準(zhǔn)確地根據(jù)輸入元素創(chuàng)建比較光順的曲面模型,既可以以插件形式單獨(dú)使用,也可以作為系統(tǒng)性二次開(kāi)發(fā)設(shè)計(jì)中的一部分,可大大提高設(shè)計(jì)和開(kāi)發(fā)效率。