AutoCAD是在微型計算機上使用最廣泛的通用交互式計算機輔助繪圖和設計軟件包。AutoCAD強大的生命力在於它的通用性、多種工業標準和開放的體系結構。其通用性使其廣泛應用於機械、電子、航空、船舶、建築、服裝等領域。但是不同的行業標準使得各個領域都需要根據自己的特點定制或開發AutoCAD。為了滿足用戶的需求,Autodesk公司先後推出了從AutoCAD v2.18到AutoCAD 2000的三代二次開發工具,如圖1所示。可以說,AutoCAD的通用性為其二次開發提供了必要的條件,而AutoCAD的開放性架構使其二次開發成為可能。
下面對三代AutoCAD開發工具進行分析。
壹、第壹代開發工具——AutoLISP
AutoLISP是AutoCAD V2.1986提供的二次開發工具。它是壹種人工智能語言,是嵌入在AutoCAD中的COMMON LISP的子集。在AutoCAD的二次開發工具中,它是唯壹的解釋性語言。使用AutoLISP,可以直接調用幾乎所有的AutoCAD命令。
AutoLISP語言最典型的應用之壹就是實現參數化繪圖程序設計,包括尺寸驅動和鼠標拖動程序。另壹個典型的應用是驅動AutoCAD提供PDB模塊形成DCL(對話控制語言)文件來創建自己的對話框。
AutoLISP有以下優點:(1)語言規則非常簡單,易學易用;(2)直接針對AutoCAD,易於交互;(3)解釋落實,立竿見影。
AutoLISP的缺點是:(1)功能單壹,綜合處理能力差;(2)解釋和執行,程序運行緩慢;(3)缺乏良好的保護機制,源程序保密性差;(4)LISP用表格來描述壹切,不能很好地反映現實世界和過程,與人的思維方式不符;(5)不能直接訪問硬件設備,讀寫二進制文件。
AutoLISP的這些特性使得它只適合有能力的最終用戶來完成他們自己的開發任務。
二、第二代開發工具——ADS
ADS(AutoCAD開發系統)是AutoCAD R11開始支持的基於C語言的靈活開發環境。ADS可以直接使用用戶熟悉的C編譯器將應用程序編譯成可執行文件,在AutoCAD環境下運行,既利用了AutoCAD環境的強大功能,又利用了C語言的結構化編程和運行效率高的優點。
與AutoLISP相比,ADS具有以下優勢:(1)具有錯綜復雜的大規模處理能力;(2)編譯成機器碼後執行速度快;(3)可以在編譯期間檢測編程語言中的邏輯錯誤;(4)程序源代碼的可讀性優於AutoLISP。但其不便之處在於:(1)C語言比LISP語言更難掌握和熟練運用;(2)2)ADS程序的隱藏錯誤往往導致AutoCAD甚至操作系統崩潰;(3)需要編譯運行,不容易看到代碼的效果;(4)同樣功能的ADS程序的源代碼比AutoLISP代碼長得多。
第三,第三代開發工具——Visual LISP、基於ActiveX自動化技術的ARX和VBA等。
1.Visual LISP(VLISP)
VLISP是AutoLISP的替代產品。它與AutoLISP完全兼容,並提供其所有功能。它是新壹代的AutoCAD LISP語言。VLISP擴展了語言,可以通過Microsoft ActiveX Automation接口與對象進行交互。同時,通過實現reactor函數,AutoLISP響應事件的能力也得到了擴展。作為開發工具,VLISP提供了完整的集成開發環境(IDE),包括編譯器、調試器等工具,可以提高二次開發的效率。此外,VLISP還提供發布獨立應用的工具。
2.ARX
ARX(AutoCAD Runtime eXtension)是繼AutoCAD R13之後,基於C++語言的面向對象開發環境和應用程序接口。ARX程序本質上是壹個Windows動態鏈接庫(DLL)程序,它與AutoCAD***共享地址空間,直接調用AutoCAD的核心函數,可以直接訪問AutoCAD數據庫的核心數據結構和代碼,從而擴展AutoCAD固有的類和函數,創建新的可以充分享受AutoCAD固有命令特權的命令。ARX程序通過Windows消息機制直接與AutoCAD和Windows通信。
AutoLISP、ADS和ARX都是AutoCAD提供的嵌入式編程語言。AutoLISP和ADS通過內部進程通信(IPC)與AutoCAD通信,它們與AutoCAD是分離的,而ARX以DLL的形式與AutoCAD***共享地址空間,如圖2所示。所以相比前兩者,更快,更穩定,更簡單。因為運行在Windows和VC++編程環境下,所以對開發人員的編程能力要求較高。
ObjectARX應用以C++為基礎開發語言,具有面向對象編程中數據封裝、繼承和多態的特點。用ObjectARX開發的CAD軟件具有模塊化好、獨立性強、連接簡單、使用方便、內部功能實現高效、代碼重用性強等特點,支持MFC基礎類庫,可以簡潔高效地實現許多復雜的功能。
對了,這裏提到了ADSRX。AutoCAD R14的開發環境ADSRX是ARX的子集,相當於ADS。使用ADSRX,可以用C語言編寫基於AutoCAD的程序,並且可以很容易地將ADS程序移植到ARX程序中。
圖3比較了AutoLISP、ADS、ADSRX和ARX的編程接口在速度、曝光度、功能和使用每個API所需的編程體驗方面的差異。暴露參數顯示用戶編程錯誤的可能嚴重性。雖然ARX接口是四個API中最強大的,但它也最有可能產生嚴重的編程錯誤,如破壞AutoCAD數據結構。其他編程環境需要的編程經驗較少,但提供的功能和範圍較小。
可以說,AutoLISP側重於應用的交互性,ADS C/C++側重於應用的全面性,ARX側重於應用的智能性。
3.VBA等基於ActiveX自動化技術的開發工具。
ActiveX Automation是壹組Microsoft標準,以前稱為OLE Automation技術。這個標準允許壹個Windows應用程序通過顯式對象控制另壹個Windows應用程序,這也是面向對象編程技術的精髓。從R14開始,AutoCAD增加了作為ActiveX Automation server應用程序的功能,使許多面向對象的編譯語言和應用程序能夠通過ActiveX與AutoCAD通信,操縱AutoCAD的許多功能,如圖4所示。
ActiveX Automation server應用程序通過自己的對象屬性、方法和事件來顯示其功能。對象是服務器應用程序的簡單抽象表示。是否使用VB,VC,OFFICE VBA等。從外部對AutoCAD進行二次開發,或者從內部對AutoCAD VBA進行二次開發,都是通過調用AutoCAD的對象架構來進行的。AutoCAD 2000 ActiveX自動化技術將AutoCAD 2000的各種功能封裝在AutoCAD ActiveX對象中進行編程。AutoCAD 2000中提供的所有對象形成壹個樹形結構,如圖5所示,最高層是應用程序對象,其他對象是它的後代。為了獲得特定對象,必須從應用程序對象開始遍歷其後代,直到找到該特定對象。
ActiveX Automation技術完全面向對象的編程特點使其開發環境具有很強的開發能力和簡單易用的優良特性,開發工具的選擇也非常靈活。因此,使用ActiveX自動化技術是壹種潛在的開發工具。
四。結束語
分別對以上三代AutoCAD開發工具進行簡單介紹。可見AutoCAD的二次開發工具真的是“長江後浪推前浪,壹代比壹代強”。目前第壹代AutoLISP完全可以被第三代VLISP替代;AutoCAD 2000不再支持第二代ADS。因此,第三代開發工具將成為未來AutoCAD二次開發的必然選擇。至於第三代工具的具體選擇,筆者認為應該主要根據用戶的應用需求和開發者的編程經驗來決定。
根據作者的觀點,就目前AutoCAD中的情況來看:
1)Visual LISP
適合描述人機交互的過程,擅長編寫模擬設計師想法的專業設計程序。具有接收各種用戶輸入、錯誤識別和恢復的優秀功能,尤其擅長發揮CAGD功能的巨大作用,充分利用交互操作技巧。相比之下,程序運行模式的風格最多。相比之下,不同版本的程序兼容性最好,甚至可以直接運行。
這種編程可以找到很棒的資源,包括書籍、程序實例、互聯網上的資源和技術交流。
以前AutoLISP最大的缺點就是不會編譯。在更大的包中沒有“項目”的概念,這無疑給大型程序的設計帶來了困難。現在,這些問題已由VLISP圓滿解決。舊的AutoLISP程序編譯成VLX的效率會比解釋運算的情況下提高5 ~ 8倍。
2)廣告
以前是AutoLISP之後的壹種編程模式。雖然解釋運行了R14之前的AutoLISP程序,但還是比ADS程序快,因為ADS實際上是用AutoLISP與AutoCAD交互的。從AutoCAD R14開始,Autodesk不再支持和開發ADS編程模式,而是增加了Visual LISP來進壹步提高AutoLISP的整體性能,並用ObjectARX代替ADS。
3)VBA
從R14開始,就嵌入到AutoCAD中。根據微軟的規則,VBA是Windows下的每個應用軟件都必須具有的功能。
它的優點是可以方便地使用Windows系統資源,使AutoCAD可以方便地與Windows下的其他應用程序進行交互。VBA對話框的設計能力比DCL強很多,多文件環境下的應用程序也提供了比VLISP更多的支持。但由於它使用ActiveX與AutoCAD交互,程序設計較為復雜。它將成為與不太好學的VLISP並列的另壹種專業用戶編程語言。因為VBA不是VB,所以熟悉VB的人在使用VBA進行AutoCAD編程時需要學習很多東西,但是VBA的規則完全類似於VB。
在設計過程仿真類的編程上,VBA顯然不如AutoLISP流暢,畢竟AutoLISP是脫胎於人工智能語言的。另外,如果VBA作者因為“疏忽”未能提供相應的方法和屬性,舊的AutoLISP可以訪問對象數據並激活壹些AutoCAD對話框,而VBA不能。VBA雖然不是編譯運行,但是數據結構和程序編寫都和ARX壹樣嚴格,對於工程師來說需要壹個適應的過程。妳只能按照VBA的可能性來組織自己的數據,而不能像VLISP那樣按照專業的設計要求來創建數據結構。
明顯的缺點是:
在VBA,妳不能在VLISP中隨心所欲地使用AutoCAD命令。只能像腳本文件壹樣以字符串的形式向AutoCAD命令行發送壹串響應,這個字符串的內容還得在自己的程序中生成和轉換。這樣,許多互動技巧在VBA就不能直接借用了。
VBA以對象作為數據處理的基本單位,這是VLISP特有的CAGD編程技術,但在VBA無法實現。因此,Trim、Extend和Dim-Diameter等命令無法真正實現。為了完成這樣的運算,相關數據只能在程序中計算。這樣,程序設計就不能充分利用AutoCAD的操作技巧,勢必復雜而繁瑣。有壹個優秀的AutoCAD數據庫,卻發揮不出它的作用;原本可以由AutoCAD完成的動作,應該通過編程來實現。這是VBA最大的缺點。
VBA的另壹個問題是它不能被編譯。源程序總是以壹種相當容易理解的方式暴露給最終用戶。用戶的誤操作很容易使曾經正常的應用程序出錯甚至崩潰。這正是老AutoLISP的致命缺點。利用VLISP的包編譯功能,VBA打包後無法解決源代碼加密的問題。目前,VBA的源代碼加密只使用密碼。
VBA和Visual LISP之間只有相對簡單的內部數據通道,比如處理簡單的點表。在這方面,VBA的作者似乎並不太了解AutoCAD的特殊功能,也不知道用戶將如何使用AutoCAD進行自己的專業設計。
VBA的功能可以用VC++/ARX程序來擴展,但是相當復雜,壹般工程師很難掌握。VBA的完善和擴展只能等待歐特克的工作成果。
4)ObjectARX
在Autodesk內部或增值軟件開發人員中使用。由於ARX使用Visual C++作為基礎編程語言,其效率、數據處理和軟硬件控制能力都是最好的,是多繪圖環境的唯壹編程方法。這是壹種從根本上擴展VLISP/VBA的編程方法。
而ARX和VBA在AutoCAD命令交互和對象數據庫訪問方面並沒有實質性的區別,也就是說同樣難以借用AutoCAD強大的CAGD功能和交互操作技巧。另外,為了真正發揮這種開發模式的作用,對程序員的要求(計算機專業知識、軟件專業知識等。)也高,程序運行風險更大。要求程序做好各種數據的測試,設計好自己在各種情況下的錯誤處理和恢復,否則ARX程序的崩潰往往會和AutoCAD甚至操作系統壹起崩潰。因為ARX技術對於大多數開發者來說都是壹個工具,所以通過壹般的交流並不容易獲得真正有用的編程技巧。可見這種開發模式並不適合在專業設計工程師中推廣。
粗略地說:
ARX/VBA的特點是以AutoCAD的對象、方法和屬性為基本操作數據,適合“構造”AutoCAD的功能。其實壹個對AutoCAD操作不熟練的人,只要充分了解AutoCAD的對象模型結構,就可以編寫壹個程序來控制AutoCAD。也就是說,這種編程模式並不太取決於程序員對AutoCAD操作的熟悉程度。換句話說,AutoCAD操作的熟練程度對ARX/VBA編程的幫助並不明顯。
而VLISP則靈活、充分地利用了AutoCAD的現有功能,適合“組合使用”AutoCAD的現有功能。這樣AutoCAD操作的次數就受到編程的影響,明顯影響編程的結果。也就是說,這種編程模式將充分利用在編程中使用AutoCAD的經驗和技巧。當然,用VLISP也可以編寫符合ARX/VBA ActiveX模式的程序。這本書裏有很多這樣的例子。但這不是VLISP的專長。
作為壹個CAD系統,它通常由三個層次的軟件組成:
1)設計軟件的底層平臺:提供接口、環境、核心算法、數據庫等基礎設施。現在我們在AutoCAD平臺上工作。
2)設計支持軟件,提供與設計需求相關的專業支持軟件:國家標準庫、通用設計工具、設計手冊等。這些軟件大多由增值軟件開發商完成。
3)專業設計軟件,提供範圍窄、深度大的專業設計自動化或輔助系統,如發動機裝配工具設計、膠印機控制凸輪設計、組合機床主軸箱設計等。
實際上,CAD系統能否真正體現其存在價值,是上述專業設計軟件最明顯的標誌。這些軟件真正起到了“設計”的作用。實踐證明,它真的可以在高度專業化的設計中取代工程師!
對於1)和2),不需要太懂設計,但對軟件有較多了解的人都可以寫。當然要經過現場工程師的評估,防止被寫成“學院派”的設計支持軟件。對於3),只能由設計師直接編寫,這是壹個小話題,幾乎是開發者永遠的“盲點”。因為專業性太強,知識結構太偏,壹個工科大學畢業,在這個行業沒有做過幾個真實設計的人,去理解壹個專業設計師的敘述,要求他完成這個程序,太過分了。
可見,壹定有壹種開發方法是專業設計人員能夠掌握的,並且能夠發揮他們的長處(熟悉設計和交互操作),避免他們的短處(軟件知識較少)。這是AutoLISP。
AutoLISP程序中幾乎可以引用AutoCAD的所有功能來實現圖形處理的自動化,尤其是對更深層次的應用~對象數據庫的操作。
借助Visual LISP,討論了操作AutoCAD的功能,只比ARX少了幾個功能:自定義AutoCAD對象,深入管理多個圖檔等等。從目前的情況來看,AutoLISP是AutoCAD中幾乎所有應用程序的“主管理器”,只有AutoLISP表達式可以添加到腳本文件、對話框程序、菜單,甚至這個繪圖中。發送命令的VBA程序,並可以直接在AutoCAD的命令行中響應幾乎所有的命令。
(5)其他財產
LISP是典型的結構化程序設計語言,AutoLISP是解釋和操作,源程序保密性差,海量數據復雜操作效率低,文件管理功能簡單。但可以在大部分源程序內容不變的情況下,用Visual LISP編譯成VLX包或FAS程序。經過這樣的處理後,AutoLISP程序將具有與ARX程序相同的高保密性,並且還將具有比解釋和操作程序高得多的運行效率。而且AutoLISP編程的復雜度和運行風險都比ARX低很多,程序死機後AutoCAD也很少死機。來源:/read-htm-tid-92949.html