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

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

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

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

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

   AutoLISP語(yǔ)言最典型的應(yīng)用之一是實(shí)現(xiàn)參數(shù)化繪圖程序設(shè)計(jì),包括尺寸驅(qū)動(dòng)程序和鼠標(biāo)拖動(dòng)程序等。另一個(gè)典型應(yīng)用就是驅(qū)動(dòng)AutoCAD提供PDB模塊構(gòu)成DCL(Dialog Control Language)文件,創(chuàng)建自己的對(duì)話框。

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

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

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

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

    1.Visual LISP(VLISP)

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

   2.ARX

   ARX(AutoCAD Runtime eXtension)是AutoCAD R13之后推出的一個(gè)以C++語(yǔ)言為基礎(chǔ)的面向?qū)ο蟮拈_發(fā)環(huán)境和應(yīng)用程序接口。ARX程序本質(zhì)上為Windows動(dòng)態(tài)鏈接庫(kù)(DLL)程序,與AutoCAD共享地址空間,直接調(diào)用AutoCAD的核心函數(shù),可直接訪問(wèn)AutoCAD數(shù)據(jù)庫(kù)的核心數(shù)據(jù)結(jié)構(gòu)和代碼,以便能夠在運(yùn)行期間擴(kuò)展AutoCAD固有的類及其功能,創(chuàng)建能夠全面享受AutoCAD固有命令特權(quán)的新命令。ARX程序與AutoCAD、Windows之間均采用Windows消息傳遞機(jī)制直接通訊。

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

   ObjectARX應(yīng)用程序以C++為基本開發(fā)語(yǔ)言,具有面向?qū)ο缶幊谭绞降臄?shù)據(jù)可封裝性、可繼承性及多態(tài)性的特點(diǎn),用其開發(fā)的CAD軟件具有模塊性好、獨(dú)立性強(qiáng)、連接簡(jiǎn)單、使用方便、內(nèi)部功能高效實(shí)現(xiàn)以及代碼可重用性強(qiáng)等特點(diǎn),并且支持MFC基本類庫(kù),能簡(jiǎn)潔高效地實(shí)現(xiàn)許多復(fù)雜功能。
   這里順便提一下ADSRX。AutoCAD R14的開發(fā)環(huán)境ADSRX是ARX的一個(gè)子集,它等效于ADS。使用ADSRX,能夠用C語(yǔ)言編寫基于AutoCAD的程序,也能很方便地將ADS程序移植為ARX程序。

     圖3比較了AutoLISP、ADS、ADSRX和ARX的關(guān)于速度、暴露性、功能和要求使用每個(gè)API的編程經(jīng)驗(yàn)等方面的編程接口!氨┞缎浴眳(shù)顯示了用戶編程錯(cuò)誤的可能嚴(yán)重性。盡管ARX接口是四個(gè)API中最強(qiáng)有力的,它也具有產(chǎn)生嚴(yán)重編程錯(cuò)誤的最大潛在性,如破壞AutoCAD數(shù)據(jù)結(jié)構(gòu)等。其它編程環(huán)境要求較少的編程經(jīng)驗(yàn),但提供的功能和范圍也較小。
          
        圖3 AutoLisp、ADS和ARX的系統(tǒng)比較

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

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

    ActiveX Automation是一套微軟標(biāo)準(zhǔn),以前稱為OLE Automation技術(shù)。該標(biāo)準(zhǔn)允許通過(guò)外顯的對(duì)象由一個(gè)Windows應(yīng)用程序控制另一個(gè)Windows應(yīng)用程序,這也是面向?qū)ο缶幊碳夹g(shù)的精髓所在。AutoCAD從R14開始增加了作為ActiveX Automation服務(wù)器應(yīng)用程序的功能,使得許多面向?qū)ο缶幾g語(yǔ)言和應(yīng)用程序可以通過(guò)ActiveX與AutoCAD進(jìn)行通信,并操縱AutoCAD的許多功能,如圖4所示。
      
         圖4 ActiveX在開發(fā)語(yǔ)言與AutoCAD之間所起的作用

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

    ActiveX Automation技術(shù)的完全面向?qū)ο蠡幊痰奶攸c(diǎn),使其開發(fā)環(huán)境具備了強(qiáng)大的開發(fā)能力和簡(jiǎn)單易用的優(yōu)良特點(diǎn),開發(fā)工具的選擇也具有很大的靈活性。所以,利用ActiveX Automation技術(shù),是極具潛力的一種開發(fā)手段。

       四、結(jié)束語(yǔ)

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

民眾工作室.制作      版權(quán)所有