版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、23.12.2020,1,第三章 AutoLISP繪圖程序設(shè)計(jì),主要內(nèi)容 1.AutoLISP特點(diǎn) 2.AutoLISP函數(shù)的用法 3.AutoLISP程序結(jié)構(gòu) 4.AutoLISP程序執(zhí)行方式,23.12.2020,2,3.1 AutoLISP概述,一、AutoLISP介紹 1.AutoLISP的作用 (1)AutoLISP是一種表語言,是常用的AutoCAD二次開發(fā)手段。 所謂二次開發(fā):是指以AutoCAD軟件為平臺(tái),加入自己所需要的功能。開發(fā)過程,就是編程的過程。 二次開發(fā)所支持的語言有VB、C+,大型的二次開發(fā),以C+為主,而小型二次開發(fā),一般以AutoLISP為主。,23.12.20
2、20,3,(2)必須在AutoCAD環(huán)境下運(yùn)行(內(nèi)嵌); (3)AutoLISP可以編寫程序,調(diào)用AutoCAD的許多 命令; 舉例:在水平方向畫n個(gè)大小相等的圓。,;調(diào)用AutoCAD命令畫圓 (defun C:HY() (setq P0 (getpoint 第一圓心坐標(biāo):) (setq R (getreal半徑:) (setq L (getreal圓心間距離:) (setq a 1) (setq n(getintn圓的個(gè)數(shù):) (while (= a n) (command circle P0 R) (setq P0 (polar P0 0 L) (setq a (1+ a) ) ),23
3、.12.2020,4,(4)AutoLISP語言中使用大量的函數(shù)(有200多個(gè)函數(shù)),進(jìn)行各種運(yùn)算; (5)AutoLISP編寫的程序特點(diǎn)(學(xué)習(xí)中注意): 以表形式描述數(shù)據(jù)處理過程,程序執(zhí)行過程就是函數(shù)求值過程; 每段程序都是一個(gè)函數(shù); 具有交互處理功能,邊解釋邊執(zhí)行; 采用模塊化設(shè)計(jì)方法。,23.12.2020,5,2.AutoLISP的數(shù)據(jù)類型,(1)整型數(shù)(INT):是由0、1、29、+、-組成的。 (2)實(shí)型數(shù)(REAL):如0.4(0不能少)、-1.23、0.526E9(0.526109)。 (3)符號(hào)(SYM):除(、)、*、”、;之外的字符序列,并且不能全部是數(shù)字。 符號(hào)常用著變
4、量,如: Command:(setq X 12) ;整型數(shù) Command:(setq X 12.0) ;實(shí)型數(shù) Command:(setq X “12”) ;字符串,23.12.2020,6,(4)字符串(STR):如:“ABC”、“abc”、“457”等。 (5)表(LIST):帶有一對(duì)括號(hào)、有若干元素組成。(元素1 元素2 元素n) 如:(2 4 f) 元素的個(gè)數(shù)叫表的長度。 元素也可以是表,如(45 (3 6) 7),這叫嵌套。 元素之間必須用“空格” 隔開。 表的定義方式:(LIST 5 6);(5 6);還可以用defun定義(后面講)。,23.12.2020,7,例: (setq
5、 P(list 12.36 -26.58) 結(jié)果是:(12.36 -26.58) 例:(setq P (12.36 -26.58) 結(jié)果是:(12.36 -26.58) 提示: (1)表的嵌套時(shí)一定要注意括號(hào)“(”、“)”匹 配。 (2)西文狀態(tài)下輸入!,23.12.2020,8,(6)文件描述符 (7)AutoLISP內(nèi)部函數(shù) (8)AutoCAD的選擇集 (9)AutoCAD的實(shí)體名 上述數(shù)據(jù)類型中,前四種稱原子,原子包括數(shù)值原子(整型數(shù)、實(shí)型數(shù)),符號(hào)原子和字符串原子。 AutoLISP基本數(shù)據(jù)類型是原子和表,重點(diǎn)介紹前五種數(shù)據(jù)類型。,23.12.2020,9,二、幾個(gè)基本概念 1.常數(shù)
6、 PI數(shù)學(xué)中的(3.1415929) T邏輯真,即成立。 NIL邏輯假,即不成立。還代表空,即無值。 注意:(1)大小寫等效;(2)它們不能作為變量。 2.原子 是程序處理中最小的數(shù)據(jù)單元。 3.表達(dá)式 原子和表的統(tǒng)稱。 如:(setq P (12.36 -26.58),23.12.2020,10,4.點(diǎn) 是表的一種形式,也叫點(diǎn)表。 有三種獲得點(diǎn)的方式: (1)用表示 (120.35 253.24) (2)list函數(shù)定義點(diǎn) (setq X 12.36 Y -26.58) (setq M (list X Y) 結(jié)果是:M=(12.36 -26.58) (setq M ( X Y) 結(jié)果是:(X
7、 Y) (3)由getpoint函數(shù)得到點(diǎn) 其格式:(getpoint “n輸入一點(diǎn):”),23.12.2020,11,三、AutoLISP程序結(jié)構(gòu) 1.舉例 例(1) ;在屏幕上顯示 ASCII碼為(6590)的字符 (defun C:zm(/ as) ;自定義命令 (setq as 65 n 100) (while (= as 90) (command text (list n 100) 15 (chr as) (setq as (+ as 1) n (+ n 20) ) ),23.12.2020,12,例(2) ;繪制正多邊形程序 (defun c:dbx() (setq n (geti
8、ntn輸入多邊形邊數(shù):) (setq L (getrealn輸入多邊形邊長:) (setq P1(getpointn輸入多邊形第一個(gè)角點(diǎn)坐標(biāo):) (setq P2(polar P1 0 L) (command polygon n e p1 p2) ),23.12.2020,13,例(3) (defun yuan( ) ;畫圓函數(shù) (setq r (getrealn半徑:) (setq p (getpointn圓心:) (command circle p r) ),23.12.2020,14,例(4) (defun ld( ) (setq p1 (getpointn p1:) p2 (getpo
9、intn p2:) );輸入兩點(diǎn) (setq d (distance p1 p2);求距離 (setq ang (angle p1 p2);求方位角 (print d) (print ang) (command line p1 p2 );畫直線 ),23.12.2020,15,2.結(jié)構(gòu) (1)注釋行以 ;開始,可在程序頭或句尾,增加程序可讀性。也可以不要。 (2)除字符串外,字母大小寫等效。 (3)表與表之間可以有空格,也可沒有,建議有,這樣清楚。 如:(distance(3 4)(56 32)或 (distance (3 4) (56 32) (4)函數(shù)名后至少要有一個(gè)空格,函數(shù)名與表之間可
10、有可無。,23.12.2020,16,3.特點(diǎn) (1)所謂語句都是以表形式出現(xiàn)。 (2)一切成分都是以函數(shù)的形式給出。 (3)程序執(zhí)行過程就是求函數(shù)值的過程。 四、AutoLISP程序執(zhí)行方式 有三種方式:行方式、源文件方式、編譯文件方式。 1.行方式 就是在AutoCAD的“command:”提示符下,輸入表后回車。如: command:(+ 15 6.3) command:(setq a 10)(setq b (+ a 5) ,23.12.2020,17,2.源文件方式 用寫字板或記事本把AutoLISP程序保存起來(后綴為.LSP)。然后用“LOAD”命令裝載并調(diào)用。 例如:(1)把下列
11、程序保存到“e:zm.lsp”,;在屏幕上顯示 ASCII碼為(6590)的字符 (defun C:zm(/ as) ;自定義命令 (setq as 65 n 100) (while (= as 90) (command text (list n 100) 15 (chr as) (setq as (+ as 1) n (+ n 20) ) ),23.12.2020,18,(2)用“l(fā)oad”裝載 即在命令行上輸入(load “e:zm.lsp”) (3)在命令行上輸入zm 3.編譯文件方式(重點(diǎn)掌握) (1) Visual LISP的啟動(dòng)、界面和退出 (2) Visual LISP控制臺(tái) (
12、3) Visual LISP創(chuàng)建LISP程序 (4) Visual LISP中運(yùn)行LISP程序 提示:建議在Visual LISP中創(chuàng)建和運(yùn)行LISP程序 舉例:,23.12.2020,19,3.2 基本函數(shù),一、算數(shù)運(yùn)算函數(shù) 1.加運(yùn)算 格式:(+ num1 num2 num3.) Command:(+ 2 5) 返回:7 Command:(+ 2.0 30.0 4.0 50.0) 返回:86.0 Command:(+ 2 30 4 50.0) 返回:86.0 注意:“+”與“num1”及各數(shù)之間必須要有空格,后面的函數(shù)格式都是如此。,23.12.2020,20,2. 減運(yùn)算 格式:(- n
13、um1 num2 num3.) “減”函數(shù)(-)從第一個(gè)數(shù)中減去后面所有數(shù)的和,即 num1-( num2 + num3 + . . . ) 。 如: Command: (- 28 14) 返回:1 4 Command: (- 25 7 11 ) 返回:7 Command: (- 50 20 10.0) 返回:20.0 Command: (- 20.0 30.0) 返回:-10.0,23.12.2020,21,3. 乘運(yùn)算 格式:(* num1 num2 num3 .) 4. 除運(yùn)算 格式:(/ num1 num2 num3 .) “除”函數(shù)以第一個(gè)數(shù)除以其他所有運(yùn)算數(shù)的積,即 num1 /
14、( num2 * num3 * . . . ) 。 例如: (* 2 5 3 2.0) 返回:60.0 (* 2 5 3) 返回:30 (/ 3 2) (Setq a(/ 3.0 2) 返回:1.5,23.12.2020,22,5. 增量 格式:(1+ number) 注意:1和“+”之間不能空格,+ 與n u m b e r之間必須要空格。 6. 減量 格式:(1- number) 注意:1和“-”之間不能空格,- 與number之間必須要空格。 例如: (setq b(1+ -12.5) (setq c(1- -16.4),23.12.2020,23,舉例:,1.求a,b,c三個(gè)數(shù)的平方和
15、。 2.根據(jù)前后視讀數(shù),求兩點(diǎn)間高差。 3.求閉合水準(zhǔn)線路的高差閉合差。,23.12.2020,24,參考答案1: (setq a (getreal輸入第一個(gè)數(shù)a:) (setq b (getreal輸入第二個(gè)數(shù)b:) (setq c (getreal輸入第三個(gè)數(shù)c:) (setq s (+ (* a a)(* b b)(* c c),參考答案2: (setq a (getreal輸入后視讀數(shù)a:) (setq b (getreal輸入前視讀數(shù)b:) (setq h (- a b),23.12.2020,25,參考答案3: (setq n (getint 輸入高差個(gè)數(shù):) (setq fh 0
16、.0) (repeat n (setq h (getrealn依次輸入高差:) (setq fh(+ fh h) ),23.12.2020,26,二、標(biāo)準(zhǔn)函數(shù),1.絕對(duì)值(abs)、平方根 (sqrt) 、正弦(sin) 、余弦(cos) 、 反正切(atan) 以上函數(shù)格式:(函數(shù)名 ) 2.冪函數(shù)(expt)、(exp) 格式: (expt 底數(shù) 冪) 格式: (exp 底數(shù) ) 注意:以上各函數(shù)返回的數(shù)值類型。 3.舉例,23.12.2020,27,舉例:用AutoLISP表示下列公式:,(1)計(jì)算三角高程的表達(dá)式 (2)計(jì)算坐標(biāo)增量的表達(dá)式 (3)將度化成弧度單位,23.12.2020
17、,28,參考答案: (1) (setq HA (getreal 輸入HA:) (setq L (getreal 輸入L:) (setq AF (getreal 輸入AF:) (setq i (getreal 輸入i:) (setq v (getreal 輸入v:) (setq HB1 (+ HA (- i v) (setq HB2 (* L (sin af) (setq HB (+ HB1 HB2),23.12.2020,29,參考答案: (3) (setq af (getreal “輸入af:”); af是整度數(shù) (setq af (/ 180 (* pi af) 如何將度分秒化成弧度?,2
18、3.12.2020,30,三、賦值函數(shù),賦值函數(shù)有兩個(gè):setq和set 1.setq 格式:(setq 變量1 表達(dá)式1 變量2 表達(dá)式2 ) 賦給變量的值可以是任何表達(dá)式(數(shù)值、字符串、字母)。 注意:不要用AutoLISP的函數(shù)名和常數(shù)當(dāng)作變量。 舉例:(1) (setq a 32 b 33.26 c yes) (2) (setq a (sin (/ pi 4) (3) (setq x 34.3 y 5.23 p(list x y ) (4) (setq pt(getpointn輸入一點(diǎn):),23.12.2020,31,2.set 與setq不同之處,是set為符號(hào)賦值,setq為變量賦
19、值。 如:(set a 9) 結(jié)果a為9 此函數(shù)非常有用,和其它函數(shù)配合使用,可以得到一維數(shù)組。 舉例: (1) (set(read(getstringn輸入點(diǎn) 名:)(getpointn輸入點(diǎn)坐標(biāo):) (2) (set(read(getstringn輸入變量 名:)(getrealn輸入變量值:),23.12.2020,32,四、字符串處理函數(shù) 1.strcat 格式:(strcat 串1 串2.) 把“串1”、“串2”、等連成一個(gè)新的字符串。如: (strcat a bout) 返回 about (strcat a b c) 返回 abc (strcat a c) 返回 ac“ 2.str
20、len 格式:(strcat 字符串) 此函數(shù)求“字符串”長度。如: (strlen one two three) 返回11,23.12.2020,33,3.substr 格式:(substr 字符串 起點(diǎn) 長度) 此函數(shù)將返回“字符串”的子字符串。子串的起始位置是以“起點(diǎn)”確定,子串長度由“長度”指定。如果“長度”沒有設(shè)定, 則子串將從“起點(diǎn)”到最后?!捌瘘c(diǎn)”和“長度”均須為正整型數(shù)。如: (substr abcde 2) 返回 bcde (substr abcde 3 2) 返回 cd,23.12.2020,34,五、類型轉(zhuǎn)換函數(shù) 1.fix 格式: (fix number) 此函數(shù)將nu
21、mber變?yōu)檎蛿?shù)。如果number是實(shí)型數(shù),則舍去小數(shù)部分。 如: (fix 3) 返回 3 (fix 3.7) 返回 3,23.12.2020,35,2.float 格式: (float number) 此函數(shù)將number變?yōu)閷?shí)型數(shù)。 如: (float 3) 返回 3.0 (float 3.75) 返回 3.75 3.atoi 格式: (atoi 字符串) 此函數(shù)可用來將字符串轉(zhuǎn)換成整型數(shù)。 如: (atoi 97) 返回 97,23.12.2020,36,4. atof 格式: (atof 字符串) 此函數(shù)可用來將字符串轉(zhuǎn)換成實(shí)型數(shù)。 如: (atof 67.9)返回 67.9 (a
22、tof “97”)返回 97.0 5. itoa 格式:(itoa 整型數(shù)) 此函數(shù)將整型數(shù)轉(zhuǎn)換成字符串。如: (itoa 56) 返回 “56”,23.12.2020,37,6. rtos rtos函數(shù)將按給定的方式和精度把數(shù)轉(zhuǎn)換為字符串。 格式:(rtos 數(shù) 方式 精度) 方式:有五種,其代碼分別是1、2、3、4、5(只要掌握2)。 精度:是制小數(shù)位數(shù)。 例如: (setq A(rtos 5.78925 2 4) 返回5.7893 (setq A(rtos 45.23 2 1) 返回45.2,23.12.2020,38,7.(angtos 角度 模式 精度) 把弧度轉(zhuǎn)換為度(取整度) 注
23、意:(1)角度以弧度表示; (2)模式是04的整數(shù);(0十進(jìn)制;1度分秒;2梯度;3弧度;4測量單位) (3)精度是一整數(shù),表示十進(jìn)制數(shù)小數(shù)位; (4)角度為負(fù)時(shí), angtos自動(dòng)將其還原成02 之間的正值。 例:(angtos 0.785398 ) (atof(angtos 0.528 0 2) 與angtos互補(bǔ)的函數(shù)(angtof 32 ),23.12.2020,39,8.chr 格式:(chr integer) 此函數(shù)是將 integer中的ASCII碼轉(zhuǎn)換成單一的對(duì)應(yīng)字符串。如 : (chr 97) 返回 a (chr 65) 返回 “A (chr 66) 返回 B“ 9.asci
24、i 格式:(ascii 字符串) 此函數(shù)是將字符串轉(zhuǎn)換成ASCII。如 : (ascii “A”) 返回65,23.12.2020,40,10.read 格式:(read 字符串) 此函數(shù)將返回字符串的第一個(gè)表或原子。如: (read (12 45) (15.36 28.478) 返回(12 45) (read 48.65 34.8) 返回48.65 11.Cvunit 格式:(Cvunit 數(shù)值 舊單位 新單位) (cvunit 2.3 minute“ second) 返回138.0 (cvunit 1 meter3” inch3) 返回61023.7,23.12.2020,41,舉例1:
25、;得到一組點(diǎn),如:P1、P2、等等 (defun c:pt() (setq n(getint“n輸入n值:) (setq m 1) (repeat n (set(read(getstringn輸入點(diǎn)名:)(getpointn輸入點(diǎn)坐標(biāo):) (setq m (1+ m) ) ),23.12.2020,42,舉例2:將度分秒化為弧度 ;把度分秒化成弧度 (defun hd() (setq a (getstring nA:);輸入角度(按6.3628形式輸入) (cond (= (strlen a) 6) ;(strlen a)求a的長度 (setq ad (substr a 1 1) ;以字符串形
26、式保存角的度數(shù) (setq am (substr a 3 2) ;以字符串形式保存角的分?jǐn)?shù) (setq as (substr a 5 2) ;以字符串形式保存角的秒數(shù) ) (= (strlen a) 7) (setq ad (substr a 1 2) (setq am (substr a 4 2) (setq as (substr a 6 2) ),23.12.2020,43,(= (strlen a) 8) (setq ad (substr a 1 3) (setq am (substr a 5 2) (setq as (substr a 7 2) ) (setq a1 (atof ad)
27、 ;把a(bǔ)d轉(zhuǎn)換為實(shí)數(shù) (setq a2 (atof am) ;把a(bǔ)m轉(zhuǎn)換為實(shí)數(shù) (setq a3 (atof as) ;把a(bǔ)s轉(zhuǎn)換為實(shí)數(shù) (setq ar (+ a1 (/ a2 60) (/ a3 3600) (setq ard (/ (* ar pi) 180) (princ ard) (princ),23.12.2020,44,六、求值函數(shù) 1. 距離(distance) 格式:(distance 點(diǎn)1 點(diǎn)2) 求出兩點(diǎn)之間的距離,結(jié)果是實(shí)型數(shù)。如: (distance (1 2) (7 3)返回:6.082763 (distance (1.0 2.5 3.0) (7.7 2.5 9.0
28、)返回:8.99389(空間距離),23.12.2020,45,2.angle函數(shù) 是求點(diǎn)1到點(diǎn)2的方向與X軸正向的夾角(),如圖,單位是弧度。 格式:(angle 點(diǎn)1 點(diǎn)2) (angle (5 1) (2 1)返回:3.141593,23.12.2020,46,3. polar函數(shù) polar函數(shù)以一個(gè)給定角度和一個(gè)與給定點(diǎn)的距離來定義一個(gè)新點(diǎn),如下圖所示。 其中角用弧度表示,并以逆時(shí)針方向測量為正 。 polar函數(shù)的格式: (polar 點(diǎn) 角度 距離) (setq pt2 (polar (2.0 3.0) pi 100) 返回:(-98.0 3.0) (setq p2 (polar
29、 (100 100) (/ pi 2) 50) 返回:(100.0 150.0),23.12.2020,47,4.eval 格式:(eval 表達(dá)式 ) 此函數(shù)求出表達(dá)式結(jié)果。如: (setq a 56 b 45.3) (eval a) (eval b) 提示:eval和strcat、read、setq等函數(shù)配合用,可以建立一個(gè)一維數(shù)組。 例如: 建立一維數(shù)組xi(i=1,2,n)。,23.12.2020,48,(setq n(getintn輸入一個(gè)整數(shù):) (setq i 0 s 0) (repeat n (setq i(1+ i) (set (read(strcatx(itoa i)(ge
30、trealn輸入一個(gè)實(shí)數(shù):) (setq s(+ s(eval(read(strcat x(itoa i) ) 此程序運(yùn)行結(jié)果可以得到: x1,x2,xn。 S=x1+x2+xn。,23.12.2020,49,七、表處理函數(shù),1.list函數(shù) 2.car函數(shù) 格式:(car 表) 返回一個(gè)列表中的第一個(gè)元素的數(shù)值(X元素)。如果該列表中沒有任何元素,則返回空值nil。 3.cadr函數(shù) 返回一個(gè)列表的第二個(gè)元素(Y元素)。 4.last函數(shù) 返回一個(gè)列表的最后一個(gè)元素。 5.(nth 表) 返回表中第n個(gè)元素(n從0算起)。,23.12.2020,50,1. (setq p(getpoint“
31、n輸入一點(diǎn):”) (setq x(car p) y(cadr p),舉例:,2. (setq p( GPS1 3456.786 23415.674 34.567) (setq dh(car p) x(cadr p) y(nth 2 p) z(last p),23.12.2020,51,八、Command函數(shù),Command函數(shù)是AutoLISP中唯一調(diào)用AutoCAD命令實(shí)現(xiàn)繪圖的途徑,非常重要。 1.作用:使用Command函數(shù)(唯一)可調(diào)用AutoCAD命令。 2.格式:(Command “AutoCAD命令及其選項(xiàng)”),如: (setq p1 (100.453 100.567) p2 (
32、200.254 201.587) (command line p1 p2 ),23.12.2020,52,3.注意事項(xiàng) (1)Command函數(shù)不能調(diào)用AutoLISP的輸入函數(shù),如getpoint、getangle、getstring、getint等。 (2)AutoCAD命令名稱和選項(xiàng)必需放在雙引號(hào)中,并要求雙引號(hào)中不能有空格。 (3)不帶“AutoCAD命令及其選項(xiàng)”,即(command),等效ESC鍵(中止)。 (4)幾個(gè)命令和數(shù)據(jù)可以寫在一個(gè)command函數(shù)中,也可分開寫在兩個(gè)或兩個(gè)以上的command函數(shù)中。如: (Command “l(fā)ine” p1 p2 p3 p4 “” )
33、和 (Command “Pline” p1 p2) (Command p3 p4 “”)等效。,23.12.2020,53,(5)文字注記時(shí),字符串也要用“”括起來。如: (Command “Text” (100 100) 5 “” “AutoLISP”) (6)調(diào)用對(duì)話框命令時(shí),不顯示對(duì)話框,以提示方式執(zhí)行。如:新建“控制點(diǎn)”圖層,設(shè)置圖層為紅色。 (command layer m 控制點(diǎn) c 1 ),23.12.2020,54,舉例:畫一個(gè)邊長為L,中心點(diǎn)坐標(biāo)為P的正三角形,要求底邊水平。,(setq L (getrealn輸入邊長:) (setq P (getpointn輸入中心:) (
34、setq r (* 0.288675134 L) ;求內(nèi)切圓半徑12r*r=L*L (command polygon 3 P c R),23.12.2020,55,3.3 自定義命令和自定義函數(shù),一、自定義函數(shù)(defun),用函數(shù)(defun)可以定義用戶自己的函數(shù),叫自定義函數(shù)。自定義函數(shù)象AutoLISP函數(shù)一樣可以被調(diào)用,比如說,把常用的符號(hào)定義成自定義函數(shù),實(shí)際用時(shí),帶入具體參數(shù)就可以得到圖形,不別再繪制。,23.12.2020,56,1. 自定義函數(shù)格式 (defun 函數(shù)名 變元表 表達(dá)式1 表達(dá)式2 ),例:用自定義函數(shù)方式編寫一個(gè)程序,繪制正三角形。 (defun sjx()
35、 (setq L (getrealn輸入邊長:) (setq P (getpointn輸入中心:) (setq r (* 0.288675134 L) ;求內(nèi)切圓半徑12r*r=L*L (command polygon 3 P c R) ),23.12.2020,57,2.注意 (1)函數(shù)名是用戶自己設(shè)定的,不能與AutoLISP內(nèi)部函數(shù)名、變量名相同; (2)變元表的形式有四種: (參數(shù)1 參數(shù)2),如上例。變元表為此形式 時(shí),調(diào)用要帶參數(shù)。 ( ),無參形式。調(diào)用時(shí)不帶參數(shù)。 (參數(shù)1 參數(shù)2/局部變量1 局部變量2)。變元表為此形式時(shí),調(diào)用要帶參數(shù)。 (/局部變量1 局部變量2)。調(diào)用時(shí)
36、不帶參數(shù)。 / 與參數(shù)、局部變量之間必須有空格。,23.12.2020,58,(3)表達(dá)式是函數(shù)的定義體,完成計(jì)算和繪圖。 (4)自定義函數(shù)的作用:defun函數(shù)用于在AutoLISP程序中定義一個(gè)函數(shù)。它就象其它標(biāo)準(zhǔn)函數(shù)一樣,可以為我所用。使用時(shí),通過不同的參數(shù),可以繪制不同的圖形。,調(diào)用自定義函數(shù)舉例:,;度化弧度自定義函數(shù) (defun hd(af) (setq hhd(/ (* af pi) 180) ),23.12.2020,59,(defun hsjx () (setq L (getreal n輸入邊長:) (setq P (getpoint n輸入中心:) (setq r (*
37、0.288675134 L) ;求內(nèi)切圓半徑 (setq p1 (polar P (hd 210) (* 2 r) ;調(diào)用自定義函數(shù) (setq p2 (polar p1 (hd 0) L) ;調(diào)用自定義函數(shù) (setq p3 (polar p1 (hd 60) L) ;調(diào)用自定義函數(shù) (command line p1 p2 p3 c) ),23.12.2020,60,二、自定義命令,自定義命令的作用是用defun函數(shù)為AutoCAD增加各種新命令。 1.格式 (defun C:() ) 或 (defun C:(/) ),23.12.2020,61,2.注意事項(xiàng) (1)自定義命令格式中是命令名
38、稱;必須有C:(大小寫等效);與C:之間不能有空格。 (2)不能和內(nèi)部或外部函數(shù)名相同;也不能和其它命令同名。 (3)注意與自定函數(shù)的區(qū)別。 3. 自定義命令調(diào)用 加載(load)程序后,在命令行上輸入自定義命令名。,23.12.2020,62,例.編寫計(jì)算三角高程的AutoLISP程序。 程序清單如下: ;計(jì)算三角高程 (defun c:sjgc() (hd) ;調(diào)用自定義函數(shù)hd (setq L(getreal”n斜邊邊長:”) (setq i(getreal”n儀器高:”) (setq v(getreal”n覘標(biāo)高:”) (setq h1 (* L (sin ard) (setq h2
39、(- i v) (setq h (+ h1 h2) ),23.12.2020,63,;把度分秒化成弧度 (defun hd() (setq a (getstring nA:) ;輸入角度(按6.3628形式輸入) (cond (= (strlen a) 6) (setq ad (substr a 1 1) (setq am (substr a 3 2) (setq as (substr a 5 2) ) (= (strlen a) 7) (setq ad (substr a 1 2) (setq am (substr a 4 2) (setq as (substr a 6 2) ),(= (s
40、trlen a) 8) (setq ad (substr a 1 3) (setq am (substr a 5 2) (setq as (substr a 7 2) ) (setq a1 (atof ad) (setq a2 (atof am) (setq a3 (atof as) (setq ar (+ a1 (/ a2 60) (/ a3 3600) (setq ard (/ (* ar pi) 180) (princ ard) (princ),23.12.2020,64,3.4 程序結(jié)構(gòu)函數(shù),程序結(jié)構(gòu)函數(shù)用于控制程序的進(jìn)程,把它叫程序結(jié)構(gòu)函數(shù)。包括:關(guān)系函數(shù)、邏輯函數(shù)、謂詞函數(shù)、條件函
41、數(shù)、循環(huán)函數(shù)。,一、關(guān)系函數(shù) 1.等于 格式:(= atom1 atom2.) 等于函數(shù)(= )判斷數(shù)是否相等。如果相等則條件為真,返回值為T(真值)。同樣,如果不相等,則條件為假,返回值為nil(假值)。,23.12.2020,65,2.不等于 格式:(/= atom1 atom2.) 不等于函數(shù)( / =)判斷數(shù)是否不相等。如果不相等,則條件為真,返回值為T。 3.小于 格式:( atom1 atom2 .) 小于函數(shù)( )判斷前一個(gè)數(shù)( atom1)是否小于后面的作數(shù)( atom2),如果小于,則條件為真,返回值為T,否則返回nil。,23.12.2020,66,4.小于等于 格式:(
42、atom1 atom2.) 大于函數(shù)判斷第一個(gè)數(shù)是否大于第二個(gè)數(shù),如果大于,則條件為真,返回值為T,否則返回nil。 6.大于等于 格式:(= atom1 atom2.),23.12.2020,67,二、邏輯函數(shù) 1.邏輯“與” 格式:(and 表達(dá)式1) 這個(gè)函數(shù)求出表達(dá)式之間的“與”運(yùn)算值,即當(dāng)所有表達(dá)式值同時(shí)為T時(shí),函數(shù)結(jié)果為T,如果其中任何一個(gè)表達(dá)式值為nil,函數(shù)結(jié)果為nil。例如: (setq a 10 b 20) (and ( a 5)( b 5)( b 15) 結(jié)果為nil,23.12.2020,68,2. 邏輯“或” 格式:(or 表達(dá)式1) 這個(gè)函數(shù)求出表達(dá)式之間的“或”運(yùn)
43、算值,即當(dāng)所有表達(dá)式值同時(shí)為nil時(shí),函數(shù)結(jié)果為nil,如果其中任何一個(gè)表達(dá)式值為T,函數(shù)結(jié)果為T。例如: (setq a 10 b 20) (or ( a 15) 結(jié)果為nil (or ( b 15) 結(jié)果為T,23.12.2020,69,3. 邏輯“非” 格式:(not 數(shù)或表達(dá)式) 這個(gè)函數(shù)求出表達(dá)式之間的“非”運(yùn)算值,即當(dāng)“數(shù)或表達(dá)式”值為nil時(shí),函數(shù)結(jié)果為T,否則函數(shù)結(jié)果為NIL。例如: (setq a 10 b 20 c nil) (not a) 結(jié)果為nil (not c) 結(jié)果為T (not (or ( a 15) 結(jié)果為T (not (or ( b 15) 結(jié)果為nil,2
44、3.12.2020,70,三、數(shù)據(jù)謂詞函數(shù)和等值謂詞函數(shù)(自學(xué)) 四、條件函數(shù)和順序處理函數(shù) 1.If函數(shù) 格式: (If ),23.12.2020,71,舉例: (1) (If (= 1 3) “YES” “NO”) 結(jié)果為“NO” (2) (setq a 15) (If (and (= a 10)(= a 18) (setq d 3) (setq c 10) ) 結(jié)果D為3。,23.12.2020,72,2.cond函數(shù) 格式: (cond ) 是邏輯表達(dá)式,為一個(gè)或多個(gè)表達(dá)式。執(zhí)行過程見圖。,23.12.2020,73,舉例: (setq d 0.3) (cond (and(= d 0.
45、2)(= d 0.5)(= d 1.0)(setq c 9.0) ( d 0.6)(setq c 9.0) ) 運(yùn)行結(jié)果為C=10。,23.12.2020,74,3.progn函數(shù) progn函數(shù)通常和If函數(shù)一道用,來控制計(jì)算順序。 格式:(prong 表達(dá)式1),舉例: (setq a 15 b 15.0) (if (= a b) (princ “大家好!”) (setq a (+ a 1) b (+ b 1) ) 運(yùn)行結(jié)果是:大家好! a=15, b=15.0,(setq a 15 b 15.0) (if (= a b) (progn (princ “大家好!”) (setq a (+
46、a 1) b (+ b 1) ) ) 運(yùn)行結(jié)果是:大家好! a=16, b=16.0,23.12.2020,75,五、循環(huán)函數(shù),有兩個(gè)循環(huán)函數(shù):repeat、while。 1.Repeat函數(shù) 格式:(Repeat 數(shù) 表達(dá)式1) 數(shù):必須是正整數(shù)。 表達(dá)式:是循環(huán)體,循環(huán)次數(shù)由數(shù)來決定。最后返回表達(dá)式的值。,舉例: (setq a 10 b 100) (repeat 4,(setq a (+ a 10) (setq b (+ b 100) ),23.12.2020,76,2.while函數(shù) 格式:(while 表達(dá)式1),執(zhí)行過程:先計(jì)算,若為T,則計(jì)算后面若干個(gè)表達(dá)式(循環(huán)體);若為NIL,則退出循環(huán)體。 舉例:按要求畫下列圖形。,23.12.2020,77,(defun C:HY () (setq P0 (getpoint 圓心1:) (setq R (getreal半徑:) (setq L (get
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度農(nóng)業(yè)蔬菜大棚租賃與農(nóng)業(yè)生態(tài)循環(huán)利用合同3篇
- 二零二五年度電商直播內(nèi)容創(chuàng)作與版權(quán)保護(hù)合同3篇
- 2025年房貸借款合同范本大全與風(fēng)險(xiǎn)防范
- 2025年度高端商務(wù)論壇承辦服務(wù)合同范本4篇
- 2025年度個(gè)人藝術(shù)品投資借款合同協(xié)議3篇
- 2025年度個(gè)人地下空間建筑工程施工合同范本4篇
- 二零二五年度儲(chǔ)油罐拆除工程廢棄物處理與資源化利用合同4篇
- 2025版民營醫(yī)院藥房藥師勞動(dòng)合同規(guī)范樣本4篇
- 2025年度頁巖磚工程建設(shè)項(xiàng)目采購合同4篇
- 2025年度網(wǎng)絡(luò)游戲推廣與分成合同范本4篇
- 風(fēng)電場事故案例分析
- 護(hù)理飲食指導(dǎo)整改措施及方案
- 項(xiàng)目工地春節(jié)放假安排及安全措施
- 印染廠安全培訓(xùn)課件
- 紅色主題研學(xué)課程設(shè)計(jì)
- 胸外科手術(shù)圍手術(shù)期處理
- 裝置自動(dòng)控制的先進(jìn)性說明
- 《企業(yè)管理課件:團(tuán)隊(duì)管理知識(shí)點(diǎn)詳解PPT》
- 移動(dòng)商務(wù)內(nèi)容運(yùn)營(吳洪貴)任務(wù)二 軟文的寫作
- 英語詞匯教學(xué)中落實(shí)英語學(xué)科核心素養(yǎng)
- 《插畫設(shè)計(jì)》課程標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論