基于AutoCAD ARX的船閘閘首三維設(shè)計(jì)

2014-11-29 雷 飛 河海大學(xué)

  針對(duì)國內(nèi)船閘三維設(shè)計(jì)可視化效果不足的問題,嘗試對(duì)船閘閘首三維設(shè)計(jì)技術(shù)進(jìn)行可視化結(jié)構(gòu)設(shè)計(jì)的研究。采用C++的面向?qū)ο筇匦耘cAutoCAD提供的ObjectARX開發(fā)工具相結(jié)合,研究閘首三維模型算法、閘首穩(wěn)定性驗(yàn)算程序算法,實(shí)現(xiàn)結(jié)構(gòu)穩(wěn)定性計(jì)算結(jié)果輸出,開發(fā)閘首三維模型設(shè)計(jì)系統(tǒng)。通過工程實(shí)例進(jìn)行驗(yàn)證分析,成果直觀,能夠很好地輔助閘首結(jié)構(gòu)設(shè)計(jì),是對(duì)水工建筑物三維可視化設(shè)計(jì)技術(shù)的一種有益探討。

  當(dāng)前我國水運(yùn)經(jīng)濟(jì)快速發(fā)展,但是內(nèi)河航道開發(fā)里程偏少,而且等級(jí)偏低,這與經(jīng)濟(jì)的發(fā)展趨勢(shì)極不相稱,嚴(yán)重制約內(nèi)河運(yùn)輸?shù)陌l(fā)展。為解決內(nèi)河水運(yùn)的發(fā)展瓶頸,國家將大力發(fā)展內(nèi)河航道建設(shè),勢(shì)必要改擴(kuò)建一批舊船閘和興建一批新船閘。

  已有的船閘設(shè)計(jì)系統(tǒng)的結(jié)構(gòu)模型較多采用二維幾何模型,模型表達(dá)信息詳細(xì),但是設(shè)計(jì)過程抽象不直觀,給閘首這種帶有復(fù)雜廊道的結(jié)構(gòu)設(shè)計(jì)表達(dá)、修改和后續(xù)計(jì)算帶來許多困難,系統(tǒng)的通用性和普遍性較差。而三維CAD技術(shù)的發(fā)展和應(yīng)用為設(shè)計(jì)結(jié)構(gòu)的表達(dá)、修改和后續(xù)計(jì)算提供了很多方便,但是現(xiàn)有的船閘設(shè)計(jì)三維模型多是出自商用有限元軟件,只考慮與力學(xué)相關(guān)的結(jié)構(gòu),為簡(jiǎn)化模型,對(duì)細(xì)部結(jié)構(gòu)的表達(dá)能力不足,同時(shí)因模型信息不全,造成模型數(shù)據(jù)可被其他軟件重復(fù)利用性差,常常導(dǎo)致相同數(shù)據(jù)的多次重建。

  本文探討在船閘閘首設(shè)計(jì)中使用三維技術(shù)。由于閘首的類型多,以人字門船閘閘首研究為例,介紹通過AutoCAD 二次開發(fā)程序建立閘首三維模型的方法,程序建立的模型形象、修改容易、可表達(dá)的細(xì)節(jié)程度高、模型數(shù)據(jù)易于被用作其它用途。本文的算例利用模型數(shù)據(jù)進(jìn)行閘首穩(wěn)定計(jì)算,以提高閘首設(shè)計(jì)的形象性和效率。

  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)生較早,但是其語法不常見不直觀,特別是對(duì)于復(fù)雜對(duì)象,其開發(fā)功能不強(qiáng);VB(A)采用ActiveX接口,具有開發(fā)簡(jiǎn)單直觀的特點(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)對(duì)象的關(guān)聯(lián)因素較多,再加上三維模型數(shù)據(jù)量大,對(duì)程序運(yùn)行速度要求高,因此采用ObjectARX作為閘首三維設(shè)計(jì)程序的開發(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í)體是指長(zhǎng)方體、平截頭體、球體和楔形體等。

  2)通過基本的二維對(duì)象生成三維實(shí)體。主要的方法是對(duì)二維對(duì)象的拉伸、掃掠、旋轉(zhuǎn)和通過一系列二維對(duì)象放樣。二維對(duì)象在此主要指面域。

  3)通過對(duì)已有實(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)定計(jì)算時(shí),程序中提取可供共享的三維模型信息主要有實(shí)體的質(zhì)量、質(zhì)心、斷面的慣性距等。實(shí)體的質(zhì)量、質(zhì)心等參數(shù)通過使用實(shí)體對(duì)象的特性查詢函數(shù)getMassProp( )實(shí)現(xiàn)。

  實(shí)體的斷面慣性距信息,通過剖切體實(shí)體獲得剖切斷面,通過使用剖切斷面特性信息查詢函數(shù)getMassProp()實(shí)現(xiàn)。斷面的創(chuàng)建與獲取主要用到以下3個(gè)函數(shù):

  1)實(shí)體切割函數(shù):輸入?yún)?shù)為切割平面,輸出參數(shù)為切割獲得的兩個(gè)新實(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ù)提供參數(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è)計(jì)程序。本系統(tǒng)使用簡(jiǎn)單,可進(jìn)行批量?jī)?yōu)化設(shè)計(jì),可使用同一個(gè)數(shù)據(jù)模型自動(dòng)完成多種設(shè)計(jì)任務(wù),設(shè)計(jì)過程及其成果直觀形象,設(shè)計(jì)修改容易,可大大降低設(shè)計(jì)工作量,提高設(shè)計(jì)效率,有較高的實(shí)用價(jià)值。

  本文開發(fā)的閘首三維設(shè)計(jì)程序的后續(xù)工作將進(jìn)一步完善和細(xì)化閘首三維模型的構(gòu)建,并把三維模型信息共享用于閘首結(jié)構(gòu)二維施工圖出圖、閘首四維施工模擬和閘首結(jié)構(gòu)有限元分析等功能。