AutoCAD二次開發(fā)工具綜述
2013-05-26 by:廣州有限元分析、培訓(xùn)中心-1CAE.COM 來源:仿真在線
AutoCAD是目前微機上應(yīng)用最為廣泛的通用交互式計算機輔助繪圖與設(shè)計軟件包。AutoCAD的強大生命力在于它的通用性、多種工業(yè)標準和開放的體系結(jié)構(gòu)。其通用性使得它在機械、電子、航空、船舶、建筑、服裝等領(lǐng)域得到了極為廣泛的應(yīng)用。但是,不同的行業(yè)標準使得各領(lǐng)域在使用AutoCAD的過程中均需根據(jù)自身特點進行定制或開發(fā)。
AutoCAD是目前微機上應(yīng)用最為廣泛的通用交互式計算機輔助繪圖與設(shè)計軟件包。AutoCAD的強大生命力在于它的通用性、多種工業(yè)標準和開放的體系結(jié)構(gòu)。其通用性使得它在機械、電子、航空、船舶、建筑、服裝等領(lǐng)域得到了極為廣泛的應(yīng)用。但是,不同的行業(yè)標準使得各領(lǐng)域在使用AutoCAD的過程中均需根據(jù)自身特點進行定制或開發(fā)。Autodesk公司為滿足廣大用戶的需求,自AutoCAD v2.18版至AutoCAD 2000的短短十幾年間,就相繼推出了三代二次開發(fā)工具,如圖1所示??梢哉f,AutoCAD的通用性為其二次開發(fā)提供了必要條件,而AutoCAD開放的體系結(jié)構(gòu)則使其二次開發(fā)成為可能。
圖1 AutoCAD二次開發(fā)工具的演變
下面對AutoCAD的三代開發(fā)工具進行淺析。
一、第一代開發(fā)工具——AutoLISP
AutoLISP是1986年隨AutoCAD v2.18提供的二次開發(fā)工具。它是一種人工智能語言,是嵌入AutoCAD內(nèi)部的COMMON LISP的一個子集。在AutoCAD的二次開發(fā)工具中,它是唯一的一種解釋型語言。使用AutoLISP可直接調(diào)用幾乎所有的AutoCAD命令。
AutoLISP語言最典型的應(yīng)用之一是實現(xiàn)參數(shù)化繪圖程序設(shè)計,包括尺寸驅(qū)動程序和鼠標拖動程序等。另一個典型應(yīng)用就是驅(qū)動AutoCAD提供PDB模塊構(gòu)成DCL(Dialog Control Language)文件,創(chuàng)建自己的對話框。
AutoLISP具有以下優(yōu)點:(1)語言規(guī)則十分簡單,易學(xué)易用;(2)直接針對AutoCAD,易于交互;(3)解釋執(zhí)行,立竿見影。
AutoLISP的缺點是:(1)功能單一,綜合處理能力差;(2)解釋執(zhí)行,程序運行速度慢;(3)缺乏很好的保護機制,源程序保密性差;(4)LISP用表來描述一切,并不能很好地反映現(xiàn)實世界和過程,跟人的思維方式也不一致;(5)不能直接訪問硬件設(shè)備、進行二進制文件的讀寫。
AutoLISP的這些特點,使其僅適合于有能力的終端用戶完成一些自己的開發(fā)任務(wù)。
二、第二代開發(fā)工具——ADS
ADS(AutoCAD Development System)是AutoCAD R11開始支持的一種基于C語言的靈活的開發(fā)環(huán)境。ADS可直接利用用戶熟悉的C編譯器,將應(yīng)用程序編譯成可執(zhí)行文件后在AutoCAD環(huán)境下運行,從而既利用了AutoCAD環(huán)境的強大功能,又利用了C語言的結(jié)構(gòu)化編程、運行效率高的優(yōu)勢。
與AutoLISP 相比,ADS優(yōu)越之處在于:(1)具備錯綜復(fù)雜的大規(guī)模處理能力;(2)編譯成機器代碼后執(zhí)行速度快;(3)編譯時可以檢查出程序設(shè)計語言的邏輯錯誤;(4)程序源代碼的可讀性好于AutoLISP。 而其不便之處在于:(1)C語言比LISP語言難于掌握和熟練應(yīng)用;(2)ADS程序的隱藏錯誤往往導(dǎo)致AutoCAD,乃至操作系統(tǒng)的崩潰;(3)需要編譯才能運行,不易見到代碼的效果;(4)同樣功能,ADS程序源代碼比AutoLISP代碼長很多。
三、第三代開發(fā)工具——Visual LISP,ARX及基于ActiveX Automation技術(shù)的VBA等
1.Visual LISP(VLISP)
VLISP是AutoLISP的換代產(chǎn)品。它與AutoLISP完全兼容,并提供它所有的功能,是新一代的AutoCAD LISP語言。VLISP對語言進行了擴展,可以通過Microsoft ActiveX Automation接口與對象交互。同時,通過實現(xiàn)反應(yīng)器函數(shù),還擴展了AutoLISP響應(yīng)事件的能力。作為開發(fā)工具,VLISP提供了一個完整的集成開發(fā)環(huán)境(IDE),包括編譯器、調(diào)試器和其他工具,可以提高二次開發(fā)的效率 。另外,VLISP還提供了工具用于發(fā)布獨立的應(yīng)用程序。
2.ARX
ARX(AutoCAD Runtime eXtension)是AutoCAD R13之后推出的一個以C++語言為基礎(chǔ)的面向?qū)ο蟮拈_發(fā)環(huán)境和應(yīng)用程序接口。ARX程序本質(zhì)上為Windows動態(tài)鏈接庫(DLL)程序,與AutoCAD共享地址空間,直接調(diào)用AutoCAD的核心函數(shù),可直接訪問AutoCAD數(shù)據(jù)庫的核心數(shù)據(jù)結(jié)構(gòu)和代碼,以便能夠在運行期間擴展AutoCAD固有的類及其功能,創(chuàng)建能夠全面享受AutoCAD固有命令特權(quán)的新命令。ARX程序與AutoCAD、Windows之間均采用Windows消息傳遞機制直接通訊。
AutoLISP、ADS、ARX都是AutoCAD提供的內(nèi)嵌式編程語言。AutoLISP和ADS都是通過內(nèi)部進程通訊(IPC)來和AutoCAD通訊,它們與AutoCAD是相互分離的過程,而ARX以DLL形式與AutoCAD共享地址空間,如圖2所示。因此,與前兩者相比,其速度更快、運行更穩(wěn)定、更簡單。由于是在Windows及VC++編程環(huán)境里運行,所以,對開發(fā)者的編程能力要求較高。
圖2 ARX、ADS、AutoLisp與AutoCAD的關(guān)系
ObjectARX應(yīng)用程序以C++為基本開發(fā)語言,具有面向?qū)ο缶幊谭绞降臄?shù)據(jù)可封裝性、可繼承性及多態(tài)性的特點,用其開發(fā)的CAD軟件具有模塊性好、獨立性強、連接簡單、使用方便、內(nèi)部功能高效實現(xiàn)以及代碼可重用性強等特點,并且支持MFC基本類庫,能簡潔高效地實現(xiàn)許多復(fù)雜功能。
這里順便提一下ADSRX。AutoCAD R14的開發(fā)環(huán)境ADSRX是ARX的一個子集,它等效于ADS。使用ADSRX,能夠用C語言編寫基于AutoCAD的程序,也能很方便地將ADS程序移植為ARX程序。
圖3比較了AutoLISP、ADS、ADSRX和ARX的關(guān)于速度、暴露性、功能和要求使用每個API的編程經(jīng)驗等方面的編程接口?!氨┞缎浴眳?shù)顯示了用戶編程錯誤的可能嚴重性。盡管ARX接口是四個API中最強有力的,它也具有產(chǎn)生嚴重編程錯誤的最大潛在性,如破壞AutoCAD數(shù)據(jù)結(jié)構(gòu)等。其它編程環(huán)境要求較少的編程經(jīng)驗,但提供的功能和范圍也較小。
圖3 AutoLisp、ADS和ARX的系統(tǒng)比較
可以說,AutoLISP著眼于應(yīng)用程序的交互性,ADS C/C++著眼于應(yīng)用程序的綜合性,而ARX則著眼于應(yīng)用程序的智能性。
3.基于ActiveX Automation技術(shù)的VBA等開發(fā)工具
ActiveX Automation是一套微軟標準,以前稱為OLE Automation技術(shù)。該標準允許通過外顯的對象由一個Windows應(yīng)用程序控制另一個Windows應(yīng)用程序,這也是面向?qū)ο缶幊碳夹g(shù)的精髓所在。AutoCAD從R14開始增加了作為ActiveX Automation服務(wù)器應(yīng)用程序的功能,使得許多面向?qū)ο缶幾g語言和應(yīng)用程序可以通過ActiveX與AutoCAD進行通信,并操縱AutoCAD的許多功能,如圖4所示。
圖4 ActiveX在開發(fā)語言與AutoCAD之間所起的作用
ActiveX Automation服務(wù)器應(yīng)用程序是通過自身對象的屬性、方法和事件實現(xiàn)其功能。對象是服務(wù)器應(yīng)用程序簡單而抽象的代表。不管是用VB、VC、OFFICE VBA等從外部開發(fā),還是用AutoCAD VBA從內(nèi)部對AutoCAD進行二次開發(fā),都是通過調(diào)用AutoCAD的對象體系結(jié)構(gòu)來進行的。AutoCAD 2000 ActiveX Automation技術(shù)將AutoCAD 2000的各種功能封裝在AutoCAD ActiveX對象中,供編程使用。AutoCAD 2000中提供的所有對象組成一個樹形結(jié)構(gòu),如圖5所示,最高層是Application對象,其他對象都是它的后代。為了得到一個特定的對象,必須從Application對象對其子孫進行遍歷,直到找到該特定的對象。
圖5 AutoCAD對象模型
ActiveX Automation技術(shù)的完全面向?qū)ο蠡幊痰奶攸c,使其開發(fā)環(huán)境具備了強大的開發(fā)能力和簡單易用的優(yōu)良特點,開發(fā)工具的選擇也具有很大的靈活性。所以,利用ActiveX Automation技術(shù),是極具潛力的一種開發(fā)手段。
四、結(jié)束語
以上對AutoCAD的三代開發(fā)工具分別作了簡要介紹。目前,第一代的AutoLISP已能被第三代的VLISP完全替代,第二代的ADS在AutoCAD 2000中已不再支持,所以,第三代開發(fā)工具將成為今后AutoCAD二次開發(fā)的必然選擇。而在第三代工具中具體選擇哪一種,筆者認為,主要還應(yīng)根據(jù)用戶應(yīng)用程序的需要和開發(fā)人員的編程經(jīng)驗。
相關(guān)標簽搜索:AutoCAD二次開發(fā)工具綜述 AutoCAD培訓(xùn) AutoCAD培訓(xùn)課程 AutoCAD圖紙設(shè)計 AutoCAD在線視頻 AutoCAD技術(shù)學(xué)習教程 AutoCAD軟件教程 AutoCAD資料下載 Fluent、CFX流體分析 HFSS電磁分析 Ansys培訓(xùn) Abaqus培訓(xùn) Autoform培訓(xùn)