基于AutoCAD ARX的船閘閘首三維設計
針對國內船閘三維設計可視化效果不足的問題,嘗試對船閘閘首三維設計技術進行可視化結構設計的研究。采用C++的面向對象特性與AutoCAD提供的ObjectARX開發(fā)工具相結合,研究閘首三維模型算法、閘首穩(wěn)定性驗算程序算法,實現(xiàn)結構穩(wěn)定性計算結果輸出,開發(fā)閘首三維模型設計系統(tǒng)。通過工程實例進行驗證分析,成果直觀,能夠很好地輔助閘首結構設計,是對水工建筑物三維可視化設計技術的一種有益探討。
當前我國水運經(jīng)濟快速發(fā)展,但是內河航道開發(fā)里程偏少,而且等級偏低,這與經(jīng)濟的發(fā)展趨勢極不相稱,嚴重制約內河運輸?shù)陌l(fā)展。為解決內河水運的發(fā)展瓶頸,國家將大力發(fā)展內河航道建設,勢必要改擴建一批舊船閘和興建一批新船閘。
已有的船閘設計系統(tǒng)的結構模型較多采用二維幾何模型,模型表達信息詳細,但是設計過程抽象不直觀,給閘首這種帶有復雜廊道的結構設計表達、修改和后續(xù)計算帶來許多困難,系統(tǒng)的通用性和普遍性較差。而三維CAD技術的發(fā)展和應用為設計結構的表達、修改和后續(xù)計算提供了很多方便,但是現(xiàn)有的船閘設計三維模型多是出自商用有限元軟件,只考慮與力學相關的結構,為簡化模型,對細部結構的表達能力不足,同時因模型信息不全,造成模型數(shù)據(jù)可被其他軟件重復利用性差,常常導致相同數(shù)據(jù)的多次重建。
本文探討在船閘閘首設計中使用三維技術。由于閘首的類型多,以人字門船閘閘首研究為例,介紹通過AutoCAD 二次開發(fā)程序建立閘首三維模型的方法,程序建立的模型形象、修改容易、可表達的細節(jié)程度高、模型數(shù)據(jù)易于被用作其它用途。本文的算例利用模型數(shù)據(jù)進行閘首穩(wěn)定計算,以提高閘首設計的形象性和效率。
1、AutoCAD二次開發(fā)技術應用
1.1、AutoCAD二次開發(fā)工具選擇
AutoCAD 提供了4種常用的API開發(fā)工具,Visual Lisp、VBA(VB)、ObjectARX和.NET,開發(fā)工具的特點如下:LISP技術產生較早,但是其語法不常見不直觀,特別是對于復雜對象,其開發(fā)功能不強;VB(A)采用ActiveX接口,具有開發(fā)簡單直觀的特點,但是開發(fā)功能很有限,數(shù)據(jù)圖形創(chuàng)建速度慢;ObjectARX采用面向對象方法開發(fā),直接調用AutoCAD底層函數(shù),其開發(fā)靈活,程序運行速度快;.NET通過封裝ObjectARX函數(shù)實現(xiàn),開發(fā)方式使用較晚,未完全封裝ObjectARX函數(shù),開發(fā)能力具有不確定性。
由于閘首三維結構復雜,結構對象的關聯(lián)因素較多,再加上三維模型數(shù)據(jù)量大,對程序運行速度要求高,因此采用ObjectARX作為閘首三維設計程序的開發(fā)工具。
1.2、ObjectARX程序三維模型創(chuàng)建
通過使用AcDb3dSolid類,創(chuàng)建三維模型主要有3種方法:
1)直接通過提供三維實體所需的參數(shù)創(chuàng)建,主要是生成基本的三維實體。此類函數(shù)創(chuàng)建的實體的形心為坐標原點,這類實體是指長方體、平截頭體、球體和楔形體等。
2)通過基本的二維對象生成三維實體。主要的方法是對二維對象的拉伸、掃掠、旋轉和通過一系列二維對象放樣。二維對象在此主要指面域。
3)通過對已有實體的變換、剖切和布爾運算等操作實現(xiàn)新實體的創(chuàng)建。
1.3、三維模型數(shù)據(jù)共享與模型信息提取
模型創(chuàng)建的參數(shù)保存于文件數(shù)據(jù)庫中,可被除建模之外的用途共享,建立的模型的信息可通過程序提取,也保存于數(shù)據(jù)庫可供多用途共享。利用模型數(shù)據(jù)進行閘首穩(wěn)定計算時,程序中提取可供共享的三維模型信息主要有實體的質量、質心、斷面的慣性距等。實體的質量、質心等參數(shù)通過使用實體對象的特性查詢函數(shù)getMassProp( )實現(xiàn)。
實體的斷面慣性距信息,通過剖切體實體獲得剖切斷面,通過使用剖切斷面特性信息查詢函數(shù)getMassProp()實現(xiàn)。斷面的創(chuàng)建與獲取主要用到以下3個函數(shù):
1)實體切割函數(shù):輸入?yún)?shù)為切割平面,輸出參數(shù)為切割獲得的兩個新實體。getSlice(const AcGePlane& plane, boolAdesk::Boolean getNegHalfToo, AcDb3dSolid*&negHalfSolid);
2)獲取實體斷面函數(shù):輸入?yún)?shù)為切割平面,輸出平面切割實體形成的斷面。getSection(const AcGePlane& plane,AcDbRegion*& sectionRegion);
3)平面創(chuàng)建函數(shù):在實體切割和取實體斷面時常用,此函數(shù)提供參數(shù)為面上點、X和Y向量。AcGePlane(const AcGePoint3d& or, constAcGeVector3d& uAxis, const AcGeVector3d& vAxis);
4、結語
本文使用AutoCAD軟件的ObjectARX開發(fā)工具,采用面向對象方法開發(fā)了相應的閘首三維可視化結構設計程序。本系統(tǒng)使用簡單,可進行批量優(yōu)化設計,可使用同一個數(shù)據(jù)模型自動完成多種設計任務,設計過程及其成果直觀形象,設計修改容易,可大大降低設計工作量,提高設計效率,有較高的實用價值。
本文開發(fā)的閘首三維設計程序的后續(xù)工作將進一步完善和細化閘首三維模型的構建,并把三維模型信息共享用于閘首結構二維施工圖出圖、閘首四維施工模擬和閘首結構有限元分析等功能。