■ 何守旺
Auto CAD Civil 3D中自定義部件的實(shí)現(xiàn)方法
■ 何守旺
對(duì)Auto CAD Civil 3D中自定義部件技術(shù)進(jìn)行分析,剖析其實(shí)現(xiàn)實(shí)質(zhì),提出.NET語(yǔ)言設(shè)計(jì)自定義部件的實(shí)施步驟,并結(jié)合鐵路隧道洞口位置選擇軟件中的自定義部件的具體實(shí)踐驗(yàn)證該方法的可行性。
Auto CAD Civil 3D;自定義部件;幾何單元;邏輯目標(biāo);隧道洞口
在Auto CAD Civil 3D中,部件是道路設(shè)計(jì)的基本構(gòu)造塊,一個(gè)部件就是一個(gè)A u t o C A D圖形對(duì)象(AECCSubassembly),是用于定義道路橫斷面、構(gòu)建道路等三維模型的重要組成部分。此處的道路是廣義道路,實(shí)際上指一個(gè)具有路線水平幾何特性、縱斷面垂直幾何特性及橫斷面幾何特性的三維帶狀模型,不僅可以是鐵路、公路、城市道路,還可以是地鐵、橋梁、隧道、擋土墻、水渠、大壩、管線、護(hù)坡、綠化帶等。Auto CAD Civil 3D通過工具選項(xiàng)板和工具目錄提供了大量預(yù)配置部件(如車道、路肩、中間帶和邊坡),這些部件都是由一些點(diǎn)、連接和造型進(jìn)行定義,基本能滿足使用要求,但在實(shí)際工程項(xiàng)目應(yīng)用中,根據(jù)項(xiàng)目特點(diǎn)和要求還需自定義部件。
在Auto CAD Civil 3D中,可以通過以下3種方式實(shí)現(xiàn)自定義部件:(1)從多段線創(chuàng)建自定義部件;(2)使用部件編輯器創(chuàng)建部件;(3)使用.NET語(yǔ)言設(shè)計(jì)部件。一般對(duì)于形狀固定且不需指定邏輯目標(biāo)的部件,使用第一種方式就可以很快實(shí)現(xiàn),如渠道、路緣石等;而對(duì)于形狀動(dòng)態(tài)變化(需參數(shù)驅(qū)動(dòng))的部件,需要后2種方式來(lái)設(shè)計(jì)。部件編輯器(Autodesk Subassembly Composer)是通過可視化的軟件界面和圖形交互方式創(chuàng)建部件,但此方式的邏輯判斷中不支持循環(huán)條件,因此經(jīng)常需要使用.NET語(yǔ)言設(shè)計(jì)部件。
1.1 部件幾何單元和代碼
部件有3種幾何單元:點(diǎn)(Point)、連接(Link)、造型(Shape),它們分別形成部件的頂點(diǎn)、點(diǎn)之間的一條直線段、連接圍成的閉合橫斷面區(qū)域?;谶@3種幾何單元來(lái)生成AutoCAD Civil 3D道路模型的線、曲面和結(jié)構(gòu)體,即沿著中心線進(jìn)行縱向延伸,“點(diǎn)”形成縱向要素線,“連接”形成縱向帶狀面,“造型”形成縱向空間帶,且每個(gè)部件可由任意多個(gè)點(diǎn)、連接和造型構(gòu)成。
需要為幾何單元指定代碼(即創(chuàng)建有意義的文字名稱),用來(lái)標(biāo)識(shí)幾何單元的工程含義,每個(gè)幾何單元可以沒有代碼,也可以有任意多個(gè)代碼(多個(gè)代碼之間用逗號(hào)分隔)。其中,點(diǎn)代碼是要素代碼,指定構(gòu)成部件連接的端點(diǎn);連接代碼是為構(gòu)成道路部件的每個(gè)連接指定的要素代碼;造型代碼主要用于定義不同材質(zhì)的填充圖案及為材質(zhì)體積表格提取面積。在構(gòu)建道路模型時(shí),沿著線路方向,相同代碼的幾何單元被連接成為連續(xù)的構(gòu)造(沒有代碼的幾何單元不會(huì)被連接),點(diǎn)代碼、連接代碼還直接影響到橫斷面的標(biāo)注,因此必須在創(chuàng)建部件前仔細(xì)設(shè)計(jì)代碼方案。
1.2 邏輯目標(biāo)
邏輯目標(biāo)是某些部件的形體關(guān)聯(lián)到道路外部的對(duì)象,邏輯目標(biāo)分為曲面、寬度或偏移(水平方向),坡度或高度(豎直方向)。對(duì)于曲面邏輯目標(biāo),僅可使用曲面對(duì)象定義該曲面,如道路邊坡一定要和曲面相交,那么地形曲面就是邊坡部件的邏輯目標(biāo)。對(duì)于水平方向的寬度邏輯目標(biāo),可使用路線、多段線、要素線或測(cè)量地物對(duì)象定義寬度或偏移。類似地,對(duì)于垂直方向的高度邏輯目標(biāo),可使用縱斷面、三維多段線、要素線或測(cè)量地物對(duì)象來(lái)定義。將這3種邏輯目標(biāo)組合使用就可以進(jìn)行很多復(fù)雜的設(shè)計(jì),如在翼墻設(shè)計(jì)中需要考慮翼墻與端墻的切合,為此要聯(lián)合應(yīng)用高度邏輯目標(biāo)和寬度邏輯目標(biāo)。為使部件具有較高的靈活性,并能根據(jù)外部環(huán)境的不同而自動(dòng)變化,設(shè)計(jì)時(shí)通常使用虛擬目標(biāo),只有在建立道路模型時(shí),才需要為每個(gè)部件指定要關(guān)聯(lián)的外部對(duì)象。
1.3 部件程序模塊
在自定義部件的.NET項(xiàng)目中,需要添加C3DStockSubassemblies.dll程序集引用。在這個(gè)工程項(xiàng)目中,含有3個(gè)關(guān)鍵文件:(1)SATemplate.vb文件。定義了SATemplate類,所有自定義部件都必須定義一個(gè)該類的派生類,并在其模塊中實(shí)現(xiàn)若干個(gè)標(biāo)準(zhǔn)函數(shù),SATemplate提供了4個(gè)需要重載的函數(shù),GetLogicalNamesImplement函數(shù)定義運(yùn)行時(shí)邏輯指定列表,該列表可以在建模模式中創(chuàng)建;GetInputParametersImplement函數(shù)定義必須為部件定義的輸入?yún)?shù)列表;GetOutputParametersImplement函數(shù)定義由部件生成的輸出參數(shù)列表;DrawImplement讀取用戶定義的輸入?yún)?shù)和邏輯指定,調(diào)整部件造型,然后在已有裝配中增加點(diǎn)、連接和造型。上列函數(shù)都需要傳入CorridorState類型的對(duì)象,該對(duì)象是自定義部件和將要連接裝配的點(diǎn)、連線和造型集合的主要接口,提供許多特性和方法,包括當(dāng)前里程、當(dāng)前路線和縱斷面、當(dāng)前偏移和高程、圖層、顏色、直線樣式及線寬。某些特性(如CurrentAlignment特性)本身又提供了多組方法和特性,這些特性還包括若干參數(shù)集合,用于收集布爾、長(zhǎng)整形、雙精度、字符串路線、縱斷面、曲面和點(diǎn)等類型參數(shù)。(2)CodesSpecific.vb文件。提供CodeType和AllCodes結(jié)構(gòu),以及全局變量代碼,即帶有填充信息的AllCodes結(jié)構(gòu)實(shí)例。(3)Utilities.vb文件。提供一系列輔助功能函數(shù),如錯(cuò)誤處理、計(jì)算部件幾何,以及附著代碼字符和其他任務(wù)等。
1.4 二次開發(fā)程序中對(duì)自定義部件的調(diào)用
對(duì)自定義部件的管理是以Autodesk工具目錄的形式實(shí)現(xiàn),即使用帶有.ATC擴(kuò)展名的XML格式文件定義,定義部件工具目錄的內(nèi)容和組織,描述所有工具目錄及目錄內(nèi)的工具。在基于.NET API對(duì)AutoCAD Civil 3D進(jìn)行二次開發(fā)的程序中,對(duì)部件的調(diào)用主要以SubassemblyCollection類的3個(gè)成員函數(shù)來(lái)實(shí)現(xiàn):Add函數(shù)實(shí)現(xiàn)將多段線實(shí)體轉(zhuǎn)換為自定義部件;ImportSubassembly函數(shù)根據(jù)Autodesk工具目錄的.ATC文件及目錄內(nèi)的工具調(diào)用自定義部件;ImportStockSubassembly函數(shù)實(shí)現(xiàn)在.NET形狀生成模式下,根據(jù).NET裝配名稱和.NET類名稱調(diào)用自定義部件,對(duì)用.NET語(yǔ)言設(shè)計(jì)的部件的調(diào)用都用該函數(shù),有時(shí)需要結(jié)合SubassemblyGenerator類,實(shí)現(xiàn)對(duì)部件的直接替換。
以.NET為例,在具體實(shí)施過程中,一般按照以下步驟自定義部件:(1)規(guī)劃與分析,對(duì)部件幾何造型、應(yīng)用目的及設(shè)計(jì)操作中如何使用部件進(jìn)行精心規(guī)劃與分析;(2)創(chuàng)建設(shè)計(jì)文檔,主要描述部件的附著方式、參數(shù)、運(yùn)行時(shí)邏輯指定、行為、代碼方案等;(3)編程實(shí)現(xiàn)。
根據(jù)以上方法和步驟,以翼墻式隧道洞門翼墻為例,在Auto CAD Civil 3D平臺(tái)上利用.NET API進(jìn)行鐵路隧道洞口位置選擇軟件自定義部件的定制。
2.1 規(guī)劃與分析
在翼墻式隧道洞門中,翼墻在正面起到抵抗山體縱向推力、增加洞門抗滑及抗傾覆能力的作用,兩側(cè)面保護(hù)路塹邊坡起擋土墻作用,由墻身、頂水溝、基礎(chǔ)組成。設(shè)計(jì)中需要考慮翼墻高度、厚度、邊坡、仰坡、胸坡及排水,與其關(guān)聯(lián)對(duì)象有路塹邊坡、端墻,隨著翼墻高度變化,考慮增加厚度,且需要考慮與端墻的切合,因此邏輯對(duì)象包括頂水溝高度、基礎(chǔ)高度和定位線偏移。最后為了計(jì)算材料,需要將其造型分為外露面、墻身、頂水溝、基礎(chǔ)。翼墻裝配見圖1。
2.2 創(chuàng)建設(shè)計(jì)文檔
翼墻部件的附著點(diǎn)位于隧道內(nèi)軌頂面與翼墻外側(cè)面交線上。輸入?yún)?shù)主要為翼墻高度和厚度、邊坡比、胸坡比、仰坡比、基底坡度、基礎(chǔ)埋深、頂水溝寬度和深度、外露面厚度、側(cè)水溝深度和寬度。翼墻部件運(yùn)行時(shí)邏輯指定見表1。
翼墻部件基于給定的輸入?yún)?shù)值生成翼墻基礎(chǔ)和墻身結(jié)構(gòu)的連接,需要考慮部件行為間的差異,主要是隨著翼墻高度變化,翼墻厚度變化,且需要考慮與端墻的切合。翼墻部件的點(diǎn)、連接和造型示意見圖2、圖3。
2.3 編程實(shí)現(xiàn)
第一步:新建項(xiàng)目。在項(xiàng)目類型中選擇Visual C#語(yǔ)言,然后在模板列表中選擇“類庫(kù)”項(xiàng)目,最后輸入項(xiàng)目名稱及項(xiàng)目存儲(chǔ)位置,完成新建項(xiàng)目。
第二步:添加引用。添加對(duì)acdbmgd.dll、acmgd.dll、accoremgd.dll、AecBaseMgd.dll、AeccDbMgd.dll、C3DStockSubassemblies.dll程序集的引用,并把引用的DLL庫(kù)文件的“復(fù)制本地”屬性設(shè)置為“False”。
第三步:項(xiàng)目屬性設(shè)置。在項(xiàng)目屬性頁(yè)對(duì)話框中,將“應(yīng)用程序”選項(xiàng)卡中的“目標(biāo)框架”設(shè)置為“.NET Framework 4”,將“調(diào)試”選項(xiàng)卡中的“啟動(dòng)外部程序”設(shè)置為AutoCAD Civil 3D 2014主程序acad.exe的路徑。
第四步:加入命名空間。根據(jù)實(shí)現(xiàn)功能要求,加入需要的命名空間。
第五步:實(shí)現(xiàn)翼墻類。Wing Wall Subassembly類繼承于SATemplate基礎(chǔ)類,重載Get Logical Names Implement、Get Input Parameters Implement、Draw Implement三個(gè)函數(shù),在Draw Implement中,Param Elevation Target Collection、 Param Offset Target Collection、Param Double Collection三個(gè)集合實(shí)現(xiàn)從對(duì)象中獲取關(guān)聯(lián)參數(shù)(圖2中P0與P1點(diǎn)將用這些獲取參數(shù)計(jì)算得到),Point Collection、Link Collection、Shape Collection三個(gè)集合實(shí)現(xiàn)創(chuàng)建部件的點(diǎn)、連接、造型,并為幾何單元定義代碼。
第六步:使用部件。通過安裝自定義部件或直接在項(xiàng)目中通過API調(diào)用來(lái)使用部件。
在AutoCAD Civil 3D的應(yīng)用中,自定義部件是必須掌握的一項(xiàng)技能。探析自定義部件的關(guān)鍵技術(shù),重點(diǎn)分析.NET語(yǔ)言設(shè)計(jì)部件的方法,并將該方法應(yīng)用于實(shí)際鐵路隧道洞口位置選擇軟件的開發(fā)中,取得了很好效果,但該方法對(duì)設(shè)計(jì)人員要求較高。在項(xiàng)目的具體應(yīng)用中,根據(jù)具體情況,將自定義部件的3種方式組合應(yīng)用不失為一種較佳選擇。
[1] 任耀.Auto CAD Civil 3D 2013應(yīng)用寶典[M].上海:同濟(jì)大學(xué)出版社,2013.
[2] 秦洪現(xiàn),崔惠嵐,孫劍,等.Autodesk系列產(chǎn)品開發(fā)培訓(xùn)教程[M].北京:化學(xué)工業(yè)出版社,2008.
[3] 曾洪飛,盧擇臨,張帆.Auto CAD VBA&VB.NET開發(fā)基礎(chǔ)與實(shí)例教程[M].北京:中國(guó)電力出版社,2013.
[4] 何守旺.基于.NET的Auto CAD Civil 3D二次開發(fā)技術(shù)及應(yīng)用[J].鐵路技術(shù)創(chuàng)新,2014(5):42-44.
[5] 張小英,朱海濤.隧道洞口三維設(shè)計(jì)系統(tǒng)的應(yīng)用[J].華東公路,2010(5):78-81.
[6] 易平,駱秀萍.土石壩設(shè)計(jì)中Auto CAD Civil 3D技術(shù)的應(yīng)用[J].甘肅水利水電技術(shù),2013(11):39-41.
[7] 江寶剛.淺談Autodesk Civil 3D軟件在工程中的應(yīng)用[J].山西建筑,2008(16):364-365.
何守旺:中鐵第一勘察設(shè)計(jì)院集團(tuán)有限公司,工程師,陜西 西安,710043
責(zé)任編輯 高紅義
U459.1;TP39
A
1672-061X(2015)06-0084-03