曹 榮,崔進舉,何麗絲,王德禹
(上海交通大學(xué)船舶海洋與建筑工程學(xué)院,上海 200240)
在船舶行業(yè)數(shù)字化設(shè)計與數(shù)字化制造的研究熱潮,船舶行業(yè)逐漸引入三維設(shè)計手段,相比傳統(tǒng)的二維平面設(shè)計,三維手段在總體布置設(shè)計過程中更加直觀[1-3],無論是早期的方案論證,還是工廠的生產(chǎn)設(shè)計,國內(nèi)外開展了大量的應(yīng)用研究和實踐[4-5]。船舶設(shè)計技術(shù)以及船舶CAD/ CAM/PLM 軟件系統(tǒng)的深入應(yīng)用,直接關(guān)系到船舶設(shè)計水平、建造水平的提高,也關(guān)系到整個造船行業(yè)競爭力的提高[6]。其中的代表如Tribon、NAPA、CATIA(Computer Aided Tri-Dimensional Interface Application)、SPD(Ship Product Design)等,已經(jīng)在船舶領(lǐng)域廣泛被應(yīng)用[7]。CATIA作為一款在航空、汽車領(lǐng)域運用非常廣泛的產(chǎn)品全生命周期平臺[8],目前船舶制造領(lǐng)域也已經(jīng)廣泛使用該軟件[9]。船舶設(shè)計院和各大船廠對CATIA 平臺的研究仍處于探索與初步運用階段。原先基于線框模型創(chuàng)建的母型船的模型如何轉(zhuǎn)化到三維全參數(shù)化模型,實現(xiàn)原先結(jié)構(gòu)知識儲備的復(fù)用,成了亟待解決的問題。由于構(gòu)成線框模型的主要元素是幾何相關(guān)的點線面,而全參數(shù)模型是由參數(shù)規(guī)格書所驅(qū)動的模型,兩類平臺數(shù)據(jù)性質(zhì)截然不同。然而無論哪個平臺在進行船體結(jié)構(gòu)建模過程中,都需要定義板及筋的厚度/規(guī)格、材質(zhì)、位置及邊界信息等屬性。CATIA 平臺為了滿足用戶個性化的功能定制需求,開放了大量二次開發(fā)接口[10],為用戶功能定制提供了良好的理論基礎(chǔ)和二次開發(fā)環(huán)境[11]。因此基于SPD的線框模型及屬性數(shù)據(jù),具備了高效構(gòu)建CATIA全參數(shù)化模型的條件。
CATIA 是法國達索公司的產(chǎn)品開發(fā)旗艦解決方案,廣泛應(yīng)用于航空航天、汽車制造、造船、機械制造等行業(yè),但在船舶行業(yè)的引用起步較晚[12]。在船舶詳細設(shè)計過程中主要用到CATIA V6 SFD(Structure Function Design)基本結(jié)構(gòu)設(shè)計模塊。SFD模塊運用的是全參數(shù)化建模方法,即在創(chuàng)建零件時,將零件的幾何信息、屬性信息,以參數(shù)的形式在交互界面中定義完善,CATIA平臺即可通過這些參數(shù)形成三維模型。另外除了交互界面定義參數(shù)的方法,還可利用CAA(Component Application Architecture)二次開發(fā)工具來讀寫參數(shù)。其中的CATISfdUseFunctionFactory 工廠類中的CreatePanel()方法可以創(chuàng)建SFD模塊中的板架;CATIStrUseStiffenerMngt類中的AddStiffener()方法可以創(chuàng)建板架上的筋;CATIStrUseOpeningMngt 類中的AddOpening()方法可以創(chuàng)建板架上的開孔。因此CAA接口可以滿足高效構(gòu)建船體結(jié)構(gòu)模型的先決條件。
SPD作為國內(nèi)自主開發(fā)的船舶設(shè)計軟件,在國內(nèi)以滬東中華為代表的船舶企業(yè)中廣泛使用,系統(tǒng)模塊涵蓋船體、管系、風(fēng)管、電氣、支架、鐵舾裝等各專業(yè)[13]。SPD系統(tǒng)是基于OpenGL 圖形庫進行開發(fā)的造船CAD設(shè)計軟件,能滿足船體結(jié)構(gòu)、管系、風(fēng)管、電氣、鐵舾件、涂裝等專業(yè)三維全數(shù)字化設(shè)計的需求。通過三維模型對船舶產(chǎn)品進行性能、結(jié)構(gòu)強度、工藝合理性和制造可行性分析[14]。SPD 平臺中的三維模型正是線框模型[15]。線框模型是用直線、圓、圓弧等空間棱線表達三維物體。SPD的模型以DXF的格式導(dǎo)出。DXF文件是CAD軟件交換數(shù)據(jù)的一種文件格式,在各大CAD平臺普遍使用。SPD模型屬性以XML的格式導(dǎo)出。XML 文件易于在任何應(yīng)用程序中讀寫數(shù)據(jù),XML是目前各程序間數(shù)據(jù)交換的公共語言[16]。本文基于滬東中華SPD 設(shè)計軟件輸出的數(shù)據(jù),利用CAA二次開發(fā)技術(shù),實現(xiàn)了高效的船體結(jié)構(gòu)三維線框模型到全參數(shù)化模型轉(zhuǎn)化。
SPD平臺幾何模型支持導(dǎo)出dxf 格式,因此需要基于dxf中的三角面片模型重構(gòu)幾何面片模型,再以面片模型為支持面,構(gòu)建Catia 平臺SFD 模型。各零件所需的屬性參數(shù)基于SPD平臺輸出的xml文件,因此需要逐個匹配每個零件的片面模型和屬性文件。不同零件的創(chuàng)建方法不同,本文利用CAA 二次開發(fā)手段,分別自動構(gòu)建了板、開孔及型鋼等模型,其主要流程如圖1 所示。
圖1 模型轉(zhuǎn)化流程圖
通過CATIA軟件自帶的導(dǎo)入功能,將線框模型數(shù)據(jù)dxf文件導(dǎo)入CATIA 平臺,可得到初步的三維線框模型。此模型由三角面片構(gòu)成,且僅僅保留了原模型的幾何屬性,正確地表達了各零件的空間位置和幾何形狀。導(dǎo)入線框模型后進行了一系列操作,首先需要處理的問題是線框模型是立體幾何零件,即零件是有厚度的,而CATIA 平臺SFG 模型是無厚度的面片模型,因此僅僅需要保留各零件理論面上的面片,去除其他面片。通過輸入零件理論面,例如肋位及各平臺位置,運用二次開發(fā)的工具,計算面片到理論面的距離,若距離小于1 mm 即可判定此面片為零件的理論面,刪除非理論面上的面片。其次運用二次開發(fā)的工具,通過合并同一平面內(nèi)且相交的三角面片,得到一整塊面片模型。最后去除面片上的開孔,提取面片的輪廓線,通過填充得到無開孔的零件面片,面片處理效果如圖2 所示。
圖2 面片處理效果
全參數(shù)化模型構(gòu)建時所需要定義的零件屬性數(shù)據(jù)是來源于xml文件。通過讀取xml 文件,獲取零件的名稱、材質(zhì)、類型,板厚或規(guī)格等信息。在CAITA平臺上運用CAA接口中的CATIDOMDocument()類庫中的成員函數(shù),可高效地讀取xml 文件中的屬性數(shù)據(jù)。圖3 是模型中一個零件的屬性xml文件。
圖中:主要關(guān)鍵字分別代表以下含義:“belong”,零件所屬板架;“Side”,零件所在整船的空間位置,M表示靠近CL的位置;“weight”,質(zhì)量,單位g;“COG”,重心位置;“material”,材質(zhì);“category”,零件類型;“thickness”,厚度;“section”,型鋼規(guī)格。
圖3 xml文件中的零件屬性
轉(zhuǎn)化參數(shù)化模型的前提是將導(dǎo)入的線寬模型和參數(shù)數(shù)據(jù)相匹配。本文的方法是通過獲取線框模型組成的零件重量重心數(shù)據(jù),與屬性文件中的重量重心屬性相匹配。
實施方法:
(1)運用CATIPartRequest 類庫的成員函數(shù)GetDirectBodies()獲得模型中所有零件模型列表。再遍歷面片列表,運用CATIMeasurableInContext 類庫的成員函數(shù)GetCOG(),獲取各模型的重心坐標數(shù)據(jù),例如X=211 685.1,Y=-6 549.9,Z=8 312.1。
(2)運用CATIDOMElement 類庫中的成員函數(shù)GetElementsByTagName()獲取ATTRIBUTE標簽,再利用函數(shù)GetNodeValue()獲得COG節(jié)點下得重心數(shù)據(jù),例如獲取VALUE=“211 685.0,-6 550.0,831 3.0”,即X=211 685.0,Y=-6 550.0,Z=8 313.0。
遍歷模型中所有零件重心數(shù)據(jù)與屬性數(shù)據(jù),進行一一比較。若X,Y,Z 3 個數(shù)據(jù)相差都小于20 mm,判斷為匹配成功,可以確定該零件模型所需要賦予的屬性。在匹配過程中會存在部分面片沒有合適的數(shù)據(jù)匹配,特別是型鋼,因為端切影響了零件面片的重心位置,但輸出的屬性數(shù)據(jù)卻未考慮其影響。所以我們在用較小的差值20 進行第1 輪匹配后,放大差值到50或100 對未匹配成功的面片進行第2 輪或第3 輪匹配。由于船舶上的絕大部分型材間的重心距離都在300 mm 以上,這樣的匹配方法可以保證一定的準確率。
在構(gòu)建船體板架模型時,主要是定義板的類型、位置、邊界、板厚、材質(zhì)等信息,CATIA 3DE 平臺也不例外。本文在轉(zhuǎn)化板的過程中,基于已導(dǎo)入的三維線框模型及匹配所得的零件屬性數(shù)據(jù),利用CAA接口生成板的參數(shù)化模型,并逐步定義類型、定位、邊界信息、板厚材質(zhì)等屬性。板模型轉(zhuǎn)化效果如圖4 所示。
圖4 板模型轉(zhuǎn)化效果
實施方法:
(1)生成板對象。首先需要在CATIA 平臺中的新建參數(shù)化的板架模型對象。運用CAA 接口在SFG模塊中創(chuàng)建一個新對象,運用CATISfdUseFunctionFactory->CreatePanel()即可新建板架對象。
(2)生成板的屬性。①零件類型信息:板架的類型一般可分為內(nèi)底板、甲板、平臺板、肋板、橫艙壁、縱艙壁等。本文中通過判斷幾何的空間位置,將面區(qū)分為X、Y、Z 3 個方向,分別對應(yīng)的零件類型為“TransversePanel”“LongitudinalPanel”“DeckPanel”。運用CAA 接口CATIStrUseCategoryMngt->SetCategory(),即可定義零件類型信息。
②支持面信息:通常構(gòu)建板是以無限大的平面為支持面,通過定義邊界條件,圍出一個有限大的面。本文的構(gòu)建技術(shù)是以導(dǎo)入的面片為支持面,在不定義邊界信息的情況下,即可得到一個等同于面片大小的板模型。運用CAA 接口CATIStrUsePanelSurf->SetSupport(),即可定義板的支持面信息。
③厚度信息:讀取xml屬性文件中的”Thickness”節(jié)點,可以快速準確的獲取厚度信息。利用CAA接口CATIStrUsePlateExtrusionMngt-> GetThickness()->ValuateReal(),即可定義板的厚度信息。
④板厚朝向信息:船體結(jié)構(gòu)板架厚度朝向有一定的設(shè)計要求,例如外板一律朝外,甲板一律朝上,但橫艙壁、縱艙壁的朝向就需要依據(jù)船型而定。本文根據(jù)本船型的理論線數(shù)據(jù)圖,將各個橫向縱向位置上的板厚朝向做了數(shù)據(jù)統(tǒng)計。例如X=FR95,F(xiàn)R100,F(xiàn)R105…或X=100 800,104 800,108 800…的橫艙壁,厚度方向朝首,其余的朝尾。所以在定義橫艙壁的時候,將其支持面的坐標數(shù)據(jù)與之做比較,即可得到該橫艙壁的板厚朝向信息。
⑤材質(zhì)信息:讀取xml 屬性文件中的”Material”節(jié)點,可以快速準確的獲取厚度信息。利用CAA接口CATIStrUseMaterialMngt->SetMaterial(),即可快捷的定義板的材質(zhì)信息。
⑥邊界信息:在零件屬性文件中并不包含板的邊界信息,因此采用通過判斷面片間的幾何關(guān)系來篩選板的邊界信息。本文的方法是遍歷所有不在同一方向上的零件,例如遍歷X 方向上的零件,再遍歷Y、Z 方向上的零件,使其兩兩相交,判斷相交結(jié)果是否是線,若得到交線,則量取交線的長度,當(dāng)交線長度大于500 mm時,即可確定此面片為板的邊界條件。運用CATIStrUsePanelLimitMngt->SetLimitingObject()接口將其定義為邊界對象。若其返回值是True,說明可作為邊界,則繼續(xù)遍歷尋找下一個邊界。
⑦替換支持面:通常板的支持面是一個平面plane,整檔位置上板的支持面是源自坐標系中的平面,而上述方法中基于導(dǎo)入線框模型所創(chuàng)建的板,它的支持面是導(dǎo)入的面片surface,我們需要將位于整檔位置上板的支持面片替換成為坐標系中的平面。具體方法是運用CAASfdNavigationServices::GetSRSPlane()方法獲取坐標系中的XYZ 平面列表。通過CATISfdUsePanel->GetCanonicSupport()獲取板的支持面,判斷平面間的距離,若距離小于1 cm,通過CATIStrUsePanelSurf->SetSupport()方法將板的支持面替換為平面。
CATIA平臺上構(gòu)建結(jié)構(gòu)開孔有3 種方式:①標準數(shù)據(jù)(Standard)開孔。選擇開孔類型,定義開孔特征及幾何位置;②草圖(Sketch)開孔。利用草圖功能畫出開孔樣式,形成開孔;③貫穿對象(3D Object)開孔。以貫穿板的對象作為輸入,生成相貫線用于開孔。
本文采用第3 種方法,貫穿對象(3D Object)開孔。生成開孔效果如圖5 所示?;谳斎霐?shù)據(jù)結(jié)合CAA開發(fā),可以實現(xiàn)自動化高效創(chuàng)建開孔。3D Object開孔需要一個前提,即獲取貫穿對象。本文的方法是從線框模型中提取開孔線,將開孔線沿垂直面片方向拉伸,可得到所需的3D Object。
圖5 開孔轉(zhuǎn)化效果圖
手工操作的方法是運用Extract功能,點選孔的邊緣,選擇Point Continuity選項,可得到一條封閉的開孔線,再運用Extrude 功能,Direction 為面片本身,Dimension=50mm,便可得到一個貫穿面片的3D Object。一個分段有幾十或上百個開孔,手工操作效率低。利用CAA二次開發(fā)相關(guān)的接口可以實現(xiàn)批量處理。
實施方法:
(1)通過接口CATIGSMUseFactory->CreateBoundary()獲取面片上所有閉合的連續(xù)曲線,利用CATIGSMUseFactory-> CreateExtractSolide()提取得到特征曲線,結(jié)果至少會有一根,因為板的輪廓線也是一條閉合的連續(xù)曲線。
(2)運用CATIMeasurableCurve->GetLength()獲得曲線的長度,去除周長最大的曲線(因為周長最大的閉合曲線是輪廓線),其余的便是開孔線。
(3)CATIGSMUseFactory->CreateExtrude()拉伸開孔線得到所需的3D Object。
(4)運用CAA 接口CATIStrUseOpeningMngt->AddOpening()命令在板架上新建開孔,再運用接口CATIStrUseOpening3DObject-> SetIntersectingElement()定義貫穿對象,即可實現(xiàn)批量開孔。
CATIA平臺構(gòu)建型鋼模型時,需要選擇對應(yīng)的安裝板架,定義其類型,支持面信息,邊界信息及規(guī)格、材質(zhì)等屬性信息。生成的型鋼其支持面與對應(yīng)的板架相交,生成筋的軌跡線(Unlimited Trace Line),定義兩個邊界信息將軌跡線框定出特定長度的軌跡線(Limited Trace Line),即型鋼的設(shè)計長度。若選擇的支持面與板架無法相交形成交線,則無法創(chuàng)建此型材。因此創(chuàng)建型材關(guān)鍵是定義支持面和定義邊界信息。本模型構(gòu)建技術(shù)基于型材屬性數(shù)據(jù),構(gòu)建繼承原型材模型的屬性。型材轉(zhuǎn)化效果如圖6 所示。
實施方法:
(1)創(chuàng)建型材。需要選擇型材所在的板架用于創(chuàng)建型材。通過接口CATIStrUseStiffenerMngt ->AddStiffener(),即可新建型材對象。
圖6 型鋼轉(zhuǎn)化效果圖
(2)定義支持面。SPD 輸出的筋的幾何面,由于原模型定義了端切,面片幾何含有開孔或者是留空削斜的幾何特征。若直接利用面片與板架相交,所得的交線會比實際設(shè)計型鋼模型短,導(dǎo)致模型錯誤。因此本文采用的方法將原幾何面以重心為基點放大1.2~1.4 倍,以放大的面片與板架的交線為型鋼支持面,通過接口CATIStrUseProfileSurfSurf->SetSecondSurface(),將其設(shè)置為型材支持面。
(3)定義邊界。通過交互式操作定義型材的邊界是輕而易舉的。若運用CAA 高效的為筋定義邊界需要程序篩選出其邊界對象。本文將型材的邊界對象分為兩類。一類是自身所在板架上的筋,另一類是其他板架。分別遍歷這個兩類對象,通過幾何關(guān)系比較計算,篩選出合適的邊界對象,利用接口CATIStrUseProfileLimitMngt->SetLimitingObject()將其定義為型材邊界對象。
本文基于SPD設(shè)計平臺中的輸出的dxf模型文件及xml屬性數(shù)據(jù),運用CATIA CAA 二次開發(fā)工具,高效處理三角面片等到面片模型,讀取xml屬性文件,將面片模型與屬性文件相匹配,利用軟件工具自動轉(zhuǎn)化生成板架、型材及開孔,最終生成了CATIA 3DE 平臺中的全參數(shù)化模型。以橫艙壁分段為例,驗證上述模型構(gòu)建技術(shù)與二次開發(fā)工具的有效性。運用此技術(shù)方法,實現(xiàn)原有線框模型數(shù)據(jù)到CATIA 平臺的轉(zhuǎn)移,新模型繼承了原模型屬性及幾何信息,節(jié)省了大量的重新建模工作,也規(guī)避了二次建模造成的數(shù)據(jù)差錯。