單元一:AutoLISP主角瀟灑登場
一. AutoLISP 是何方神聖?
1.AutoLISP是AutoCAD的最佳拍檔!
2.AutoLISP內含於AutoCAD軟體內,不用另外花錢買!
3.AutoLISP是強化AutoCAD最好、最直接的『程式語言』!
4.AutoLISP易學、易用,即使不會程式設計的AutoCAD使用者,都能在最短
的時間內,寫出令人驚訝、讚嘆的功能!
5.若說AutoLISP的出現,是替AutoCAD 創造一片天的『最大功臣』,實不
為過一點也不誇張!
6.AutoLISP希望您去學習它、改善它、發揮它、享受它.真的!它的威力、魅
力無窮!
二. AutoLISP 程式語言的特質分析:
學習AutoLISP是非常容易的,對初學者而言,即使沒有學習過任何的程式語言,都能很快的上手,寫出精彩漂亮的AutoLISP程式!
三.撰寫AutoLISP 的動機?
1.欲強化AutoCAD 原有指令時.
2.欲創造更有用的AutoCAD 新指令.
3.欲簡化繁瑣的環境設定或繪圖步驟時.
4.欲處理參數式繪圖時.
5.欲做圖面資料讀檔、寫檔.
6.欲做AutoCAD 簡報展示時.
7.欲達到真正靈活掌控AutoCAD 時.
8.欲提昇自己跨上AutoCAD 高手列車時.
四.AutoLISP 的效益評估?
1. 對公司負責人或設計主管而言:
A.
也許某員工或幹部花了20個小時撰寫一個AutoLISP程式,表面上,這將近三天的時間,他連一張圖都沒有畫,甚至可能偶有發呆、沈思,若此程式一天可以替公司繪圖部門節省1小時繪圖時間,那算一算,只要20天就抵銷開發成本,而20天以後都是賺的,『用的愈久,省的愈多』!
B.若員工皆有此動力,在不影響正常工作,『鼓勵』都來不及,那有『壓抑』的道理,甚至還要派遣優秀人員出去受
訓,學習更好的設計技巧與創意呢?!
C.千萬不要因為您的不懂或壓抑,SHOW您的權威與POWER,如此,不但對員工造成打擊,甚至您可能成為阻礙
了公司電腦化進步的罪魁禍首
D.
當然,若要撰寫的程式很多,內部設計人員的程式功力距離太遠,達成需求的時間反而變得遙遙無期,那倒不如求助於市面上已有的相關AutoCAD 支援軟體。
2. 對設計人員而言:
A.
得到一筆提昇績效獎金呢? 當然,無形中,『AutoCAD 高手的封號』也將黃功力又往前邁出了一大步,對個人的成長幫助匪淺,幸運的話,搞不好還可以袍加身,不亦樂乎!!!
B.
『半桶水、響叮噹』,千萬不要因為會寫AutoLISP 程式而自傲、孤僻、囂張起來,功力的增長,只是讓您有更多『服務他人、服務公司』的機會,若自恃過重,寧可不要!
C.
AutoLISP 程式功力的累進,是無遠弗屆的,千萬不要『孤芳自賞』,『人外有人,天外有天』,也許您覺得是『寶貝加三級』的程式,只是其他設計師基本程式中的一部份罷了!
D.
既然AutoLISP 是AutoCAD 的『最大功臣』,當然不會輕易被捨棄,如此,您的學習,保證不會白費!
E.
『精益求精』、『虛心求教』、『用心學習、觀摩』、『決心成為高手』
3.對程式本身而言:
A.少少的幾行,卻可能有『大大滿意』的時候!!!
B.充份掌握了控制、創造AutoCAD 的『尚方寶劍』,讓您在AutoCAD 的設計運作中『得心應手』,享受無比
的快樂與成就感!!!
五.如何有效的學習AutoLISP ?
1.先由小程式著手,認識AutoLISP語法規定!
2.瀏覽所有的AutoLISP功能函數,重要的功能函數要熟記腦海,俗語說的好
『一回生,二回熟』,除非您不用心,否則沒有學不好的道理!!!
3.要懂得偷懶:不要認為在繪圖的過程中,繁瑣的步驟是合理的,困難的繪圖
過程是必須忍耐的,試著用AutoLISP解決看看!
4.多觀摩別人的程式設計,吸取精華,像海棉一樣=>『吸』、『吸』、『吸』!!!
5.動手『寫』程式比用眼睛看程式,更能夠領略深記腦海!
6.隨時隨地整理您的程式,並加以註解,以免因時間的飛逝,當時用心的成果
也煙消雲散,忘的一乾二淨!!!
7.『決心』是學好AutoLISP 最重要的關鍵!
8.期許自己,要由操作者變成創造者!!!
單元二:AutoLISP的關鍵、基本結構及語法
一、學好AutoLISP 的關鍵、基本結構與語法:
1. AutoLISP 程式語言的特質
A.語法簡單
B.功能函數強大
C.撰寫的環境不挑剃
D.直譯式程式,『即寫即測、即測即用』
E.橫跨AutoCAD 各作業平台,悠然自得(註:以上五點,讀者可以參考上一章的剖析!!!)
2.學好AutoLISP 的關鍵:充份掌握『語法結構』&『功能函數』的搭配!!!
3.重要的AutoLISP 的基本語法結構
規則1:以括弧組成運算式,、相對稱左右括弧數一定要成雙成對
規則2:運算式型態:(運算元運算子運算子運算子)
1.1 運算元包括『功能函數』&『自定函式』
1.2 運算子(引數)包括:
A.整數(Integer) 如8,-17,500,9999 .....
B.實數(Real) 如8.5,-17.456 .....
C.字串(String) 如"AutoCAD","123"
D.串列(List) 如("a" "b" "c"),(x y)
E.圖元名稱代碼如
F.檔案代碼如
G.選擇群集代碼如
規則3:運算式中的『運算子』,可以是另一『運算式』或『副程式』
規則4:多重的括弧運算式,運算的先後順序是『由內而外、由左而右』
規則5:以檔案型態存在的AutoLISP 程式(ASCII 檔案),其副檔名必須是.lsp
規則6:撰寫的環境,只要是一般的文書編輯軟體、記事本,可編輯ASCII 檔案者都適用
規則7:以defun 功能函數定義新的指令或新的功能函式
規則8:新定義的功能函式名稱,若為『C:函式名』,則此函式可為AutoCAD新指令
規則9:載入AutoLISP 程式的作法:=> 指令:後直接鍵入(load "LISP主檔名")
規則10:AutoLISP 程式中,在『分號;』後的內容均為註解,程式不處理,適時的增加註解,將使程式更具可看性、學習性及完整性
規則11:AutoLISP 最常用的變數型態是『整數』、『實數』、『字串』、『點串列』四種,變數的型態依據設定值而自動定義,變數會一直儲存該值,直到被重新設定值或繪圖結束自動消失
規則12:以setq 功能函數設定變數值(setq 變數名稱設定值)
規則13:欲在AutoCAD 的環境中,查看一變數值,指令:下鍵入『!變數名』即可
規則14:以(defun C:函式名(引數/ 變數) ........)程式中,程式中的變數若在『/』右邊變數內,則稱為『區域變數』,否則為『整體變數』
二、學好AutoLISP 的關鍵:
充份掌握『語法結構』&『功能函數』的搭配!!! 其時這個關鍵亦是學習其它程式語言的關鍵.
?『語法結構』AutoLISP 的語法結構規定的並不多,變數不用事先定義及宣告,讀者可熟記下一單元有關重要的AutoLISP基本語法結
構,十四條設計上要求的『規則』
?『功能函數』AutoLISP 之所以能功能如此強大,都有賴功能函數,其成員共約200個:
1.一般性函數170個
2.ADS 定義特殊函數9個
3.配合DCL 交談框設計函數22個
各功能函數在使用上要求配合的運算子(引數)型態,均有其規定,當然,您可不能亂給!
例如:
指令:(+ 1 2 3 "ABC")
傳回:error : bad argument type (引數型態錯誤)
因為『+』函數不接受字串,而"abc" 正是字串
指令:(rtos "abc")
傳回:error : bad argument type (引數型態錯誤)
因為『rtos』函數只接受實數轉字串
詳細內容可參考下一章『快速瀏覽AutoLISP 功能
函數』至於各功能函數詳細的語法與實例應用,讀者
請參閱本書『第三篇AutoLISP功能函數詳解』
三、重要的AutoLISP 的基本語法結構:
規則1:以括弧組成運算式,左右括弧數一定要成雙成對、相對稱
請依序在『指令:』列(或指令:) 後面直接鍵入以下運算式
指令:(+ 1 2 3 4 5) 傳回加總和15
指令:(max 14.5 8.9 35) 傳回最大值35
指令:(menucmd "p1=*") 顯示拉下POP1
指令:(getint "Enter Real:") 傳回Enter Real:要求輸入一個實數
指令:(setq a (* 12.5 4)) 傳回相乘值50,同時設定給『變數a』
指令:!a 回應50 (註:! 號可用來查詢變數值)
指令:(min 75 a 63) 回應最小值50 (因為變數值a代表50)
錯誤的範例:
指令:(setq a (* 12.5 4)
1> 傳回1>表示少了一個括弧
1> ) 此時,只要再補上一個) 即可
指令:(setq a (* 12.5 4
2> 傳回2>表示少了二個括弧
2> )) 此時,只要再補上二個) 即可
規則2:運算式型態(運算元運算子運算子運算子...)或(函數(式) 引數引數引數...)
或(函數(式) 元素元素元素...)
1.1 運算元包括『功能函數』&『自定函式』
功能函數:如上練習中的+、max、menucmd、getint、setq、*、min,詳細內容可參考下一章『快速瀏覽AutoLISP 功能函數』&『第三篇AutoLISP功能函數詳解』
自定函式:由設計者自行定義的新函式或副程式
1.2 運算子(又稱引數或元素)包括:
A.整數(Integer): 如8,-17,500,9999…
正常範圍: 2的16次方,介於-32768與+32767之間
特殊範圍:若以float 函數將其轉為實數,則範圍2的32次方, 介於
-2147483648與+2147483647之間
B.實數(Real): 如8.5,-17.456…
正常範圍:帶有小數點的數,精度可達14 位有效數字
C.字串(String): 如"AutoCAD","123","Enter Real:","7.5",…
正常範圍:以雙引號內夾『字元』為認定,字元數不受限制
D.串列(List): 如("a" "b" "c"),(x y),(x y z),("a" 8 3.5),....
正常範圍:以左右括號內夾『元素』為認定,元素型態非常彈性
使用頻率:在AutoLISP 程式設計中應用非常高
範例說明: ("a" 8 3.5 kk (1 2))
表示此串列內有五個元素"a"表示字串a、8表示整數8、3.5表示實數3.5、kk 表示變數kk、(1 2)表示串列(1 2)
2D 點座標(x y) 表示法=> 以二實數形成串列
3D 點座標(x y z) 表示法=> 以三實數形成串列
E.圖元名稱代碼:如
使用範圍: AutoCAD 會自動賦予圖元指向代碼,透過此代碼可找到圖元的資料庫記錄
範例說明: (setq en (entlast))
傳回
(entget en) 可找到圖元的資料庫串列
F.檔案代碼: 如
使用範圍:開啟(open)檔案作讀檔(r)、寫檔(w)使用時,所產生的代碼,如下:
範例說明:
(setq ffr (open "test.txt" "r")) 回應
(setq ffw (open "abc.txt" "w")) 回應
G.選擇群集代碼: 如
使用範圍:一個或數個圖元所形成的選擇集
範例說明:
(setq ss (ssget))
選取物件: (可選擇物體)
選取物件: (可選擇物體)
選取物件: (按[ENTER] 鍵)
回應
規則3:運算式中的『運算子』,可以是另一『運算式』或『副程式』功能函數使用語法:
(strcat 字串1 字串2 字串3 ....) 字串結合功能函數
(getstring 提示) 要求鍵入一個字串
(rtos 實數) 將實數轉換成字串
範例說明1: (strcat "abc" "123" "LISP") 傳回:"abc123LISP"
範例說明2: (strcat "abc" (getstring "Enter String:" ) (rtos 123.45))
執行結果: Enter String: 鍵入任一字串,假設是鍵入*HELLO*
回應"abc*HELLO*123.45"
本例中的strcat函數在語法中要求的『運算子』必須是『字串』型態
『運算子1』= "abc" 是正常的字串運算子
『運算子2』= 運算式(getstring "Enter String:") 傳回結果是一字串"*HELLO*"
『運算子3』= 運算式(rtos 123.45) 傳回結果是一字串"123.45"
規則4:多重的括弧運算式,運算的先後順序是『由內而外、由左而右』
範例說明:請將10.25 + 17 - 13.2 / 7的結果,設定給變數kk,並轉換成AutoLISP 的運算式
解法技巧A:
1:運用『二分法、加括號』:(10.25 + 17) - (13.2 / 7)
2:運算元往前提:kk = (- (10.25 + 17) (13.2 / 7))
3:運算元再往前提:kk = (- (+ 10.25 17) (/ 13.2 7))
4:轉換完成:(setq kk (- (+ 10.25 17) (/ 13.2 7)))
解法技巧B:
1:運用『二分法、加括號』:(10.25 + (17 - (13.2 / 7)))
2:運算元往前提:kk = (+ 10.25 (17 - (13.2 / 7)))
3:運算元再往前提:kk = (+ 10.25 (- 17 (/ 13.2 7)))
4:轉換完成:(setq kk (+ 10.25 (- 17 (/ 13.2 7))))
規則5:以檔案型態存在的AutoLISP程式(ASCII檔案),其副檔名必須是.LSP
規則6:撰寫的環境,只要是一般的文書編輯軟體,可編輯ASCII 檔案者都適用
如:PE2、PE3、DW3、書中仙、漢書、EDIT、記事本....等
規則7:以defun 功能函數定義新的指令或新的功能函式(註:引數及區域變數可省略)
程式結構型態:(defun 函式名稱(引數/區域變數)
: :
: : 程式內容
: :
)
規則8:新定義的功能函式名稱,若為『C:函式名』,則此函式可為AutoCAD 新指令
(註:引數及區域變數可省略)
程式結構型態:(defun C:KK(引數/區域變數)
: :程式內容
: :
: :
)
則載入此LISP 程式後,可在指令: 後直接鍵入新定義的KK 指令
規則9:載入AutoLISP程式的作法:指令:後直接鍵入(load "LISP主檔名")
註:load 與字串間的空格,可有可無
註:load 與雙引號間的空格,可有可無(load"LISP主檔名")
範例:在c:\lsptools 目錄下有一LISP程式tt.lsp,而您目前的工作目錄在c:\dwg 下
?若『環境設定』之『支援檔案搜尋路徑』有指定
到c:\lsptools目錄,則欲使用載入tt.lspà指令:
後鍵入(load "tt") 即可
?若『環境設定』之『支援檔案搜尋路徑』無指定
到c:\lsptools目錄,則鍵入(load"tt") 後,會出
現錯誤訊息如下:
無法開啟「tt.lsp」做輸入錯誤: 載入失敗(LOAD "tt")*取消*
此時您可鍵入:
指令:(load "c:\\lsptools\\tt") 或
指令:(load "c:"/lsptools/tt)
不可鍵入: (load "c:\lsptools\tt")
因為『\』在AutoLISP 結構語法中已經用於『跳脫碼控制』了
規則10:AutoLISP 程式中,在『分號;』後的內容均為註解,程式不處理,適時的增加註解,將使程式更具可看性、學習性及完整性
範例: pp.lsp 內容如下:
;本程式功能可快速畫門、窗
;設計者:QQ博士
;版權所有,歡迎使用
(defun c:pp()
: :
; 以下為畫門副程式
: :
; 以下為畫窗副程式,
: :
: :
)
規則11:AutoLISP 最常用的變數型態是『整數』、『實數』、『字串』、『點
串列』四種,變數的型態依據設定值而自動定義,變數會一直儲存該值,直到被重新設定值或繪圖結束自動消失
規則12:以setq 功能函數設定變數值(setq 變數名稱設定值)
範例:
(setq a 100) ;變數a 值設定成整數100
(setq b 123.56) ;變數b值設定成實數123.56
(setq c "Good morning!!!") ;變數c 值設定成字串
(setq pt1 (getpoint "Enter POINT:")) ;變數pt1 值設定成點串列
(setq pt2 (list a b))
;此時,a值是100,b值是123.56變數pt2值設定成點串列(100 123.56)
(setq pt3 '(297 210)) ;變數pt3 值設定成點串列(297 210)
注意: 直接設定成點串列時,不能省略單引號『'』否則會被誤認(297 210)又是一個運算式, 297是運算元而出錯!
規則13:欲在AutoCAD 的環境中,查看一變數值,指令:下鍵入『!變數名』即可範例:
指令:(setq aa (+ 100 75)) 傳回:175
指令:!aa 傳回:175
指令:(setq pp (list 90 50)) 傳回:(90 50)
指令:!pp 傳回:(90 50)
指令:!ww 傳回:nil 空值無設定
規則14:以(defun C:函式名(引數/ 變數) ........)程式中,程式中的變數若在『/』
右邊變數內,則稱為『區域變數』,否則為『整體變數』(註:在AutoLISP 中,未賦予值的變數,其值皆回應nil)
『區域變數』於此程式執行完畢後,其值自動消失
『整體變數』於此程式執行完畢後,其值仍然存在
範例: test.lsp 內容如下
(defun c:tt(/ sa sb sc)
(setq sa 100)
(setq sb 20)
(setq sc 10)
(setq sd (+ sa sb sc))
)
回到:指令:鍵入(load"tt") 傳回:c:tt
指令:tt 傳回:130
指令:!sa 傳回:nil (屬區域變數)
指令:!sb 傳回:nil (屬區域變數)
指令:!sc 傳回:nil (屬區域變數)
指令:!sd 傳回:130 (屬整體變數)
單元三:快速分類瀏覽AutoLISP功能函數(一)
一?看到以下那麼多的AutoLISP 功能函數,洋洋灑灑17大類:
1.您第一個念頭,一定驚訝怎麼會那麼多,您可能快嚇壞了!
2.您第二個念頭,一定會想『那麼多,怎麼記得下來』,您可能快放棄了!
二?其實,您應該要『很興奮』而『充滿信心』的,怎麼說呢?
1.您有那麼多的『大將』協助您撰寫AutoLISP 程式,當然左右又逢
源,不但輕鬆, 而且要快樂的不得了!!!
2.這些函數只要您先瀏覽有印象, 要用時,再翻查該函數,了解用途語
法再加入到您的程式中就可以了!!!
3.常用的函數,寫久、用久後,自然會深深牢記腦海,想忘都很難,不常用
的函數, 若硬要您記下來,相信連高手都很困難,更何況是初學的
您!!!
4.您不用再摸不著頭緒了,因為您幸運的擁有了本書,就是您成功的開
始!!!
第一類數學運算功能函數
第二類檢驗& 邏輯運算功能函數
第三類轉換運算功能函數
第四類串列處理功能函數
第五類字串、字元、檔案處理功能函數
第六類等待輸入功能函數
第七類幾何運算功能函數
第八類圖元處理功能函數
單元四:快速分類瀏覽AutoLISP功能函數(二)第九類選擇集、符號表處理功能函數
第十類AutoCAD 相關查詢、控制功能函數
第十一類判斷式、迴圈相關功能函數
第十二類函數處理、定義、追蹤& 錯誤處理功能函數
AutoCAD开发VisualLISP程序 本节通过一个简单的实例来讲述LISP程序的创建过程,介绍编制LISP程序的一些基本步骤,以及LISP程序在AutoCAD中的加载和运行的方法。 首先来创建一个最简单的LISP程序—-“Hello.lsp”,在AutoCAD2002中加载并运行该程序,将会在命令行出现-“Hello,VisualLISP!”。 VisualLISP与AutoCAD的通信 用户可以直接在AutoCAD命令行中键入AutoLISP表达式。AutoCAD通过括号来确认AutoLISP表达式。AutoCAD每当发现一个左括号,就确认为AutoLISP表达式,并由AutoLISP求表达式的值后返回AutoCAD,AutoCAD使用返回结果并继续进行其他工作。 注意在AutoLISP表达式中,左、右括号必须配对,否则AutoCAD将给出提示符n>,n表示右括号丢失数目。 此外,在AutoCAD中调用并执行AutoLISP程序。在AutoLISP程序中采用COMMAND函数来与AutoCAD命令程序处理器通信,COMMAND从AutoLISP获得命令并将其传给AutoCAD。 实例:最简单的LISP程序——“Hello.lsp” Step1创建新文件 (1)运行AutoCAD2002系统,以“acadiso.dwt”为样板创建图形文件,并调用“vlisp”命令进入VisualLISP环境。
(2)单击“Standard(标准)”工具栏中的按钮,新建一个LISP文件。Step2输入代码并保存文件 (1)在编辑窗口中输入源文件“Hello.lsp”的代码。程序清单如下:;;;* Hello.lsp – Visual LISP文件实例 (prompt "Pick point:") ;指定运行时的提示信息 (setq ipt (getpoint)) ;在屏幕上指定一点并将其坐标值赋予变量“ipt” (setq hgt 15) ;给变量“hgt”赋值 (Command "_.TEXT" "_S" "STANDARD" ipt hgt 0 "Hello, Visual LISP!"); 调用“Commnad”函数与AutoCAD进行通信 (2)单击“Standard(标准)”工具栏中的按钮,以“Hello.lsp”为名保存该文件。 Step3运行LISP程序 (1)确认编辑窗口处于前台状态,选择菜单【Tools(工具)】→【LoadTextinEditor(加载编辑器中的文字)】,则该程序被加载并运行。系统将返回AutoCAD窗口,并提示用户选择一点,并以指定点为基点来绘制文字。结果如图36-4所示。 (2)如果用户退出VisualLISP环境并返回AutoCAD系统窗口,则需要对该程序进行加载后,才能运行。选择菜单【Tools(工具)】→【LoadAppcation…(加载应用程序)】,弹出“Load/UnloadApplications(加载/卸载应用程序)”对话框,如图
Autolisp基础教程 单元一:AutoLISP主角潇洒登场 一. AutoLISP 是何方神圣? 1、AutoLISP是AutoCAD的最佳拍檔! 2、AutoLISP内含于AutoCAD软件内,不用另外花钱买! 3、AutoLISP是强化AutoCAD最好、最直接的『程序语言』! 4、AutoLISP易学、易用,即使不会程序设计的AutoCAD使用者,都能在最短的时间内,写出令人惊讶、赞叹的功能! 若说AutoLISP的出现,是替AutoCAD 创造一片天的『最大功臣』,实不为过一点也不夸张! 5、AutoLISP希望您去学习它、改善它、发挥它、享受它.真的!它的威力、魅力无穷! 二. AutoLISP 程序语言的特质分析: 学习AutoLISP是非常容易的,对初学者而言,即使没有学习过任何的程序语言,都能很快的上手,写出精彩漂亮的AutoLISP程序! 语法简单:不用特殊的变量宣告,非常富有弹性,比起其它的程序语言,它的语法可说是非常简单而有其独特的风格! 功能函数强大:除一般性的功能函数外,又拥有为数不少控制配合AutoCAD的特殊函数,再加上AutoLISP可直接呼叫执行所有AutoCAD的指令,以及掌握运用所有的AutoCAD系统变量,功能之强大令人欣喜不已! 撰写的环境不挑剔:只要是一般的文书编辑软件都适用! 如:Windows的记事本、PE2、PE3、DW3、书中仙、汉书、EDIT....等 直译式程序:不用再作编译,『即写即测、即测即用』,马上可以在AutoCAD中响应效果,马上就有成就感! 横跨各作业平台:悠然自得,虽然AutoCAD有DOS、Windows版本之分但是AutoLISP却可在不改写的原貌下,加载与执行! 三.撰写AutoLISP 的动机? 1、欲强化AutoCAD 原有指令时. 2、欲创造更有用的AutoCAD 新指令. 3、欲简化繁琐的环境设定或绘图步骤时. 4、欲处理参数式绘图时. 5、欲做图面资料读文件、写文件. 6、欲做AutoCAD 演示文稿展示时. 7、欲达到真正灵活掌控AutoCAD 时. 8、欲提升自己跨上AutoCAD 高手列车时. 四.AutoLISP 的效益评估? 1. 对公司负责人或设计主管而言: A. 也许某员工或干部花了20个小时撰写一个AutoLISP程序,表面上,这将近三天的时间,他连一张图都没有画,甚至可能偶有发呆、沉思,若此程序一天可以替公司绘图部门节省1小时绘图时间,那算一算,只要20天就抵销开发成本,而20天以后都是赚的,『用的愈久,省的愈多』! B. 若员工皆有此动力,在不影响正常工作,『鼓励』都来不及,那有『压抑』的道理,甚至还要派遣优秀人员出去受训,学习更好的设计技巧与创意呢?! C. 千万不要因为您的不懂或压抑,SHOW您的权威与POWER,如此,不但对员工造成打击,甚至您可能成为阻碍了公司计算机化进步的罪魁祸首 D. 当然,若要撰写的程序很多,内部设计人员的程序功力距离太远,达成需求的时间反而变得遥遥无期,那倒不如求助于市面上已有的相关AutoCAD 支持软件。
Lisp教程 一.Lisp基础知识 二.对话框基础 一.基本知识 第1节 -------------------------------------------------------------------------------- 基本知识 AutoLISP是一种针对扩充及自订AutoCAD函数机能而产生,以LISP为基础的程序设计语言.LISP本身于50
目的是令使用者充份利用AutoCAD进行开发,直接增加及修改AutoCAD指令. AutoLisp语言建基于普通的LISP语言上,并扩充了许多适用于CAD的特殊功能而形成. 是一种能以直译方式(不须先行编译)亦可于AutoCAD内部执行的直译性程序语言. 程序容易学习及撰写,程序即使出错亦不会对操作系统(如DOS,WINDOWS)有不良影响. 数据及程序均统一以串行(List)结构表示. 可直接调用几乎全部的AutoCAD命令. 既具备一般高级语言的基本结构和功能,亦有一般高级语言没有的强大图形处理能力. 内建于AutoCAD应用程序,不须另行购买;亦不须使用特定的编辑器或开发环境. 可配合AutoCAD提供的PDB,建立DCL(Dialog Control Language)文件创建对话框. 缺点: 执行速度较ObjectArx(旧称ARX,以C或C++程序开发,取代以前的ADS)程序慢;原程序不易保护;对低阶的硬件数据不易存取. 第2节 -------------------------------------------------------------------------------- 函数(Function) 在AutoLISP程序语言中所有的成份都是以函数的形式出现,AutoLISP程序就是顺序执行连串的函数.函数的运行过程就是对函数的求值(结果)过程;函数的基本语法如下: (函数名称参数1 参数2....) e.g. (PRINC "AutoLISP Programming") 每一个完整的函数必须包在一对小括号( )内,左边为开括号,右边为关括号;如有若干数量的开括号,则一定有同等数量的关括号对应. 左边开括号后紧随函数名称. 函数名称与参数之间,或参数与参数之间须最少留一个空格. 函数可有一个或多个参数(也可能没有参数),视该函数而定. 函数名称不分大小写,即大小写字母视为相同. 第3节 -------------------------------------------------------------------------------- 数据型态(Data Type) 整数(INT) 没有小数字的数值,32位有号数,范围从+2,147,483,647到-2,147,483,648 实数(REAL) 带小数字的数值,以倍精度浮点格式储存(最少14位小数) e.g. 12.5 当数值在1与-1之间时,必须加上前导零 e.g. 0.05 可以科学记号表示: 在E或e后加上次方值 e.g. 4.1e-6 字符串(STR) 一般文字,其前后必须加上双引号" e.g. "AutoCAD" 控制字符或脱逸码必须为小写,且须在字符前加上反斜线\ e.g. "\AutoCAD" 像素名称(ENAME) 是指定给图文件内对象的指针(Pointer,为16进位的数字卷标) e.g.
AutoLISP详细讲解 关于AutoLISP AutoLISP是由Autodesk公司开发的一种LISP程序语言(LISP是List Processor的缩写)。第一篇关于LISP的参考文献是由John McCarthy在1960年4月的《ACM通讯》中发表的。 除了FORTRAN和COBOL,大多数在六十年代早期开发出来的语言都过时了,可是LISP 却生下来,并且已经成为人工智能(AI)的首选程序序言。AutoLISP解释程序位于AutoCAD 软件包中,然而AutoCAD R2.17及更低版本中并不包含AutoLISP解释程序,这样,只有通过AutoCADR2.18及更高版本才可以使用AutoLISP语言。 AutoCAD软件包中包含大多数用于产生图形的命令,但仍有某些命令末被提供。例如,AutoCAD中没有在图形文本对象内绘制矩形及作全局改变的命令。通过AutoLISP,你可以使用AutoLISP程序语言编制能够在图形文本对象内绘制矩形或作全局选择性改变的程序。事实上,可以用AutoLISP编制任何程序,或把它嵌入到菜单中,这样定制你的系统会取得更高的效率。 现在,已经有数以百计的第三方软件开发人员使用AutoLISP语言编制各种应用程序软件包,例如,本文作者开发了一个名为SMLayout的软件包,用它可以产生各种复杂几何图形的平面布局图,这些几何图形包括管道的交叉部、过渡都、圆柱、弯管接头、圆锥以及罐顶。目前社会上非常需要AutoLISP程序员为应用软件及客户菜单的开发提供顾问。 在本章中,我们假定读者已经熟悉了AutoCAD命令及AutoCAD的系统变量。但是,在开始学习AutoLISP时,却并不需要你是一位AutoCAD或编程专家。同时,本章还假定读者并无编程方面的知识。如果你熟悉任何一种编程语言,那么学习AutoLISP就会很容易。对各种函数的评细探讨以及对例题的逐步讲解会使你学起来很有兴趣。本章讨论常用的AutoLISP函数以及它们S程序编制中的应用。对于本章中未涉及的函数,请参阅Autodesk 公司的《AutoLISP程序员参考手册》。AutoLISP对硬件没有任何特殊要求。如果系统能够运行AutoCAD,那么同样也可以运行AutoLISP。AutoLISP程序可以使用任何文本编辑器进行编制。 数学运算 任何编程语言都提供数学函数。在AutoLISP中,同样提供了编程以及数学计算所需的大部分数学函数,你可以使用AutoLISP对数字进行加、减、乘、除运算,还可以得到以弧度表示的角度的正弦值、余弦值及反正切值等。使用AutoLISP还可以进行许多其他计算。这一节主要讨论AutoLISP程序语言支持的常用数学函数。 1.加法 格式(+num1num2num3…) 此函数(+)计算加号(+)右边所有数字的和(+num1num2num3…)。这些数字可以是整数或实数。如果均为整数,则和为整数;如果均为实数,则和为实数。但是如果既有整数又有实数,则和为实数。如下所示,在前两个例子中,所有数字均为整数,所以结果是
2007.12 科技广场 254
工程中经常要绘制各种弹簧和螺纹连接件,在AutoCAD中没有专门绘制弹簧和螺纹的命令,弹簧和螺纹在AutoCAD中都可用平面图形通过相应螺旋线拉伸而成,所以绘制螺旋线就是解决问题的关键。如果用常规的3dpoly命令绘制三维螺旋线,需要输入大量精确数据,才能一点一点地画出螺旋线,做法非常麻烦。现在提供AutoLISP程序,即可解决绘制螺旋线的问题。然后通过相应平面图形的拉伸,就可以完成弹簧、螺纹等零件的绘制。 根据圆台螺旋线的形成原理(一动点M绕圆台的母线AB作等速直线运动,而该母线AB又绕圆台的轴线O1O2作等角速旋转时,点M的运动轨迹即为圆台的螺旋线,如图二所示。圆柱螺旋线是圆台螺旋线的特例,故可通过圆台螺旋线程序做相应的变动,即可得到),动点M(x,y,z)的参数方程如下: 图二园台螺旋线 X=[r0+hg *α/(2π)]*cosα Y=[r0+hg *α/(2π)] *sinα Z=±vg *α/(2π) 其中,r0为圆台下面的半径,α为螺旋线角,vg为导程(单线螺旋线螺距(弹簧的节距)等于导程),hg为点M沿水平半径方向上增加的距离(hg=|(r1-r0)m|求得,m为螺旋线的圈数)。 下面提供圆台螺旋线的AutoLISP程序清单: (defun c:luoxc(/) (setq b1 (getpoint" 指定基点:")) (setq r1 (getreal "指定初始半径:")) (setq disp (getreal "指定节距:")) (setq angtg (getreal "输入锥形角:")) (setq m (getint"输入圈数:")) (setq n (getint"输入每圈细化段数<36>:")) (cond ((null n )(setq n 36))) (setq delta (/ (* 2.0 pi ) n)) (setq j (/ disp n)) (setq bb (caddr b1)) (setq tg (*(/ angtg 180) pi)) (setq ang 0) (setq k 0) (command "ucs" "o" b1) (command "3dpoly" (list r1 0 0)) (repeat (* m n) (setq k(+ k 1)) (setq ang(+ delta ang)) (setq r (- r1 (* (+ 0(* j k))(/ (sin tg )(costg))))) (setq pt2 (list (* r(cos ang))(* r(sin ang))(+ 0(* j k)))) (command pt2) ) (command "") ) 根据圆台螺旋线的形成原理,如果圆锥角为0度时,即可形成圆柱螺旋线。圆柱螺旋线程序清单如下: (defun c:luoxc(/) (setq b1 (getpoint" 指定基点:")) (setq r (getreal "指定初始半径:")) (setq vg (getreal "指定节距:")) (setq m (getint"输入圈数:")) (setq n (getint"输入每圈细化段数<36>:")) (cond ((null n )(setq n 36))) (setq delta (/ (* 2.0 pi ) n)) (setq j (/ disp n)) (setq bb (caddr b1)) (setq ang 0) (setq k 0) (command "ucs" "o" b1) (command "3dpoly" (list r 0 0)) 255
养成良好的AutoLISP书写习惯 众所周知,Lisp是一种表结构语言,括号必须成对出现,在调试时往往为遗漏了一个括号大费周折,所以,养成一个好的编程习惯是学好Lisp所必须的。 ⑴选择一个较好的编辑器,这是一个基本条件,建议使用Visual Lisp编辑器或Lisplink 等专用编辑器,此类编辑器可以对函数突出显示。 ⑵按Lisp(DCL)专有格式书写,并经常对程序进行“格式化”,及时发现语法错误,并有利于调试是查找错误。 ⑶使用自定义函数,并辅助以适当得注释,在较大程序中按功能使用自定义函数可以使得程序条理化。 autolisp的入门教程+autolisp函数! Lisp是一门历史悠久的语言,全名叫LISt Processor,也就是“表处理语言”,它是由John McCarthy于1958年就开始设计的一门语言。和Lisp同时期甚至更晚出现的许多语言如Algo 等如今大多已经消亡,又或者仅仅在一些特定的场合有一些微不足道的用途,到现在还广为人知的恐怕只剩下了Fortran和COBOL。但唯独Lisp,不但没有随着时间而衰退,反倒是一次又一次的焕发出了青春,从Lisp分支出来的Scheme、ML等语言在很多场合的火爆程度甚至超过了许多老牌明星。那么这颗常青树永葆青春的奥秘究竟在哪里呢? 如果你只接触过C/C++、Pascal这些“过程式语言”的话,Lisp可能会让你觉得十分不同寻常,首先吸引你眼球(或者说让你觉得混乱的)一定是Lisp程序中异常多的括号,当然从现在的角度来讲,这种设计的确对程序员不大友好,不过考虑到五六十年代的计算机处理能力,简化语言本身的设计在那时算得上是当务之急了。 Lisp的基本语法很简单,它甚至没有保留字(有些语言学家可能对这一点有异议,别怕,我听你们的),它只有两种基本的数据,仅有一种基本的语法结构就是表达式,而这些表达式同时也就是程序结构,但是正如规则最简单的围棋却有着最为复杂的变化一样,Lisp使用最基本的语言结构定义却可以完成其它语言难于实现的、最复杂的功能。 废话少说,现在我们就来看看Lisp语言中的基本元素。 Lisp的表达式是一个原子(atom)或表(list),原子(atom)是一个字母序列,如abc;表是由零个或多个表达式组成的序列,表达式之间用空格分隔开,放入一对括号中,如: abc () (abc xyz) (a b (c) d) 最后一个表是由四个元素构成的,其中第三个元素本身也是一个表。 正如算数表达式1+1有值2一样,Lisp中的表达式也有值,如果表达式e得出值v,我们说e返回v。如果一个表达式是一个表,那么我们把表中的第一个元素叫做操作符,其余的元素叫做自变量。
第十四章 AutoLISP 14.1 关于AutoLISP AutoLISP是由Autodesk公司开发的一种LISP程序语言(LISP是List Processor的缩写)。第一篇关于LISP的参考文献是由John McCarthy 在1960年4月的《ACM通讯》中发表的。 除了FORTRAN和COBOL,大多数在六十年代早期开发出来的语言都过时了,可是LISP 却生下来,并且已经成为人工智能(AI)的首选程序序言。AutoLISP解释程序位于AutoCAD 软件包中,然而AutoCAD R2.17及更低版本中并不包含AutoLISP解释程序,这样,只有通过AutoCAD R2.18及更高版本才可以使用AutoLISP语言。 AutoCAD软件包中包含大多数用于产生图形的命令,但仍有某些命令末被提供。例如,AutoCAD中没有在图形文本对象内绘制矩形及作全局改变的命令。通过AutoLISP,你可以使用AutoLISP程序语言编制能够在图形文本对象内绘制矩形或作全局选择性改变的程序。事实上,可以用AutoLISP编制任何程序,或把它嵌入到菜单中,这样定制你的系统会取得更高的效率。 现在,已经有数以百计的第三方软件开发人员使用AutoLISP语言编制各种应用程序软件包,例如,本文作者开发了一个名为SMLayout的软件包,用它可以产生各种复杂几何图形的平面布局图,这些几何图形包括管道的交叉部、过渡都、圆柱、弯管接头、圆锥以及罐顶。目前社会上非常需要AutoLISP程序员为应用软件及客户菜单的开发提供顾问。 在本章中,我们假定读者已经熟悉了AutoCAD命令及AutoCAD的系统变量。但是,在开始学习AutoLISP时,却并不需要你是一位AutoCAD或编程专家。同时,本章还假定读者并无编程方面的知识。如果你熟悉任何一种编程语言,那么学习AutoLISP就会很容易。对各种函数的评细探讨以及对例题的逐步讲解会使你学起来很有兴趣。本章讨论常用的AutoLISP函数以及它们S程序编制中的应用。对于本章中未涉及的函数,请参阅Autodesk 公司的《AutoLISP程序员参考手册》。AutoLISP对硬件没有任何特殊要求。如果系统能够运行AutoCAD,那么同样也可以运行AutoLISP。AutoLISP程序可以使用任何文本编辑器进行编制。 14.2 数学运算 任何编程语言都提供数学函数。在AutoLISP中,同样提供了编程以及数学计算所需的大部分数学函数,你可以使用AutoLISP对数字进行加、减、乘、除运算,还可以得到以弧度表示的角度的正弦值、余弦值及反正切值等。使用AutoLISP还可以进行许多其他计算。这一节主要讨论AutoLISP程序语言支持的常用数学函数。 269
单元一:AutoLISP主角潇洒登场 一. AutoLISP 是何方神圣? 1.AutoLISP是AutoCAD的最佳拍檔! 2.AutoLISP内含于AutoCAD软件内,不用另外花钱买! 3.AutoLISP是强化AutoCAD最好、最直接的『程序语言』! 4.AutoLISP易学、易用,即使不会程序设计的AutoCAD使用者,都能在最短 的时间内,写出令人惊讶、赞叹的功能! 5.若说AutoLISP的出现,是替AutoCAD 创造一片天的『最大功臣』,实不 为过一点也不夸张! 6.AutoLISP希望您去学习它、改善它、发挥它、享受它.真的!它的威力、魅 力无穷! 二. AutoLISP 程序语言的特质分析: 学习AutoLISP是非常容易的,对初学者而言,即使没有学习过任何的程序语言,都能很快的上手,写出精彩漂亮的AutoLISP程序! 三.撰写AutoLISP 的动机? 1.欲强化AutoCAD 原有指令时. 2.欲创造更有用的AutoCAD 新指令. 3.欲简化繁琐的环境设定或绘图步骤时. 4.欲处理参数式绘图时.
5.欲做图面资料读文件、写文件. 6.欲做AutoCAD 简报展示时. 7.欲达到真正灵活掌控AutoCAD 时. 8.欲提升自己跨上AutoCAD 高手列车时. 四.AutoLISP 的效益评估? 1. 对公司负责人或设计主管而言: A. 也许某员工或干部花了20个小时撰写一个AutoLISP程序,表面上,这将近三天的时间,他连一张图都没有画,甚至可能偶有发呆、沈思,若此程序一天可以替公司绘图部门节省1小时绘图时间,那算一算,只要20天就抵销开发成本,而20天以后都是赚的,『用的愈久,省的愈多』! B.若员工皆有此动力,在不影响正常工作,『鼓励』都来不及,那有『压抑』的道理,甚至还要派遣优秀人员出去受 训,学习更好的设计技巧与创意呢?! C.千万不要因为您的不懂或压抑,SHOW您的权威与POWER,如此,不但对员工造成打击,甚至您可能成为阻碍 了公司计算机化进步的罪魁祸首 D. 当然,若要撰写的程序很多,内部设计人员的程序功力距离太远,达成需求的时间反而变得遥遥无期,那倒不如求助于市面上已有的相关AutoCAD 支持软件。 2. 对设计人员而言:
第十二章从菜单执行函数 1.制作简单的菜单 (a)首先定义一个函数,并保存为plus32.lsp: (defun plus32() (setq a (+ 3 2)) ) (b)编写菜单生成文件,并保存为mylisp.mnu: ***MENUGROUP=Mylisp ;菜单组的名称 ***POP1 ;第一组下拉菜单 [Mylisp] ;第一组下拉菜单总的名称 [plus] ^c^c^p(load “plus32.lsp”) (plus32) ;菜单名,加载,执行 ;一定是一个空行 (c)加载菜单和执行函数 用menuload函数执行加载. 2.制作较为复杂的菜单 (a)首先定义两个函数,并保存为plus32.lsp和plus45.lsp : (defun plus32() (setq a (+ 3 2)) ) (defun plus45() (setq a (+ 4 5)) ) (b)编写菜单生成文件,并保存为mylisp.mnu: ***MENYGROUP=MYLISP ***pop1 [mylisp1] [first] ^c^c^p(load "plus32.lsp") (plus32) [first2] ^c^c^p(load "plus45.lsp") (plus45) ***pop2 [mylisp2] [first2] ^c^c^p(load "plus32.lsp") (plus32) [first4] ^c^c^p(load “plus45.lsp”) (plus45) (c)加载菜单和执行函数 用menuload函数执行加载. 第十三章保持程序畅通 1.程序示例 (a)首先定义一个函数,并保存为myline.lsp: (defun myline() (graphscr) (setq pt1 (getpoint "\n请输入第一个点:")) (setq pt2 (getpoint pt1 "\n请输入第二个点:")) (command "line" pt1 pt2 "") )
單元一:AutoLISP主角瀟灑登場 一. AutoLISP 是何方神聖? 1.AutoLISP是AutoCAD的最佳拍檔! 2.AutoLISP內含於AutoCAD軟體內,不用另外花錢買! 3.AutoLISP是強化AutoCAD最好、最直接的『程式語言』! 4.AutoLISP易學、易用,即使不會程式設計的AutoCAD使用者,都能在最短 的時間內,寫出令人驚訝、讚嘆的功能! 5.若說AutoLISP的出現,是替AutoCAD 創造一片天的『最大功臣』,實不 為過一點也不誇張! 6.AutoLISP希望您去學習它、改善它、發揮它、享受它.真的!它的威力、魅 力無窮! 二. AutoLISP 程式語言的特質分析: 學習AutoLISP是非常容易的,對初學者而言,即使沒有學習過任何的程式語言,都能很快的上手,寫出精彩漂亮的AutoLISP程式!
三.撰寫AutoLISP 的動機? 1.欲強化AutoCAD 原有指令時. 2.欲創造更有用的AutoCAD 新指令. 3.欲簡化繁瑣的環境設定或繪圖步驟時. 4.欲處理參數式繪圖時. 5.欲做圖面資料讀檔、寫檔. 6.欲做AutoCAD 簡報展示時. 7.欲達到真正靈活掌控AutoCAD 時. 8.欲提昇自己跨上AutoCAD 高手列車時. 四.AutoLISP 的效益評估? 1. 對公司負責人或設計主管而言: A. 也許某員工或幹部花了20個小時撰寫一個AutoLISP程式,表面上,這將近三天的時間,他連一張圖都沒有畫,甚至可能偶有發呆、沈思,若此程式一天可以替公司繪圖部門節省1小時繪圖時間,那算一算,只要20天就抵銷開發成本,而20天以後都是賺的,『用的愈久,省的愈多』! B.若員工皆有此動力,在不影響正常工作,『鼓勵』都來不及,那有『壓抑』的道理,甚至還要派遣優秀人員出去受 訓,學習更好的設計技巧與創意呢?! C.千萬不要因為您的不懂或壓抑,SHOW您的權威與POWER,如此,不但對員工造成打擊,甚至您可能成為阻礙 了公司電腦化進步的罪魁禍首 D. 當然,若要撰寫的程式很多,內部設計人員的程式功力距離太遠,達成需求的時間反而變得遙遙無期,那倒不如求助於市面上已有的相關AutoCAD 支援軟體。 2. 對設計人員而言: A. 得到一筆提昇績效獎金呢? 當然,無形中,『AutoCAD 高手的封號』也將黃功力又往前邁出了一大步,對個人的成長幫助匪淺,幸運的話,搞不好還可以袍加身,不亦樂乎!!!
AutoLisp入门教程 本节通过一个简单的实例来讲述LISP程序的创建过程,介绍编制LISP程序的一些基本步骤,以及LISP程序在AutoCAD中的加载和运行的方法。首先来创建一个最简单的LISP程序—-“Hello.lsp”,在AutoCAD 2002中加载并运行该程序,将会在命令行出现-“Hello, Visual LISP!”。 36.2.1 Visual LISP与AutoCAD的通信 用户可以直接在AutoCAD命令行中键入AutoLISP表达式。AutoCAD通过括号来确认AutoLISP表达式。AutoCAD每当发现一个左括号,就确认为AutoLISP表达式,并由AutoLISP求表达式的值后返回AutoCAD,AutoCAD使用返回结果并继续进行其他工作。 注意在AutoLISP表达式中,左、右括号必须配对,否则AutoCAD将给出提示符n>,n表示右括号丢失数目。 此外,在AutoCAD中调用并执行AutoLISP程序。在AutoLISP程序中采用COMMAND函数来与AutoCAD 命令程序处理器通信,COMMAND从AutoLISP获得命令并将其传给AutoCAD。 36.2.2 实例1 最简单的LISP程序——“Hello.lsp” Step 1 创建新文件 (1) 运行AutoCAD 2002系统,以“acadiso.dwt”为样板创建图形文件,并调用“vlisp”命令进入Visual LISP环境。 (2) 单击“Standard(标准)”工具栏中的按钮,新建一个LISP文件。 Step 2 输入代码并保存文件 (1) 在编辑窗口中输入源文件“Hello.lsp”的代码,如图36-3所示。程序清单如下: ;;;* Hello.lsp – Visual LISP文件实例 (prompt "Pick point:") ;指定运行时的提示信息 (setq ipt (getpoint)) ;在屏幕上指定一点并将其坐标值赋予变量“ipt” (setq hgt 15) ;给变量“hgt”赋值 (Command "_.TEXT" "_S" "STANDARD" ipt hgt 0 "Hello, Visual LISP!") ;调用“Commnad”函数与AutoCAD进行通信 [img]https://www.doczj.com/doc/6411425978.html,/Files/AutoCad/146-1.JPG[/img]
AutoLISP入门 欧阳光明(2021.03.07) 单元一:AutoLISP主角登场 一. AutoLISP 是何方神圣? 1、AutoLISP是AutoCAD的最佳拍檔! 2、AutoLISP内含于AutoCAD软件内,不用另外花钱买! 3、AutoLISP是强化AutoCAD最好、最直接的『程序语言』! 4、AutoLISP易学、易用,即使不会程序设计的AutoCAD使用者,都能在最短的时间内,写出令人惊讶、赞叹的功能! 若说AutoLISP的出现,是替AutoCAD 创造一片天的『最大功臣』,实不为过一点也不夸张! 5、AutoLISP希望您去学习它、改善它、发挥它、享受它.真的!它的威力、魅力无穷! 二. AutoLISP 程序语言的特质分析: 学习AutoLISP是非常容易的,对初学者而言,即使没有学习过任何的程序语言,都能很快的上手,写出精彩漂亮的AutoLISP程序! 语法简单:不用特殊的变量宣告,非常富有弹性,比起其它的程序语言,它的语法可说是非常简单而有其独特的风格! 功能函数强大:除一般性的功能函数外,又拥有为数不少控制配合AutoCAD的特殊函数,再加上AutoLISP可直接呼叫执行所有AutoCAD的指令,以及掌握运用所有的AutoCAD系统变量,功能之强大令人欣喜不已! 撰写的环境不挑剔:只要是一般的文书编辑软件都适用! 如:Windows的记事本、PE2、PE3、DW3、书中仙、汉书、EDIT....等 直译式程序:不用再作编译,『即写即测、即测即用』,马上可以在AutoCAD中响应效果,马上就有成就感! 横跨各作业平台:悠然自得,虽然AutoCAD有DOS、Windows版本之分但是AutoLISP却可在不改写的原貌下,加载与执行! 三.撰写 AutoLISP 的动机? 1、欲强化 AutoCAD 原有指令时. 2、欲创造更有用的 AutoCAD 新指令. 3、欲简化繁琐的环境设定或绘图步骤时.
AutoLISP入门 单元一:AutoLISP主角登场 (2) 单元二:AutoLISP的关键、基本结构及语法 (4) 单元三:快速分类浏览AutoLISP功能函数(一) (10) 单元四:快速分类浏览AutoLISP功能函数(二) (13) 单元五:轻松快速的掌握AutoLISP设计技巧 (16) 单元六:图元数据的取得与活用技巧(一) (21) 单元七:图元数据的取得与活用技巧(二) (25) 单元八:新手上路-参数设计的关键技巧 (31)
单元一:AutoLISP主角登场 一. AutoLISP 是何方神圣? 1、AutoLISP是AutoCAD的最佳拍檔! 2、AutoLISP内含于AutoCAD软件内,不用另外花钱买! 3、AutoLISP是强化AutoCAD最好、最直接的『程序语言』! 4、AutoLISP易学、易用,即使不会程序设计的AutoCAD使用者,都能在最短的时间内,写出令人惊讶、赞叹的功能! 若说AutoLISP的出现,是替AutoCAD 创造一片天的『最大功臣』,实不为过一点也不夸张! 5、AutoLISP希望您去学习它、改善它、发挥它、享受它.真的!它的威力、魅力无穷! 二. AutoLISP 程序语言的特质分析: 学习AutoLISP是非常容易的,对初学者而言,即使没有学习过任何的程序语言,都能很快的上手,写出精彩漂亮的AutoLISP程序! 语法简单:不用特殊的变量宣告,非常富有弹性,比起其它的程序语言,它的语法可说是非常简单而有其独特的风格! 功能函数强大:除一般性的功能函数外,又拥有为数不少控制配合AutoCAD的特殊函数,再加上AutoLISP可直接呼叫执行所有AutoCAD的指令,以及掌握运用所有的AutoCAD系统变量,功能之强大令人欣喜不已! 撰写的环境不挑剔:只要是一般的文书编辑软件都适用! 如:Windows的记事本、PE2、PE3、DW3、书中仙、汉书、EDIT....等 直译式程序:不用再作编译,『即写即测、即测即用』,马上可以在AutoCAD中响应效果,马上就有成就感! 横跨各作业平台:悠然自得,虽然AutoCAD有DOS、Windows版本之分但是AutoLISP却可在不改写的原貌下,加载与执行! 三.撰写AutoLISP 的动机? 1、欲强化AutoCAD 原有指令时. 2、欲创造更有用的AutoCAD 新指令. 3、欲简化繁琐的环境设定或绘图步骤时. 4、欲处理参数式绘图时. 5、欲做图面资料读文件、写文件. 6、欲做AutoCAD 简报展示时. 7、欲达到真正灵活掌控AutoCAD 时. 8、欲提升自己跨上AutoCAD 高手列车时. 四.AutoLISP 的效益评估? 1. 对公司负责人或设计主管而言: A. 也许某员工或干部花了20个小时撰写一个AutoLISP程序,表面上,这将近三天的时间,他连一张图都没有画,甚至可能偶有发呆、沈思,若此程序一天可以替公司绘图部门节省1小时绘图时间,那算一算,只要20天就抵销开发成本,而20天以后都是赚的,『用的愈久,省的愈多』! B. 若员工皆有此动力,在不影响正常工作,『鼓励』都来不及,那有『压抑』的道理,甚至还要派遣优秀人员出去受训,学习更好的设计技巧与创意呢?! C. 千万不要因为您的不懂或压抑,SHOW您的权威与POWER,如此,不但对员工造成打击,甚至您可能成为阻碍了公司计算机化进步的罪魁祸首 D. 当然,若要撰写的程序很多,内部设计人员的程序功力距离太远,达成需求的时间反而变得遥遥无期,那倒不如求助于市面上已有的相关AutoCAD 支持软件。
函数 (Function) 在AutoLISP程序语言中所有的成份都是以函数的形式出现,AutoLISP程序就是顺序执行连串的函数.函数的运行过程就是对函数的求值(结果)过程;函数的基本语法如下: (函数名称参数1 参数2....) e.g. (PRINC "AutoLISP Programming") 每一个完整的函数必须包在一对小括号( )内,左边为开括号,右边为关括号; 如有若干数量的开括号,则一定有同等数量的关括号对应. 左边开括号后紧随函数名称. 函数名称与参数之间,或参数与参数之间须最少留一个空格. 函数可有一个或多个参数(也可能没有参数),视该函数而定. 函数名称不分大小写,即大小写字母视为相同. 数据型态 (Data Type) 整数 (INT) 没有小数字的数值,32位有号数,范围从+2,147,483,647到-2,147,483,648 实数 (REAL) 带小数字的数值,以倍精度浮点格式储存(最少14位小 e.g. 12.5 数) 当数值在1与-1之间时,必须加上前导零 e.g. 0.05 可以科学记号表示 : 在E或e后加上次方值 e.g. 4.1e-6 字符串 (STR) 一般文字,其前后必须加上双引号 " e.g. "AutoCAD" 控制字符或脱逸码必须为小写,且须在字符前加上反斜 e.g. "\AutoCAD"杠 \ 像素名称 (ENAME) 是指定给图文件内对象的指针(Pointer,为16进位的数字卷标) e.g.
一、学好AutoLISP的关键、基本结构与语法: 1. AutoLISP程式语言的特质 A.语法简单 B.功能函数强大 C.撰写的环境不挑剃 D.直译式程式,『即写即测、即测即用』 E.横跨AutoCAD各作业平台,悠然自得(注:以上五点,读者可以参考上一章的剖析!!!) 2.学好AutoLISP的关键:充份掌握『语法结构』&『功能函数』的搭配!!! 3.重要的AutoLISP的基本语法结构 规则1:以括弧组成运算式,、相对称左右括弧数一定要成双成对 规则2:运算式型态:(运算元运算子运算子运算子) 1.1运算元包括『功能函数』&『自定函式』 1.2运算子(引数)包括: A.整数(Integer)如8,-17,500,9999 ..... B.实数(Real)如8.5,-17.456 ..... C.字串(String)如"AutoCAD","123" D.串列(List)如("a" "b" "c"),(xy)
E.图元名称代码如
用AutoLISP对AutoCAD进行二次开发 一、什么是CAD的二次开发?(为什么需要对CAD进行二次开发) 我们在设计、绘图时采用AutoCAD、ProE、Solidwork、UG等设计软件,在复杂问题或特殊用途的设计中,各种软件的原有功能往往难以解决问题,例如CAD里没有直接绘制正弦曲线和抛物线等曲线的命令。因此,只是会使用各软件的基本功能是不够的,根据我们的特殊用途进行软件的用户化定制和二次开发,往往能够大大提高工作效率和技术水平。 二、什么是AutoLisp?如何用其进行二次开发? AutoLISP是由Autodesk公司开发的一种LISP程序语言,LISP是List Processor的缩写。通过autolisp 编程,可以节省工程师很多时间。AutoLISP语言作为嵌入在AutoCAD内部的具有智能特点的编程语言,是开发应用AutoCAD不可缺少的工具。 当前AutoCAD的二次开发工具主要有:VisualLisp(它是AutoLisp的集成开发环境)、VBA、ObjectARX和.NET API等,这里只介绍AutoLisp。 下面由浅入深地介绍一下如何应用AutolLisp进行二次开发。 最简单的应用是在命令行中编写和执行lisp语句,进行简单的计算、绘图、查询等操作。 稍复杂些的就要把语句(代码)放到扩展名为lsp的文件中,用的时候先加载到CAD中,然后输入自定义的函数名执行。 当开发的程序越来越多,就需要进行有效的管理,使我们能方便的找到和应用这些程序。到那个程度的时候就需要用到用户自定义的工具按钮、菜单和对话框了。 图1 根据程序数量选择二次开发形式 (1)在命令行中编写和执行程序 例1:(+ 2 3) 例2:(setq a 2) (setq b 3) (+ a b) 例3:(setq a 2)(setq b 3)(+ a b) 例4:(setq p1 (list 0 0))(setq p2 (list 200 200))(command “line” p1 p2 “”) ;;语句之间不空格 例5:(setq p1 (list 0 0)) (setq p2 (list 200 200)) (command “line” p1 p2 “”) ;;语句之间空格 ;; 表示语句(程序代码)的注释