你當前的位置>>主頁>>AutoCAD>>AutoCAD二次開發(fā)
 
            AutoCAD二次開發(fā)工具綜述
 

    AutoCAD是目前微機上應用最為廣泛的通用交互式計算機輔助繪圖與設計軟件包。AutoCAD的強大生命力在于它的通用性、多種工業(yè)標準和開放的體系結構。其通用性使得它在機械、電子、航空、船舶、建筑、服裝等領域得到了極為廣泛的應用。但是,不同的行業(yè)標準使得各領域在使用AutoCAD的過程中均需根據自身特點進行定制或開發(fā)。Autodesk公司為滿足廣大用戶的需求,自AutoCAD v2.18版至AutoCAD 2000的短短十幾年間,就相繼推出了三代二次開發(fā)工具,如圖1所示?梢哉f,AutoCAD的通用性為其二次開發(fā)提供了必要條件,而AutoCAD開放的體系結構則使其二次開發(fā)成為可能。
   
                                           圖1 AutoCAD二次開發(fā)工具的演變

     下面對AutoCAD的三代開發(fā)工具進行淺析。

    一、第一代開發(fā)工具——AutoLISP

    AutoLISP是1986年隨AutoCAD v2.18提供的二次開發(fā)工具。它是一種人工智能語言,是嵌入AutoCAD內部的COMMON LISP的一個子集。在AutoCAD的二次開發(fā)工具中,它是唯一的一種解釋型語言。使用AutoLISP可直接調用幾乎所有的AutoCAD命令。

   AutoLISP語言最典型的應用之一是實現參數化繪圖程序設計,包括尺寸驅動程序和鼠標拖動程序等。另一個典型應用就是驅動AutoCAD提供PDB模塊構成DCL(Dialog Control Language)文件,創(chuàng)建自己的對話框。

   AutoLISP具有以下優(yōu)點:(1)語言規(guī)則十分簡單,易學易用;(2)直接針對AutoCAD,易于交互;(3)解釋執(zhí)行,立竿見影。
   AutoLISP的缺點是:(1)功能單一,綜合處理能力差;(2)解釋執(zhí)行,程序運行速度慢;(3)缺乏很好的保護機制,源程序保密性差;(4)LISP用表來描述一切,并不能很好地反映現實世界和過程,跟人的思維方式也不一致;(5)不能直接訪問硬件設備、進行二進制文件的讀寫。
   AutoLISP的這些特點,使其僅適合于有能力的終端用戶完成一些自己的開發(fā)任務。

     二、第二代開發(fā)工具——ADS

   ADS(AutoCAD Development System)是AutoCAD R11開始支持的一種基于C語言的靈活的開發(fā)環(huán)境。ADS可直接利用用戶熟悉的C編譯器,將應用程序編譯成可執(zhí)行文件后在AutoCAD環(huán)境下運行,從而既利用了AutoCAD環(huán)境的強大功能,又利用了C語言的結構化編程、運行效率高的優(yōu)勢。
   與AutoLISP 相比,ADS優(yōu)越之處在于:(1)具備錯綜復雜的大規(guī)模處理能力;(2)編譯成機器代碼后執(zhí)行速度快;(3)編譯時可以檢查出程序設計語言的邏輯錯誤;(4)程序源代碼的可讀性好于AutoLISP。
    而其不便之處在于:(1)C語言比LISP語言難于掌握和熟練應用;(2)ADS程序的隱藏錯誤往往導致AutoCAD,乃至操作系統(tǒng)的崩潰;(3)需要編譯才能運行,不易見到代碼的效果;(4)同樣功能,ADS程序源代碼比AutoLISP代碼長很多。

      三、第三代開發(fā)工具——Visual LISP,ARX及基于ActiveX Automation技術的VBA等

    1.Visual LISP(VLISP)

  VLISP是AutoLISP的換代產品。它與AutoLISP完全兼容,并提供它所有的功能,是新一代的AutoCAD LISP語言。VLISP對語言進行了擴展,可以通過Microsoft ActiveX Automation接口與對象交互。同時,通過實現反應器函數,還擴展了AutoLISP響應事件的能力。作為開發(fā)工具,VLISP提供了一個完整的集成開發(fā)環(huán)境(IDE),包括編譯器、調試器和其他工具,可以提高二次開發(fā)的效率 。另外,VLISP還提供了工具用于發(fā)布獨立的應用程序。

   2.ARX

   ARX(AutoCAD Runtime eXtension)是AutoCAD R13之后推出的一個以C++語言為基礎的面向對象的開發(fā)環(huán)境和應用程序接口。ARX程序本質上為Windows動態(tài)鏈接庫(DLL)程序,與AutoCAD共享地址空間,直接調用AutoCAD的核心函數,可直接訪問AutoCAD數據庫的核心數據結構和代碼,以便能夠在運行期間擴展AutoCAD固有的類及其功能,創(chuàng)建能夠全面享受AutoCAD固有命令特權的新命令。ARX程序與AutoCAD、Windows之間均采用Windows消息傳遞機制直接通訊。

    AutoLISP、ADS、ARX都是AutoCAD提供的內嵌式編程語言。AutoLISP和ADS都是通過內部進程通訊(IPC)來和AutoCAD通訊,它們與AutoCAD是相互分離的過程,而ARX以DLL形式與AutoCAD共享地址空間,如圖2所示。因此,與前兩者相比,其速度更快、運行更穩(wěn)定、更簡單。由于是在Windows及VC++編程環(huán)境里運行,所以,對開發(fā)者的編程能力要求較高。
          
       圖2 ARX、ADS、AutoLisp與AutoCAD的關系

   ObjectARX應用程序以C++為基本開發(fā)語言,具有面向對象編程方式的數據可封裝性、可繼承性及多態(tài)性的特點,用其開發(fā)的CAD軟件具有模塊性好、獨立性強、連接簡單、使用方便、內部功能高效實現以及代碼可重用性強等特點,并且支持MFC基本類庫,能簡潔高效地實現許多復雜功能。
   這里順便提一下ADSRX。AutoCAD R14的開發(fā)環(huán)境ADSRX是ARX的一個子集,它等效于ADS。使用ADSRX,能夠用C語言編寫基于AutoCAD的程序,也能很方便地將ADS程序移植為ARX程序。

     圖3比較了AutoLISP、ADS、ADSRX和ARX的關于速度、暴露性、功能和要求使用每個API的編程經驗等方面的編程接口。“暴露性”參數顯示了用戶編程錯誤的可能嚴重性。盡管ARX接口是四個API中最強有力的,它也具有產生嚴重編程錯誤的最大潛在性,如破壞AutoCAD數據結構等。其它編程環(huán)境要求較少的編程經驗,但提供的功能和范圍也較小。
          
        圖3 AutoLisp、ADS和ARX的系統(tǒng)比較

     可以說,AutoLISP著眼于應用程序的交互性,ADS C/C++著眼于應用程序的綜合性,而ARX則著眼于應用程序的智能性。

     3.基于ActiveX Automation技術的VBA等開發(fā)工具

    ActiveX Automation是一套微軟標準,以前稱為OLE Automation技術。該標準允許通過外顯的對象由一個Windows應用程序控制另一個Windows應用程序,這也是面向對象編程技術的精髓所在。AutoCAD從R14開始增加了作為ActiveX Automation服務器應用程序的功能,使得許多面向對象編譯語言和應用程序可以通過ActiveX與AutoCAD進行通信,并操縱AutoCAD的許多功能,如圖4所示。
      
         圖4 ActiveX在開發(fā)語言與AutoCAD之間所起的作用

   ActiveX Automation服務器應用程序是通過自身對象的屬性、方法和事件實現其功能。對象是服務器應用程序簡單而抽象的代表。不管是用VB、VC、OFFICE VBA等從外部開發(fā),還是用AutoCAD VBA從內部對AutoCAD進行二次開發(fā),都是通過調用AutoCAD的對象體系結構來進行的。AutoCAD 2000 ActiveX Automation技術將AutoCAD 2000的各種功能封裝在AutoCAD ActiveX對象中,供編程使用。AutoCAD 2000中提供的所有對象組成一個樹形結構,如圖5所示,最高層是Application對象,其他對象都是它的后代。為了得到一個特定的對象,必須從Application對象對其子孫進行遍歷,直到找到該特定的對象。
       
                圖5 AutoCAD對象模型

    ActiveX Automation技術的完全面向對象化編程的特點,使其開發(fā)環(huán)境具備了強大的開發(fā)能力和簡單易用的優(yōu)良特點,開發(fā)工具的選擇也具有很大的靈活性。所以,利用ActiveX Automation技術,是極具潛力的一種開發(fā)手段。

       四、結束語

    以上對AutoCAD的三代開發(fā)工具分別作了簡要介紹。目前,第一代的AutoLISP已能被第三代的VLISP完全替代,第二代的ADS在AutoCAD 2000中已不再支持,所以,第三代開發(fā)工具將成為今后AutoCAD二次開發(fā)的必然選擇。而在第三代工具中具體選擇哪一種,筆者認為,主要還應根據用戶應用程序的需要和開發(fā)人員的編程經驗

民眾工作室.制作      版權所有