李文博,寸文淵,黃光強
LI Wen-bo,CUN Wen-yuan,HUANG Guang-qiang
(航空工業(yè)成都飛機工業(yè)(集團)有限責任公司,成都 610073)
三維數(shù)模輕量化技術(shù)是指在保證原始數(shù)模文件基本信息和必要精度的基礎(chǔ)上,將文件大小壓縮至1/10甚至更小的簡化格式過程[1]。輕量化數(shù)模技術(shù)促進了上下游技術(shù)人員之間的信息交流,使企業(yè)各環(huán)節(jié)之間的溝通更高效便捷。
我國航空領(lǐng)域廣泛采用CATIA作為飛機設(shè)計制造工具,由于飛機系統(tǒng)的復(fù)雜性,使用CATIA直接打開單個大組件(部件)三維數(shù)模往往需要較長時間,整機甚至根本無法打開,嚴重影響了工作效率的提高。針對該問題,CATIA提供了高速緩存功能,但首次打開數(shù)模仍然很慢,且不利于數(shù)模傳遞效率的提升。技術(shù)人員往往通過另存為cgr格式來對數(shù)模進行輕量化處理,但該方法會把組件轉(zhuǎn)化為一個整體,結(jié)構(gòu)樹變?yōu)闊o法展開的單個節(jié)點,不利于組件中零件關(guān)系的查看。
本文將采用CATIA二次開發(fā)對組件數(shù)模中的零件進行批量輕量化處理,即把每一個零件另存替換為cgr格式,并重新添加零件的部分屬性信息,該方法可有效降低組件的大小,且能保留組件結(jié)構(gòu)樹的層次關(guān)系。
CATIA是法國達索公司推出的高檔CAD/CAE/CAM一體化軟件,廣泛應(yīng)用于航空、航天、汽車、以及電子工業(yè)等領(lǐng)域。CATIA為用戶提供了多種二次開發(fā)的接口,其中包括自動化對象編程(V5 Automation)和開放的基于構(gòu)件的應(yīng)用編程接口(CAA,Component Application Architecture)[2]。
相比于CAA,Automation具有如下優(yōu)點[3]:完全免費;開發(fā)難度較低,且可充分利用高級編程語言IDE的自動提示功能;可以利用高級編程語言制作出功能豐富的人機界面;開發(fā)出的軟件基本不受CATIA版本的限制。
本文將采用Automation二次開發(fā)技術(shù),在CATIA V5環(huán)境下以VB為編程工具對組件進行輕量化處理。
設(shè)計的軟件界面如圖1所示,其中“選擇模式”可分為“單個Product”和“文件夾”,前者將對單個組件進行輕量化處理,而后者可對所指定的文件夾下的所有組件進行批處理。
圖1 組件輕量化界面
針對選擇模式為“單個Product”的情況,輕量化流程主要可分6步,如圖2所示。為方便表達,下文將待輕量化組件簡稱為組件,其下包含的裝配件簡稱為裝配件。
圖2 輕量化流程
1)在初始化階段,首先在CATIA V5中打開組件,并獲取該組件文檔對象oProductDoc和相應(yīng)Product節(jié)點對象oProduct,若CATIA設(shè)置啟用了高速緩存,則需用命令oProduct.ApplyWorkMode.DESIGN_MODE把組件數(shù)模的顯式模式從可視化模式轉(zhuǎn)換為設(shè)計模式;然后(在組件所在的文件夾下或指定的結(jié)果保存路徑下)新建一個與組件同名的文件夾(變量名為path_NewFolder),并用SaveAs命令將oProductDoc另存到該文件夾下;最后在path_NewFolder下再新建一個文件夾(變量名為path_NewFolder_cgr,文件名為在組件名的基礎(chǔ)上添加_cgr),用于存放組件內(nèi)部輕量化后的零件和裝配件。
2)在函數(shù)Get_Count_Product()中,通過遞歸遍歷獲取整個組件中Product節(jié)點(包括裝配件節(jié)點和零件節(jié)點)的個數(shù),并判斷其中是否存在裝配件節(jié)點,若存在,則依次執(zhí)行第3)、4)、5)步,否則,只執(zhí)行第4)步完成組件輕量化。
3)在函數(shù)Traversal_Product_THu()中,通過遞歸遍歷將組件中所有裝配件(對象名為Product1)改變名稱(在原名稱后添加_THu)后復(fù)制到文件夾path_NewFolder_cgr下,并用該新文件替換組件中對應(yīng)的裝配件,以實現(xiàn)裝配件鏈接對象的轉(zhuǎn)變。關(guān)鍵實現(xiàn)代碼如下:
其中,origin_path_Product1為裝配件原來的路徑,new_path_Product1為裝配件改變名稱后的路徑。
需要注意,組件中的裝配件節(jié)點可能不存在對應(yīng)的裝配件文檔,即在內(nèi)存中不存在對應(yīng)的.CATProduct文件,所以上述轉(zhuǎn)變過程需要跳過此種類型的節(jié)點。
4)在函數(shù)Traversal_Part()中,通過遞歸遍歷將組件中的所有零件(對象名為Product1)導(dǎo)出為cgr格式,并另存到文件夾path_NewFolder_cgr下,然后用生成的cgr文件替換組件中相應(yīng)的零件,以實現(xiàn)零件鏈接對象的轉(zhuǎn)變。關(guān)鍵實現(xiàn)代碼如下:
其中,term_Product1為組件中待輕量化零件的術(shù)語,name_Part為零件的文件名(包含后綴.CATPart),path_cgr為輕量化后零件(cgr文件)的保存路徑。
5)在函數(shù)Traversal_Product()中,通過遞歸遍歷將組件中所有裝配件(對象名為Product1)改變名稱(去除_Thu,恢復(fù)為原名稱)后復(fù)制到文件夾path_NewFolder_cgr下,并用該新文件替換組件中對應(yīng)的裝配件,以實現(xiàn)裝配件鏈接對象的轉(zhuǎn)變。關(guān)鍵實現(xiàn)代碼如下:
其中,new_path_Product1為文件名添加了_THu的裝配件的路徑,new_path_Product2為文件名去除了_THu的裝配件的路徑。
表1 組件輕量化測試結(jié)果
在第5)步完成之后,把文件夾path_NewFolder_cgr下所有包含_THu的裝配件刪除,即完成了組件的輕量化處理。
需要注意,若組件中有零件丟失,在第5)步轉(zhuǎn)變過程中將會彈出對話框提示已有相同名稱的文件存在于內(nèi)存中,所以需要在第4)步預(yù)先判斷組件中是否存在零件丟失,若存在,則省略第5)步。另外,第5)步不可以和第4)步交換順序,因為組件中零件若與其他零件定義了上下文鏈接關(guān)系,則在第3)步之后直接運行第5)步會彈出對話框提示已有相同名稱的文件存在于內(nèi)存中。
針對選擇模式為“文件夾”的情況,首先提取出指定文件夾下的所有組件名稱,再依次按照上述輕量化流程進行處理,不過每個組件輕量化之前都需要判斷該組件是否存在于已輕量化組件之內(nèi),即判斷該組件是否存在于文件夾path_NewFolder及其子文件夾下,若存在,則跳過該組件。
選擇某飛機前機身的6個組件進行測試,結(jié)果如表1所示,可見,組件輕量化后的大小均在原大小的10%以內(nèi)。
通過測試,驗證了所開發(fā)軟件的正確性與高效性。不過使用該軟件進行輕量化處理需要滿足一個條件,即CATIA在設(shè)計模式下能夠打開待輕量化組件,所以,針對超大型組件,可分成多個中小型組件分別進行輕量化,然后進行組裝。
本文采用Automation二次開發(fā)技術(shù),在CATIA V5環(huán)境下以VB為編程工具開發(fā)出了一款組件輕量化軟件工具,高效實現(xiàn)了大型組件中零件的批量輕量化處理,同時可對指定文件夾下的多個組件進行批處理,可有效提高技術(shù)人員的工作效率。