王圍 李波 鄒元平
摘要:闡述了AutoCAD二次開發(fā)的原理及ActiveX自動化界面技術;介紹了幾種二次開發(fā)工具與性能特點、適用范圍;通過實例介紹了兩種AutoCAD二次開發(fā)的實現(xiàn)方法;為技術人員開發(fā)專用CAD系統(tǒng)提供一些幫助。
關鍵詞:AutoCAD二次開發(fā);開發(fā)原理;開發(fā)工具;實現(xiàn)方法
中圖分類號:TP391.72文獻標識碼:A文章編號:1009-3044(2012)01-0163-03
Research on Some Techniques in AutoCAD Secondary Development
WANG Wei, LI Bo, ZOU Yuan-ping
(Shandong Energy Machinery Group Tongli Equipment Manufacturing Co.,Ltd., Laiwu 271100, China)
Abstract: Describes the principle of AutoCAD secondary development and the technique of ActiveX Automation Interface; introduces some tools in AutoCAD secondary development and define the situation of their using;using some examples to introduce two ways of realizing AutoCAD secondary development;providing some help to technical people developing professional CAD systems.
Key words: AutoCAD secondary development; development principle; development tool; ways of realizing
隨著計算機技術的發(fā)展,CAD(計算機輔助設計)技術廣泛應用于機械、電子、電氣、建筑等領域[1]。AutoCAD作為一種通用圖形處理軟件,其繪圖功能完善,易學易用,使廣大技術人員“甩掉”了傳統(tǒng)的圖板,是目前應用最為廣泛的二維制圖軟件,幾乎是CAD的代名詞。AutoCAD的另一強大生命力在于其開放的結構體系,而這種開發(fā)體系,使得不同行業(yè)、專業(yè)根據(jù)自身的特點能夠對其進行二次開發(fā)。可以說,AutoCAD的通用性為其二次開發(fā)提供了必要條件,而AutoCAD開放的體系結構則使其二次開發(fā)成為可能,也只有通過對其進行二次開發(fā),才能夠進一步減少設計人員的制圖工作量,提高制圖效率[2]。本文將結合作者利用Visual Basic進行Au? toCAD二次開發(fā)的經(jīng)驗,探析AutoCAD二次開發(fā)中的若干問題。
1 AutoCAD二次開發(fā)原理
廣義二次開發(fā)是指在某些系統(tǒng)軟件及支撐軟件的基礎上,針對特定應用領域及用戶需求,結合專業(yè)知識約束集合,進而開發(fā)的專業(yè)應用軟件。AutoCAD二次開發(fā)(以下簡稱二次開發(fā))通常指在AutoCAD的基礎上,通過利用AutoCAD提供的開放式資源和開放式體系結構,結合專業(yè)特點,利用開發(fā)工具,對AutoCAD進行的再開發(fā),以滿足本行業(yè)或本專業(yè)的特定需求,其原理示意圖如圖1所示。圖1二次開發(fā)原理示意圖
ActiveX自動化界面技術(ActiveX Automation Interface)它由對象鏈接技術與嵌入技術發(fā)展而來,其核心在于允許外顯的對象由一個Windows應用程序控制另外一個Windows應用程序。自AutoCAD R14以后,AutoCAD都支持該技術,通過該接口,使得用戶利用開發(fā)工具在內(nèi)部或者外部來操縱AutoCAD。AutoCAD的大部分功能通過ActiveX接口“暴露”出來,并以屬性、方法的方式被封裝在ActiveX對象中[3]。使用開發(fā)工具,通過聲明,引用這些“暴露”的對象,如AcadLine,AcadCircle等,實現(xiàn)在當前圖形文檔或者模型空間中創(chuàng)建對象,進而操作其方法、屬性,如Mirror,Layer,color等。
2二次開發(fā)常用開發(fā)工具
為滿足用戶需求,Autodesk公司相繼推出了三代開發(fā)工具。第一代開發(fā)工具是AutoLISP語言,它嵌入AutoCAD內(nèi)部,幾乎可直接調(diào)用所有AutoCAD命令,如繪制一條直線,直接使用(command "line" p1 p2 ""),是一種解釋性語言;第二代開發(fā)工具是ADS(AutoCAD Development System),它是AutoCAD R11開始支持的一種基于C語言的開發(fā)環(huán)境,具備大規(guī)模處理能力;第三代開發(fā)工具包括:Visual AutoLISP,ObjectARX,VBA,通過接口與對象交互,它們的一些性能如表1所示[4]。
可以看出,幾種開發(fā)語言特性各異,各有所長,第三代開發(fā)工具將成為二次開發(fā)的必然選擇,但在開發(fā)中具體選擇哪種語言,應視需要及開發(fā)人員經(jīng)驗而定,對于中小型的產(chǎn)品結構設計,如10KV及以下變壓器結構參數(shù)化設計,需要有自己的啟動界面,推薦使用Visual Basic。本文所有代碼的書寫均采用Visual Basic語言。
3二次開發(fā)的實現(xiàn)
3.1二次開發(fā)的主要方法
二次開發(fā)主要方法是實現(xiàn)參數(shù)化設計,即根據(jù)零部件相關參數(shù),確定其形狀的一種設計方法。這些參數(shù)是實現(xiàn)參數(shù)化設計的必要條件,條件改變新圖形隨之生成。產(chǎn)品的參數(shù)化設計大致可以分為以下三種情形[5]:
1)參數(shù)的改變,程序順序執(zhí)行預定表達式,通過與用戶交互,完成繪圖。該種方法使新圖形形狀發(fā)生改變,可稱之為成比例參數(shù)化設計。它繪圖直觀,產(chǎn)品真實形狀一目了然,適于形狀相對簡單的零部件、標準件或復雜零部件某一視圖,如標準件、通用件等。
2)參數(shù)的改變,新圖形形狀不發(fā)生改變,相關標注發(fā)生改變,可稱之為圖樣法參數(shù)化設計。這需要開發(fā)者預先對圖形必須的參數(shù)做出分析并標識。程序運行后,對標識重新賦值、替換,完成繪圖。該種方法適于圖形復雜、變動不大的圖形,如同一型號不同規(guī)格的總裝配圖等。它簡單實用,但是不能反映零部件真實形狀。
3)上述兩種情形的組合,即在一張圖形當中,不同視圖采用不同參數(shù)化實現(xiàn)方法。
3.2成比例參數(shù)化設計
成比例參數(shù)化設計首先須確定一個合適的比例,在過程中加以調(diào)用,以反映產(chǎn)品真實形狀。建議在模塊層級定義一個確定制圖比例的公共函數(shù),在過程中直接調(diào)用該函數(shù),確定制圖比例,節(jié)省代碼書寫。這可通過視圖實際尺寸與圖幅限定尺寸相比較來確定,代碼實現(xiàn)如下:
PublicFunctionDefineScale(ByValActualLAsDouble,ByValActualHAsDouble,DrawingLAsDouble,DrawingHAsDouble)asDouble
其中,ActualL為零部件全部視圖所需實際長度,ActualH為零部件全部視圖實際寬度,DrawingL為圖紙限定長度,DrawingH為圖紙限定寬度,如A4圖紙限定尺寸為230/180;
Dim I as Integer
I = 1
Do While (DrawingL - ActualL / I) < 0 Or (DrawingH - ActualH / I) < 0
I = I + 1
Loop
DefineScale = 1 / I
End Function
該函數(shù)有四個傳值參數(shù),參數(shù)確定后,可以方便的確定作圖比例,以保證按比例繪制的圖形不會超過圖幅限定的界限。按照上述比例繪制一個矩形,由于在成比例參數(shù)化設計中會經(jīng)常用到創(chuàng)建矩形,按照手工繪制矩形的方法,同樣可以在模塊層級定義一個繪制矩形的函數(shù),代碼實現(xiàn)如下所示:
Public Function CreatRectangle (ByVal x0 As Double, ByVal y0 As Double, ByVal Length As Double, ByVal Width As Double, ByVal sc As Double,ByVal Layer As String, Optional ByVal colour As String) As AcadLWPolyline
引用“暴露”的ActiveX對象輕量多義線AcadLWPolyline;其中,矩形插入點在矩形框的左上角,Length為矩形長度,Width為矩形寬度,sc為確定的繪圖比例;Layer為矩形所在圖層,可選參數(shù)colour為矩形顏色;
Dim points(0 To 9) As Double
points(0) = x0: points(1) = y0
points(2) = points(0): points(3) = points(1)–Width*sc
points(4) = points(2) + Length*sc: points(5) = points(3)
points(6) = points(4): points(7) = points(1)
points(8) = points(0): points(9) = points(1)
Set CreatRectangle =Acad.ActiveDocument.ModelSpace.AddLightWeightPolyline(points)
CreatRectangle.Layer = Layer
If color <> "" Then
CreatRectangle.color = colour End If End Function
3.3圖樣法參數(shù)化設計
如上所述,圖樣法參數(shù)化設計關鍵在于分析結構參數(shù)并做出標識,并對同一產(chǎn)品不同圖樣做出有效命名,按照一定規(guī)律分別調(diào)用,最后實現(xiàn)賦值替換,完成參數(shù)化設計。圖2所示,圖樣中的字母L、L/2、B、B/2等標注是需要賦值、替換的參數(shù)對象。程序運行調(diào)用圖樣,實現(xiàn)標注替換完成新圖形,代碼實例如下:
Dim BlockStr as String
BlockStr = "實例"
Set blockRef=Acad.ActiveDocument.ModelSpace.InsertBlock(insertionPnt,BlkPath & "實例.dwg", 1#, 1#, 1#, 0)其中,insertionPnt為圖樣插入點,BlkPath為圖樣相對查詢路徑。完成參數(shù)的替換:
ReplaceBlock "實例", "DimRotated", "L", L
其中,ReplaceBlock為模塊級定義的替換圖樣中對象的函數(shù);以此類推,替換其他字母標注,最后對塊文件實施炸開,顯示新的替換值,完成設計。
4結束語
目前,AutoCAD二次開發(fā)技術正應用于多個領域、行業(yè),是進一步減少設計人員工作量,提高繪圖效率的有效手段。對于標準件、成系列化的產(chǎn)品、結構相同或類似的產(chǎn)品的設計,尤為適用;對于較為復雜的圖紙,兩種參數(shù)化設計方法的有效組合使用,可大大減少編碼書寫工作,縮短產(chǎn)品開發(fā)周期,進一步提高參數(shù)化的水平。
參考文獻:
[1]方貴盛,王建軍.AutoCAD二次開發(fā)技術及其應用研究[J].機床與液壓,2007,35 (6):186-212.
[2]李長勛.AutoCAD ObjectARX程序開發(fā)技術[M].北京:國防工業(yè)出版社,2005:1-4.
[3]原思聰,王憲章. AutoCAD二次開發(fā)技術及其在機械工程中的應用[J].西安建筑科技大學學報,2001,33(1):71-75.
[4]姜宏偉,李淼,鄧海鵬.變壓器輔助設計中的典型圖法[J].電器制造,2007(9):82-85.
[5]張晉西.Visual Basic與AutoCAD二次開發(fā)[M].北京:清華大學出版社,2002:7-10.