彭林山
(成都建筑材料工業(yè)設(shè)計研究院有限公司,成都市 610051)
Autodesk公司旗下的產(chǎn)品AutoCAD軟件已經(jīng)成為各個行業(yè)廣大設(shè)計者最為常用的設(shè)計工具。對于不同行業(yè)領(lǐng)域的設(shè)計者,除了應(yīng)用AutoCAD本身所具有的功能,還需要針對自己的設(shè)計需要開發(fā)更多的功能來提高設(shè)計工作的效率,這就需要對AutoCAD進(jìn)行二次開發(fā)。目前,針對某個行業(yè),應(yīng)用AutoCAD二次開發(fā)的實例已經(jīng)有很多了。在水泥廠設(shè)計中,存在著大量非標(biāo)準(zhǔn)件的設(shè)計,本文針對非標(biāo)準(zhǔn)件設(shè)計的具有數(shù)量大、重復(fù)性和規(guī)律性強等特點,進(jìn)行了AutoCAD的二次開發(fā),提高了非標(biāo)準(zhǔn)件設(shè)計效率。
在Visual Studio 2012開發(fā)環(huán)境中,利用AutoCAD軟件的ActiveX?(COM自動化)技術(shù),使用Visual Basic.net編程語言對AutoCAD2013進(jìn)行二次開發(fā)。Visual Studio 2012作為一個集成解決方案,適用于個人或者各種規(guī)模的開發(fā)團隊,可以進(jìn)行良好的數(shù)據(jù)封裝,以更好的方式進(jìn)行面向?qū)ο蟮某绦蛟O(shè)計,同時也能更好的和其他應(yīng)用程序進(jìn)行數(shù)據(jù)交換[1]。
AutoCAD軟件的ActiveX?技術(shù)將AutoCAD中的對象暴露出來,使得編程環(huán)境可以訪問到AutoCAD的對象,通過對象的屬性、方法和事件來實現(xiàn)我們想要的功能。AutoCAD軟件的ActiveX?技術(shù)提供了許多可以訪問的對象,這些對象分為圖像對象(例如:直線,圓弧,文本,尺寸標(biāo)注等)和樣式設(shè)置對象(例如:線型和尺寸標(biāo)注樣式等)等,甚至AutoCAD應(yīng)用程序也可以看做是一個對象,這些對象具有一定的層次和隸屬關(guān)系,我們在編程過程中都可以訪問得到。
在水泥廠建設(shè)工程設(shè)計中,非標(biāo)準(zhǔn)件的設(shè)計是一項繁復(fù)的設(shè)計工作,很多非標(biāo)準(zhǔn)件的法蘭接口在外形上都十分相似,只是尺寸大小不同,螺栓孔數(shù)量不同而已。本文通過AutoCAD的二次開發(fā),只是輸入法蘭的相關(guān)尺寸,就可以自動繪制出相應(yīng)的法蘭,從而提高設(shè)計效率,這種類似于參數(shù)化設(shè)計。程序開發(fā)過程大致介紹如下。
在Visual Studio 2012開發(fā)環(huán)境中,新建一個VB類庫的項目(.dll),添加相應(yīng)的應(yīng)用(AcCoreMgd.dll、AcDbMgd.dll、AcMgd.dll、Autodesk.AutoCAD.Interop.dll 和Autodesk.AutoCAD.Interop.Common.dll,在AutoCAD安裝目錄都可以找到)。為了簡化AutoCAD設(shè)計的界面,這里設(shè)計了個用戶控件定義為AutoCAD的內(nèi)部窗口(palette),作為用戶輸入尺寸的界面,界面設(shè)計如圖1。
圖1 用戶控件界面
實現(xiàn)代碼如下:
其中“方和圓的法蘭”是用戶控件對象的名稱,語句mypaletteset.Add("palette1", mypalette)將用戶對象添加為AutoCAD的內(nèi)部窗口。用文本框?qū)ο笙嚓P(guān)輸入法蘭的尺寸。兩個名稱為“比例”的下拉菜單可以選擇繪制法蘭的比例(1∶100,1∶50,1∶40,1∶20,1∶10和1∶5可供選擇),“標(biāo)注樣式”下拉菜單可以選擇當(dāng)前活動AutoCAD程序中的已有的標(biāo)注樣式,比例的選擇與標(biāo)注樣式要相對應(yīng)。以下代碼實現(xiàn)了將當(dāng)前活動AutoCAD程序中的已有的標(biāo)注樣式添加到“標(biāo)注樣式”下拉菜單中。
直線和線型標(biāo)注的繪制以方形法蘭右邊的中心線的繪制為例。代碼如下∶
其中l(wèi)ineobj為直線對象,lineobj.Layer = "center"設(shè)置直線的圖層為 “center”,改圖層應(yīng)該先在AutoCAD中創(chuàng)建。用AddDimAligned方法添加名稱為mydimension 的線型標(biāo)注對象。mydimension.StyleName = ComboBox2.SelectedItem.ToString將“標(biāo)注樣式”下拉菜單中所擇的標(biāo)注樣式賦值給mydimension 標(biāo)注對象的StyleName屬性,從而可以靈活創(chuàng)建不同標(biāo)注樣式的尺寸標(biāo)注。
圓和直徑標(biāo)注的繪制大致與直線和線型標(biāo)注的繪制大致相同,圓形法蘭的螺栓孔的繪制可以用ArrayPolar方法生成圓周陣列來繪制。
在輸入相關(guān)尺寸,選擇了比例和標(biāo)注樣式后,單擊確定按鈕,提示用戶輸入插入點,用戶只需要在模型空間中想要繪制法蘭的位置單擊鼠標(biāo)即可,實現(xiàn)代碼如下:
ctr = ThisDrawing.ActiveDocument.Utility.GetPoint(, vbCrLf + "輸入插入點:")
ctr為雙精度型一維數(shù)組,存儲插入點的三維坐標(biāo)。
程序編寫調(diào)試完成后,生成dll程序集,在AutoCAD中輸入netload加載該程序集,加載成功后,輸入palette即出現(xiàn)圖1所示的面板,輸入相關(guān)尺寸、比例和標(biāo)注樣式,單擊確定按鈕,輸入插入點,即繪出了相應(yīng)的法蘭,最后根據(jù)圖紙布局調(diào)整標(biāo)注的位置即可。該程序較以前的其他作者編寫的程序相比,用該程序繪制出的法蘭幾乎不用做任何的修改而且準(zhǔn)確,可直接打印出圖,再者,該程序啟動和關(guān)閉非常方便,界面友好,通俗易懂。
目前,在編制圖紙目錄時,都是從AutoCAD里復(fù)制非標(biāo)準(zhǔn)件名稱和重量,再粘貼到Excel表格里,如果遇到非標(biāo)準(zhǔn)件多的時候,這個將是非常消耗時間的工作,而且是機械性重復(fù)復(fù)制粘貼命令。現(xiàn)在利用Excel的COM接口可以和AutoCAD進(jìn)行混合編程,只需要在AutoCAD中反復(fù)選擇各個非標(biāo)準(zhǔn)件的名稱和重量,自動在Excel表格生成。編寫以下過程來獲得Excel對象。
其中myExcel為全局變量,類型為Object,以上過程運行后,如不出現(xiàn)錯誤,myExcel就為Excel對象了。myExcel.Workbooks.Add添加Excel的工作簿。用GetString和GetEntity方法來得到用戶輸入的信息,賦值給當(dāng)前活動表格中的單元格。程序也編寫了處理輸入錯誤的方法。
當(dāng)選擇完所有的非標(biāo)準(zhǔn)件的名稱和重量后可以按Esc鍵退出。退出后彈出Excel界面如圖。這樣就可以很方便的復(fù)制粘貼到設(shè)備表中。需要說明的是,非標(biāo)準(zhǔn)件的名稱過長的話,應(yīng)該在AutoCAD中改為多行文本。
運行截圖見圖2:
圖2 程序運行截圖
通過AutoCAD的二次開發(fā),可以滿足設(shè)計人員特定的繪圖需要,從而可以大大提高設(shè)計效率。本文僅介紹了兩個簡單的功能,在工程設(shè)計過程中還有很多重復(fù)繪圖的過程可以通過AutoCAD的二次開發(fā)來提高設(shè)計效率,本文僅列舉了簡單的法蘭及材料表的繪制作為例證,非標(biāo)件的繪制都可以通過本方法進(jìn)行過程簡化,實現(xiàn)了非標(biāo)件的規(guī)范高效設(shè)計。
[1]凌詠紅,黃小微.基于C#的AutoCAD二次開發(fā)在建筑工程中的應(yīng)用 [J].中國科技論文在線.1999(04).