當前位置: 首頁 > 新聞資(zī)訊 > autocad visual lisp程序開(kāi)發技術【正版好書(shū),下(xià)單速發】

autocad visual lisp程序開(kāi)發技術【正版好書(shū),下(xià)單速發】

發布時間:2024-03-20 15:26:45

  1. 如何在AutoCAD Visual Lisp編輯器中(zhōng)創建與編譯lisp程序
  2. cadlisp二次開(kāi)發實例?
  3. 在《軟件故事》中(zhōng)說Lisp想比FORTRAN是個巨大(dà)的進步。請問,Lisp比FORTRAN高級在哪

一(yī)、如何在AutoCAD Visual Lisp編輯器中(zhōng)創建與編譯lisp程序

打開(kāi)visual lisp編輯器有兩種方式:

1.autocad2008及之前的版本,在菜單欄“工(gōng)具(tools)"下(xià)面,選擇”autolisp"---->"visual

lisp編輯器"。(”autolisp"---->"導入應用"這個命令是用來加載autolisp腳本的)

2.autocad2009及之後的版本,在功能區的”管理“選項卡裏可以直接打開(kāi)visual lisp編輯器。

如何在autocad visual lisp編輯器中(zhōng)創建與編譯lisp程序

打開(kāi)visual lisp編輯器之後新建一(yī)個文件,并另存爲lisp源文件。然後就可以在編輯窗口裏輸你的代碼了。

代碼編輯并調試确認無錯誤後,就可以在autocad中(zhōng)使用了。

如何在autocad visual lisp編輯器中(zhōng)創建與編譯lisp程序

左邊的按鈕表示立即運行當前代碼,如果有錯誤就會提示出來,右邊按鈕是切換到cad窗口。

如果不需要再修改代碼了還可以将代碼進行編譯以加速運行。

如何在autocad visual lisp編輯器中(zhōng)創建與編譯lisp程序

根據向導一(yī)步步進行編譯很簡單的。

如果在其他cad圖形文件中(zhōng)需使用當前代碼文件或編譯後的文件,就按上面第一(yī)點的,或者在命令行輸入”ap",打開(kāi)導入應用的對話(huà)框。

如何在autocad visual lisp編輯器中(zhōng)創建與編譯lisp程序

1是用來臨時導入的,2是将程序加入cad的啓動組。

lisp解決重複性勞動問題

在設計和繪圖中(zhōng),你覺得都是簡單粗暴的重複性工(gōng)作,就可以考慮用autolisp來代替你做。

首先,autolisp也是一(yī)個程序設計語言,屬于common

lisp的子集,同時加入了很多自定義的函數。即然是一(yī)個程序語言,就是其他編程語言能做的,它也能做,隻是他的lisp語法跟一(yī)般的語言有些差另就是了,但是如果是一(yī)個沒有vb、c#、c++(對應于autocad的開(kāi)發方式分(fēn)别是vba,.net,objectarx)的基礎的人來說,autolisp是很簡單而且特别容易上手的一(yī)個語言。

作爲一(yī)個編程語言,autolisp能做的很多:

1、擴充autocad的原有命令。任何帶有c:前綴的autolisp函數,在autocad中(zhōng)都可以像"line" "circle"

"dim"等命令一(yī)樣使用。

2、編寫代碼直接根據國标圖庫要求來繪出一(yī)些常用圖庫标準件什麽的,或是代替人查找各種設計手冊中(zhōng)的相關數據并繼續使用。

3、進行參數化繪圖,對于一(yī)些不特别複雜(zá)的系統,提供窄範圍、大(dà)深度的專業設計自動化或者輔助系統,如發動機裝配工(gōng)具設計、縱使機主軸箱設計等。

4、dwg文件本質上是autocad在圖形生(shēng)成和編輯中(zhōng)使用的數據庫,可以将一(yī)些非圖形信息的數據(粗糙度,高度,厚度。。)等存于dwg文件中(zhōng)作

爲非圖形數據庫文件,然後利用lisp程序進行讀取等。

各種autocad二次開(kāi)發方式的比較:

由于 .net語言和c++的學習曲線比較陡峭,所以簡單易學的autolisp經常與vba進行對比。(當然如果有vb的基礎還是直接學vba好了。)

autolisp擅長建立新命令和産生(shēng)已有命令的連接。vba擅長執行包括在其他應用程序中(zhōng)的組件,如microsoft的excel和access。autolisp是基于表處理的編程體(tǐ)系,它允許程序員(yuán)随意地存儲和操作傳送信息,然而vba部件包括數據和對複雜(zá)情況的各種有效操作,這就是問題變得複雜(zá)的地方。

不過,在autocad2000開(kāi)始,autodesk公司就在autocad中(zhōng)加入了visual

lisp編輯器,引入了許多新函數擴充autolisp的功能,并支持activex對象的訪問方式,所以使用autolisp來與word\excel等程序進行交互也是變簡單了。

另外(wài),在創建帶gui圖形界面的應用程序上,vba當然是所見即所得的了,而autolisp是通過dcl文件來實現gui的(語法很簡單,但做不到所見即所得).這點是autolisp略遜一(yī)籌了。原文出自[

cad自學網 ] 轉載請保留原文鏈接:http://www.cadzxw.com/1873.html

二、cadlisp二次開(kāi)發實例?

autocad的二次開(kāi)發主要涉及以下(xià)内容:(1)編寫各種用戶自定義函數并形成若幹lisp、arx、vlx或ads文件,以及一(yī)些dcl文件。(2)建立符合自己要求的菜單文件,一(yī)般可在autocad原菜單文件内添加自己的内容,對于autocad2000版本還可增加部分(fēn)菜單文件,然後經交互方式加入到系統中(zhōng)去(qù)。(3)在系統的acad.lsp或類似文件中(zhōng)加入某些内容以便進行各種初始化操作,如在啓動時立即裝入一(yī)些文件等。(4)通過系統對話(huà)框設置某些路徑。這些操作在程序開(kāi)發成功後向其它autocad系統上安裝應用,特别是需要大(dà)批安裝時,需要進行很多文件檢索、内容增删、子目錄創建、文件拷貝、系統設置等繁瑣工(gōng)作,如能令上述工(gōng)作全部自動進行,使整個二次開(kāi)發程序在無人幹預的情況下(xià)嵌入系統,将大(dà)大(dà)提高工(gōng)作效率。

autocad榮登全球繪圖軟件的龍頭寶座,主要是因爲它具有開(kāi)放(fàng)的體(tǐ)系結構。它允許用戶和開(kāi)發者采用高級編程語言對其進行擴充和修改,即二次開(kāi)發,能最大(dà)限度地滿足用戶的特殊要求。autocad第一(yī)版于1982年11月由autodesk公司推出,目前大(dà)家廣泛使用的是autocad2000或2002,最新版本是autocad2004,其二次開(kāi)發語言及工(gōng)具也在不斷地湧現

1autolisp

autolisp的全名是listprocessinglanguage,她出現于1985年推出的autocadr2.18中(zhōng),是一(yī)種嵌入在autocad内部的編程語言,是lisp原版的一(yī)個子集,她一(yī)直是低版本autocad的首選編程語言。它是一(yī)種表處理語言,是被解釋執行的,任何一(yī)個語句鍵入後就能馬上執行,它對于交互式的程序開(kāi)發非常方便。其缺點是繼承了lisp語言的編程規則而導緻繁多的括号。

3ads

ads的全名是autocaddevelopmentsystem,它是autocad的c語言開(kāi)發系統,ads本質上是一(yī)組可以用c語言編寫autocad應用程序的頭文件和目标庫,它直接利用用戶熟悉的各種流行的c語言編譯器,将應用程序編譯成可執行的文件在autocad環境下(xià)運行,這種可以在autocad環境中(zhōng)直接運行的可執行文件叫做ads應用程序。ads由于其速度快,又(yòu)采用結構化的編程體(tǐ)系,因而很适合于高強度的數據處理,如二次開(kāi)發的機械設計cad、工(gōng)程分(fēn)析cad、建築結構cad、土木工(gōng)程cad、化學工(gōng)程cad、電(diàn)氣工(gōng)程cad等。

4objectarx

objectarx是一(yī)種嶄新的開(kāi)發autocad應用程序的工(gōng)具,她以c++爲編程語言,采用先進的面向對象的編程原理,提供可與autocad直接交互的開(kāi)發環境,能使用戶方便快捷地開(kāi)發出高效簡潔的autocad應用程序。objectarx并沒有包含在autocad中(zhōng),可在autodesk公司網站中(zhōng)去(qù)下(xià)載,其最新版本是objectarxforautocad2000,它能夠對autocad的所有事務進行完整的、先進的、面向對象的設計與開(kāi)發,并且開(kāi)發的應用程序速度更快、集成度更高、穩定性更強。objectarx從本質上講,是一(yī)種特定的c++編程環境,她包括一(yī)組動态鏈接庫(dll),這些庫與autocad在同一(yī)地址空間運行并能直接利用autocad核心數據結構和代碼,庫中(zhōng)包含一(yī)組通用工(gōng)具,使得二次開(kāi)發者可以充分(fēn)利用autocad的開(kāi)放(fàng)結構,直接訪問autocad數據庫結構、圖形系統以及cad幾何造型核心,以便能在運行期間實時擴展autocad的功能,創建能全面享受autocad固有命令的新命令。objectarx的核心是兩組關鍵的api,即acdb(autocad數據庫)和aced(autocad編譯器),另外(wài)還有其它的一(yī)些重要庫組件,如acrx(autocad實時擴展)、acgi(autocad圖形接口)、acge(autocad幾何庫)、adsrx(autocad開(kāi)發系統實時擴展)。objectarx還可以按需要加載應用程序;使用objectarx進行應用開(kāi)發還可以在同一(yī)水平上與windows系統集成,并與其它windows應用程序實現交互操作。

5visuallisp

visuallisp已經被完整地集成到autocad2000中(zhōng),她爲開(kāi)發者提供了嶄新的、增強的集成開(kāi)發環境,一(yī)改過去(qù)在autocad中(zhōng)内嵌atuolisp運行引擎的機制,這樣開(kāi)發者可以直接使用autocad中(zhōng)的對象和反應器,進行更底層的開(kāi)發。其特點爲自身是autocad2000中(zhōng)默認的代碼編輯工(gōng)具;用它開(kāi)發autolisp程序的時間被大(dà)大(dà)地縮短,原始代碼能被保密,以防盜版和被更改;能幫助大(dà)家使用activex對象及其事件;使用了流行的有色代碼編輯器和完善的調試工(gōng)具,使大(dà)家很容易創建和分(fēn)析lisp程序的運行情況。在visuallisp中(zhōng)新增了一(yī)些函數:如基于autolisp的activex/com自動化操作接口;用于執行基于autocad内部事件的lisp程序的對象反應器;新增了能夠對操作系統文件進行操作的函數。

6vba

vba即mcrosoftoffice中(zhōng)的visualbasicforapplications,它被集成到autocad2000中(zhōng)。vba爲開(kāi)發者提供了一(yī)種新的選擇,也爲用戶訪問autocad2000中(zhōng)豐富的技術框架打開(kāi)一(yī)條新的通道。vba和autocad2000中(zhōng)強大(dà)的activex自動化對象模型的結合,代表了一(yī)種新型的定制autocad的模式構架。通過vba,我(wǒ)們可以操作autocad,控制activex和其它一(yī)些應用程序,使之相互之間發生(shēng)互易活動。

三、在《軟件故事》中(zhōng)說Lisp想比FORTRAN是個巨大(dà)的進步。請問,Lisp比FORTRAN高級在哪

  一(yī)、

如果我(wǒ)們把流行的編程語言,以這樣的順序排列:java、perl、python、ruby。你會發現,排在越後面的語言,越像lisp。python模仿lisp,甚至把許多lisp黑客認爲屬于設計錯誤的功能,也一(yī)起模仿了。至于ruby,如果回到1975年,你聲稱它是一(yī)種lisp方言,沒有人會反對。編程語言現在的發展,不過剛剛趕上1958年lisp語言的水平。

二、

1958年,john mccarthy設計了lisp語言。我(wǒ)認爲,當前最新潮的編程語言,隻是實現了他在1958年的設想而已。

這怎麽可能呢?計算機技術的發展,不是日新月異嗎(ma)?1958年的技術,怎麽可能超過今天的水平呢?

讓我(wǒ)告訴你原因。

這是因爲john mccarthy本來沒打算把lisp設計成編程語言,至少不是我(wǒ)們現在意義上的編程語言。他的原意隻是想做一(yī)種理論演算,用更簡潔的方式定義圖靈機。

所以,爲什麽上個世紀50年代的編程語言,到現在還沒有過時?簡單說,因爲這種語言本質上不是一(yī)種技術,而是數學。數學是不會過時的。你不 應該把lisp語言與50年代的硬件聯系在一(yī)起,而是應該把它與快速排序(quicksort)算法進行類比。這種算法是1960年提出的,至今仍然是最 快的通用排序方法。

三、

fortran語言也是上個世紀50年代出現的,并且一(yī)直使用至今。它代表了語言設計的一(yī)種完全不同的方向。lisp是無意中(zhōng)從純理論發展 爲編程語言,而fortran從一(yī)開(kāi)始就是作爲編程語言設計出來的。但是,今天我(wǒ)們把lisp看成高級語言,而把fortran看成一(yī)種相當低層次的語 言。

1956年,fortran剛誕生(shēng)的時候,叫做fortran i,與今天的fortran語言差别極大(dà)。fortran i實際上是彙編語言加上數學,在某些方面,還不如今天的彙編語言強大(dà)。比如,它不支持子程序,隻有分(fēn)支跳轉結構(branch)。

lisp和fortran代表了編程語言發展的兩大(dà)方向。前者的基礎是數學,後者的基礎是硬件架構。從那時起,這兩大(dà)方向一(yī)直在互相靠攏。 lisp剛設計出來的時候,就很強大(dà),接下(xià)來的二十年,它提高了自己的運行速度。而那些所謂的主流語言,把更快的運行速度作爲設計的出發點,然後再用超過 四十年的時間,一(yī)步步變得更強大(dà)。

直到今天,最高級的主流語言,也隻是剛剛接近lisp的水平。雖然已經很接近了,但還是沒有lisp那樣強大(dà)。

四、

lisp語言誕生(shēng)的時候,就包含了9種新思想。其中(zhōng)一(yī)些我(wǒ)們今天已經習以爲常,另一(yī)些則剛剛在其他高級語言中(zhōng)出現,至今還有2種是lisp獨有的。按照被大(dà)衆接受的程度,這9種思想依次是:

1. 條件結構(即"if-then-else"結構)。現在大(dà)家都覺得這是理所當然的,但是fortran i就沒有這個結構,它隻有基于底層機器指令的goto結構。

2. 函數也是一(yī)種數據類型。在lisp語言中(zhōng),函數與整數或字符串一(yī)樣,也屬于數據類型的一(yī)種。它有自己的字面表示形式(literal representation),能夠儲存在變量中(zhōng),也能當作參數傳遞。一(yī)種數據類型應該有的功能,它都有。

3. 遞歸。lisp是第一(yī)種支持遞歸函數的高級語言。

4. 變量的動态類型。在lisp語言中(zhōng),所有變量實際上都是指針,所指向的值有類型之分(fēn),而變量本身沒有。複制變量就相當于複制指針,而不是複制它們指向的數據。

5. 垃圾回收機制。

6. 程序由表達式(expression)組成。lisp程序是一(yī)些表達式區塊的集合,每個表達式都返回一(yī)個值。這與fortran和大(dà)多數後來的語言都截然不同,它們的程序由表達式和語句(statement)組成。

區分(fēn)表達式和語句,在fortran i中(zhōng)是很自然的,因爲它不支持語句嵌套。所以,如果你需要用數學式子計算一(yī)個值,那就隻有用表達式返回這個值,沒有其他語法結構可用,因爲否則就無法處理這個值。

後來,新的編程語言支持區塊結構(block),這種限制當然也就不存在了。但是爲時已晚,表達式和語句的區分(fēn)已經根深蒂固。它從fortran擴散到algol語言,接着又(yòu)擴散到它們兩者的後繼語言。

7. 符号(symbol)類型。符号實際上是一(yī)種指針,指向儲存在哈希表中(zhōng)的字符串。所以,比較兩個符号是否相等,隻要看它們的指針是否一(yī)樣就行了,不用逐個字符地比較。

8. 代碼使用符号和常量組成的樹(shù)形表示法(notation)。

9. 無論什麽時候,整個語言都是可用的。lisp并不真正區分(fēn)讀取期、編譯期和運行期。你可以在讀取期編譯或運行代碼;也可以在編譯期讀取或運行代碼;還可以在運行期讀取或者編譯代碼。

在讀取期運行代碼,使得用戶可以重新調整(reprogram)lisp的語法;在編譯期運行代碼,則是lisp宏的工(gōng)作基礎;在運行期編 譯代碼,使得lisp可以在emacs這樣的程序中(zhōng),充當擴展語言(extension language);在運行期讀取代碼,使得程序之間可以用s-表達式(s-expression)通信,近來xml格式的出現使得這個概念被重新"發 明"出來了。

五、

lisp語言剛出現的時候,它的思想與其他編程語言大(dà)相徑庭。後者的設計思想主要由50年代後期的硬件決定。随着時間流逝,流行的編程語言不斷更新換代,語言設計思想逐漸向lisp靠攏。

思想1到思想5已經被廣泛接受,思想6開(kāi)始在主流編程語言中(zhōng)出現,思想7在python語言中(zhōng)有所實現,不過似乎沒有專用的語法。

思想8可能是最有意思的一(yī)點。它與思想9隻是由于偶然原因,才成爲lisp語言的一(yī)部分(fēn),因爲它們不屬于john mccarthy的原始構想,是由他的學生(shēng)steve russell自行添加的。它們從此使得lisp看上去(qù)很古怪,但也成爲了這種語言最獨一(yī)無二的特點。lisp古怪的形式,倒不是因爲它的語法很古怪,而 是因爲它根本沒有語法,程序直接以解析樹(shù)(parse tree)的形式表達出來。在其他語言中(zhōng),這種形式隻是經過解析在後台産生(shēng),但是lisp直接采用它作爲表達形式。它由列表構成,而列表則是lisp的基 本數據結構。

用一(yī)門語言自己的數據結構來表達該語言,這被證明是非常強大(dà)的功能。思想8和思想9,意味着你可以寫出一(yī)種能夠自己編程的程序。這可能聽(tīng)起來很怪異,但是對于lisp語言卻是再普通不過。最常用的做法就是使用宏。

術語"宏"在lisp語言中(zhōng),與其他語言中(zhōng)的意思不一(yī)樣。lisp宏無所不包,它既可能是某樣表達式的縮略形式,也可能是一(yī)種新語言的編譯器。如果你想真正地理解lisp語言,或者想拓寬你的編程視野,那麽你必須學習宏。

就我(wǒ)所知(zhī),宏(采用lisp語言的定義)目前仍然是lisp獨有的。一(yī)個原因是爲了使用宏,你大(dà)概不得不讓你的語言看上去(qù)像lisp一(yī)樣古 怪。另一(yī)個可能的原因是,如果你想爲自己的語言添上這種終極武器,你從此就不能聲稱自己發明了新語言,隻能說發明了一(yī)種lisp的新方言。

我(wǒ)把這件事當作笑話(huà)說出來,但是事實就是如此。如果你創造了一(yī)種新語言,其中(zhōng)有car、cdr、cons、quote、cond、 atom、eq這樣的功能,還有一(yī)種把函數寫成列表的表示方法,那麽在它們的基礎上,你完全可以推導出lisp語言的所有其他部分(fēn)。事實上,lisp語言 就是這樣定義的,john mccarthy把語言設計成這個樣子,就是爲了讓這種推導成爲可能。

六、

就算lisp确實代表了目前主流編程語言不斷靠近的一(yī)個方向,這是否意味着你就應該用它編程呢?

如果使用一(yī)種不那麽強大(dà)的語言,你又(yòu)會有多少損失呢?有時不采用最尖端的技術,不也是一(yī)種明智的選擇嗎(ma)?這麽多人使用主流編程語言,這本身不也說明那些語言有可取之處嗎(ma)?

另一(yī)方面,選擇哪一(yī)種編程語言,許多項目是無所謂的,反正不同的語言都能完成工(gōng)作。一(yī)般來說,條件越苛刻的項目,強大(dà)的編程語言就越能發揮 作用。但是,無數的項目根本沒有苛刻條件的限制。大(dà)多數的編程任務,可能隻要寫一(yī)些很小(xiǎo)的程序,然後用膠水語言把這些小(xiǎo)程序連起來就行了。你可以用自己熟 悉的編程語言,或者用對于特定項目來說有着最強大(dà)函數庫的語言,來寫這些小(xiǎo)程序。如果你隻是需要在windows應用程序之間傳遞數據,使用visual basic照樣能達到目的。

那麽,lisp的編程優勢體(tǐ)現在哪裏呢?

七、

語言的編程能力越強大(dà),寫出來的程序就越短(當然不是指字符數量,而是指獨立的語法單位)。

代碼的數量很重要,因爲開(kāi)發一(yī)個程序耗費(fèi)的時間,主要取決于程序的長度。如果同一(yī)個軟件,一(yī)種語言寫出來的代碼比另一(yī)種語言長三倍,這意味 着你開(kāi)發它耗費(fèi)的時間也會多三倍。而且即使你多雇傭人手,也無助于減少開(kāi)發時間,因爲當團隊規模超過某個門檻時,再增加人手隻會帶來淨損失。fred brooks在他的名著《人月神話(huà)》(the mythical man-month)中(zhōng),描述了這種現象,我(wǒ)的所見所聞印證了他的說法。

如果使用lisp語言,能讓程序變得多短?以lisp和c的比較爲例,我(wǒ)聽(tīng)到的大(dà)多數說法是c代碼的長度是lisp的7倍到10倍。但是最 近,new architect雜(zá)志(zhì)上有一(yī)篇介紹ita軟件公司的文章,裏面說"一(yī)行lisp代碼相當于20行c代碼",因爲此文都是引用ita總裁的話(huà),所以我(wǒ)想這 個數字來自ita的編程實踐。 如果真是這樣,那麽我(wǒ)們可以相信這句話(huà)。ita的軟件,不僅使用lisp語言,還同時大(dà)量使用c和c++,所以這是他們的經驗談。

根據上面的這個數字,如果你與ita競争,而且你使用c語言開(kāi)發軟件,那麽ita的開(kāi)發速度将比你快20倍。如果你需要一(yī)年時間實現某個功能,它隻需要不到三星期。反過來說,如果某個新功能,它開(kāi)發了三個月,那麽你需要五年才能做出來。

你知(zhī)道嗎(ma)?上面的對比,還隻是考慮到最好的情況。當我(wǒ)們隻比較代碼數量的時候,言下(xià)之意就是假設使用功能較弱的語言,也能開(kāi)發出同樣的軟 件。但是事實上,程序員(yuán)使用某種語言能做到的事情,是有極限的。如果你想用一(yī)種低層次的語言,解決一(yī)個很難的問題,那麽你将會面臨各種情況極其複雜(zá)、乃至 想不清楚的窘境。

所以,當我(wǒ)說假定你與ita競争,你用五年時間做出的東西,ita在lisp語言的幫助下(xià)隻用三個月就完成了,我(wǒ)指的五年還是一(yī)切順利、沒有犯錯誤、也沒有遇到太大(dà)麻煩的五年。事實上,按照大(dà)多數公司的實際情況,計劃中(zhōng)五年完成的項目,很可能永遠都不會完成。

我(wǒ)承認,上面的例子太極端。ita似乎有一(yī)批非常聰明的黑客,而c語言又(yòu)是一(yī)種很低層次的語言。但是,在一(yī)個高度競争的市場中(zhōng),即使開(kāi)發速度隻相差兩三倍,也足以使得你永遠處在落後的位置。

最近文章

Top