CAD二次開發(fā),有很多不同層次的語言和庫可供選擇。 x2+%.$'
l'T3RC,\
首先是VisualLisp和AutoLisp。Lisp是一門歷史悠久的函數(shù)式編程語言,很多概念和C這種過程式語言不一樣,據說他在人工智能等方面有廣泛的應用。 0 } uEM_a
Epsc2TuH7
CAD引入了這種語言,給他添加相應的函數(shù)庫,就成了命令行使用的AutoLisp。在此基礎上再增加關于對話框和窗口界面的庫,就是VisualLisp,簡稱VL。VL在CAD中可以視為CAD命令的整合,是腳本語言,而且由CAD程序提供了編寫環(huán)境。因此上手相當容易,便于編寫,調試也很方便。 fb[f >1|
c.m8~@O5+
不過由于是腳本語言,就有兩大缺陷。第一是速度,當程序規(guī)模很大或是操作的對象數(shù)量過多時,你會明顯感覺到遲鈍。第二是功能。如果有什么功能是命令本身做不到的,那VL也做不到。譬如關于自定義對象、內存操作、數(shù)據傳遞之類,往往要通過別的方法解決。所以我個人認為Lisp適用于把現(xiàn)有命令組合成一個新命令來使用,尤其是存在大量重復操作的時候,用來做批處理非常好。唯一讓人感到不適的是,由于Lisp語言本身的語法要使用大量的圓括弧,當嵌套層次較深時,往往會在括弧的配對上發(fā)生問題。 k$?zh$
HcwqVU
第二大類是使用ActiveX和VB。ActiveX是Microsoft提出的一組使用COM(Component Object Model,部件對象模型)使得軟件部件在網絡環(huán)境中進行交互的技術集。ACAD使用Acitvex把數(shù)據傳送給ActiveX程序,程序處理后再傳回ACAD。這個過程有點像瀏覽器瀏覽動態(tài)網站。AcitveX與具體的編程語言無關,因此理論上說可以用任何一種支持他的語言來編寫,但通常大家選擇VB語言。VBA是VB的特殊形式,他將VB植入到應用程序中。ACAD包含的VBA能夠和CAD共享地址空間,而獨立的VB則需要通過接口完成。這種方法在編寫上比Lisp復雜,調試也困難。但速度快,功能更強勁。但是在某些對速度要求相當高的運算和涉及CAD內部的應用上仍然會顯得力不從心。對于熟悉VB語言又不想學習Lisp奇怪語法的開發(fā)者來說,這是不錯的選擇。 1 *'SP6g
K.G}*uy
此外,從目前的趨勢來看,AutoDesk有全面轉到.net平臺的趨勢,ActiveX和VB看來也將會被他的繼任者取代,似乎是VB.net/C#和ObjectARX Managed wrapper classes的組合,具體情況觀望中。 sL]KBux
p't>'?UH|
第三大類就是ADS ARX 和ObjectARX。ADS是AutoDesk從ACAD R11開始提供的C編程環(huán)境。它具有C的一切優(yōu)點,又能操作CAD。但他和ActiveX類似是通過管道通訊的。ARX(AutoCAD Runtime eXtension)是在ADS基礎上發(fā)展的面向對象的環(huán)境,使用C++語言。最終ARX進化為ObjectARX,他完全面向對象,并且是以dll(動態(tài)鏈接庫)的形式共享CAD的地址空間。由于先前的ARX已被包含為子集,人們也就簡稱ObjectARX為ARX。在CAD2006以前,只能使用C++語言和VC編譯器來生成ObjectARX程序。但目前已經可以使用VB.net C# C++等語言配合VisualStudio.net編譯器來生成ARX程序了。 Y!* \=h6h
-m)N~>{qS
用ARX所編出的程序,在載入后就與ACAD在同一代碼區(qū),共享全部數(shù)據區(qū),能夠直接對CAD內部的數(shù)據做任何的操作,因此具有極高的執(zhí)行效率和強大的功能。即使AutoCAD系列軟件自身,在編制完成了程序的基本功能之后,其他大量的內部命令其實也是用ARX實現(xiàn)的。你可以通過察看安裝好的CAD程序目錄中的那些數(shù)目眾多的arx文件來領會這一點。這就充分說明了ARX的彪悍,不需要再舉例子。 Zp]{e6J
6j@3C`Yd
天上不會掉餡餅,這個方式的代價就是難度提高了。首先C++語言本身就很復雜(VB.net和C#也不方便到哪里去),再配上復雜度不相上下的ObjectARX庫,如果要寫出切實可用的程序,還要深入了解CAD本身的結構。即使是開發(fā)很小的功能,也要有很多的工作要做。調試的工作,需要啟動VC和CAD這兩個大家伙,數(shù)據量大的時候會讓你發(fā)狂的。豐厚的回報還有高風險相伴,由于已經和CAD融為一體,ARX程序的錯誤會直接影響到CAD。象內存泄漏這種常見而又高危的情況,很有可能會把CAD直接搞垮。所以對于程序的安全有著更高的要求。 i>i@r ;:|
lDd+.44V:
除了語言、功能、編寫和調試的難度之外,這三種方式還有CAD版本匹配的問題。Lisp程序的適合度最好,即使是為AutoCAD r12開發(fā)的程序,在CAD2007中仍然能夠使用。而ARX則正相反,為CAD2002編寫的程序就已經不能在2004下運行了。為舊版CAD編寫的ARX程序的源代碼可以不需要修改或修改較少,但必須連結新版本的ARX庫重新編譯,才能被新版本載入運行。而且,不同版本的ARX庫還指定了不同版本的編譯器。譬如,CAD2000/2002版應使用VC6,CAD2004/2005就需要使用VC.net 2002,而CAD2007則需要VC.net 2005。而VB則介于這兩者之間。這個問題往往會把新手搞糊涂,必須參閱相關開發(fā)文檔。 fgYdKv8
~|kre:j9
開發(fā)中使用什么語言,并不完全決定于我們。規(guī)模、資金、時間甚至用戶的習慣才是考慮的關鍵。大型系統(tǒng)往往綜合運用這三種方式,天正軟件就是一個典型。我個人建議嘗試搞CAD二次開發(fā)的人都該先好好看天正的那些東西。