1.定義AutoLISP函數函數
(defun 函數名(變元……/局部變量……)表達式)spa
(1)函數名與變量名的命名規則相同,不該與現有AutoLISP函數重名,不然,現有函數將被新定義的功能所取代。(2)變元即參數。即使沒有變元也不能省略"()"。(3)局部變量。這裏的局部變量是指侷限於該函數內部所用的變量,只在該函數調用期間獲得定義,調用結束,局部變量的值均爲nil,同事釋放所佔存儲空間。如不聲明,它們則將成爲全局變量。局部變量的聲明不只能夠節省存儲空間,還能夠避免函數之間相互干擾。局部變量和變元之間用除號隔開。即便沒有變元,也能夠後局部變量說明,必須加除號。(4)表達式。用於描述該函數的運算。(5)返回值。最後一個表達式返回值即爲該函數的返回值。code
【例】定義一個已知圓柱體的半徑和高,計算其體積的函數,源代碼以下:blog
1 ( defun volume(r h / v) 2 ( setq v( * r r pi h)) 3 )
該函數的函數名是volume,兩個變元r(半徑)和h(高度),有一個局部變量v,返回表達式( setq v( * r r pi h))的值。遞歸
2.調用AutoLISP函數ci
(函數名[變元]……)class
3.遞歸定義AutoLISP函數變量
AutoLISP能夠在一個函數內部定義另外一個函數,也能夠遞歸定義函數。command
【例】定義階乘函數。方法
4.調用AutoCAD命令
AutoLISP用command函數調用AutoCAD命令,其格式爲:(command "AutoCAD命令" "命令所需的數據"……)
【例】繪製以(2,4)爲圓心,5爲半徑的圓和(-2,-4)爲圓心,5爲半徑的圓
(command "circle" "2,4" "5")
(command "circle" '(-2 -4) 5)
【例】已知p1,p2,p3爲不在同一條直線上的三個點,利用這三個點畫圓
1 (setq p1 '(100 100)) 2 (setq p2 '(-100 100)) 3 (setq p3 '(-100 -100)) 4 (command "circle" "3p" p1 p2 p3)
【例】繪製p1(0,0)到p2(10,0)的一段直線
(command "line" "0,0" "10,0" "") (command "line" '(0 0) '(10 0) "") (command "line" (list 0 0) (list 10 0) "")
最後的雙引號表明一個回車或空格。(書上第13頁【例2-6】的最後一種畫線方法實驗失敗,因此就不寫了)。
5.定義AutoCAD命令
用defun函數定義AutoCAD命令,格式以下:
(defun C:AutoCAD命令名 (/局部變量……) 表達式……)
定義AutoCAD命令與定義函數基本相同,不一樣之處有兩點:(1)命令名前加"C:"。(2)變元表內沒有變元,但能夠有局部變量說明。此外,還要注意所定義的AutoCAD命令不該與現有的AutoCAD命令重名。