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