《AutoLISP從入門到精通初級教程[新手必備]》由會員分享,可在線閱讀,更多相關(guān)《AutoLISP從入門到精通初級教程[新手必備](31頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、.
AutoLISP入門
單元一:AutoLISP主角登場2
單元二:AutoLISP的關(guān)鍵、基本結(jié)構(gòu)及語法4
單元三:快速分類瀏覽AutoLISP功能函數(shù)<一>10
單元四:快速分類瀏覽AutoLISP功能函數(shù)<二>13
單元五:輕松快速的掌握AutoLISP設(shè)計技巧16
單元六:圖元數(shù)據(jù)的取得與活用技巧<一>21
單元七:圖元數(shù)據(jù)的取得與活用技巧<二>25
單元八:新手上路-參數(shù)設(shè)計的關(guān)鍵技巧32
單元一:AutoLISP主角登場
一. AutoLISP 是何方神圣?
1、AutoLISP是AutoCAD的最佳拍檔!
2、AutoLISP內(nèi)含于AutoCAD軟
2、件內(nèi),不用另外花錢買!
3、AutoLISP是強化AutoCAD最好、最直接的『程序語言』!
4、AutoLISP易學(xué)、易用,即使不會程序設(shè)計的AutoCAD使用者,都能在最短的時間內(nèi),寫出令人驚訝、贊嘆的功能!
若說AutoLISP的出現(xiàn),是替 AutoCAD 創(chuàng)造一片天的『最大功臣』,實不為過一點也不夸張!
5、AutoLISP希望您去學(xué)習(xí)它、改善它、發(fā)揮它、享受它.真的!它的威力、魅力無窮!
二. AutoLISP 程序語言的特質(zhì)分析:
學(xué)習(xí)AutoLISP是非常容易的,對初學(xué)者而言,即使沒有學(xué)習(xí)過任何的程序語言,都能很快的上手,寫出精彩漂亮的AutoLISP程序!
語法簡
3、單:不用特殊的變量宣告,非常富有彈性,比起其它的程序語言,它的語法可說是非常簡單而有其獨特的風(fēng)格!
功能函數(shù)強大:除一般性的功能函數(shù)外,又擁有為數(shù)不少控制配合AutoCAD的特殊函數(shù),再加上AutoLISP可直接呼叫執(zhí)行所有AutoCAD的指令,以及掌握運用所有的AutoCAD系統(tǒng)變量,功能之強大令人欣喜不已!
撰寫的環(huán)境不挑剔:只要是一般的文書編輯軟件都適用! 如:Windows的記事本、PE2、PE3、DW3、書中仙、漢書、EDIT....等
直譯式程序:不用再作編譯,『即寫即測、即測即用』,馬上可以在AutoCAD中響應(yīng)效果,馬上就有成就感!
橫跨各作業(yè)平臺:悠然自得,雖然Aut
4、oCAD有DOS、Windows版本之分但是AutoLISP卻可在不改寫的原貌下,加載與執(zhí)行!
三.撰寫 AutoLISP 的動機?
1、欲強化 AutoCAD 原有指令時.
2、欲創(chuàng)造更有用的 AutoCAD 新指令.
3、欲簡化繁瑣的環(huán)境設(shè)定或繪圖步驟時.
4、欲處理參數(shù)式繪圖時.
5、欲做圖面資料讀文件、寫文件.
6、欲做 AutoCAD 簡報展示時.
7、欲達到真正靈活掌控 AutoCAD 時.
8、欲提升自己跨上 AutoCAD 高手列車時.
四.AutoLISP 的效益評估?
1. 對公司負責(zé)人或設(shè)計主管而言:
A. 也許某員工或干部花了20個小時撰寫一個A
5、utoLISP程序,表面上,這將近三天的時間,他連一張圖都沒有畫,甚至可能偶有發(fā)呆、沈思,若此程序一天可以替公司繪圖部門節(jié)省1小時繪圖時間,那算一算,只要20天就抵銷開發(fā)成本,而20天以后都是賺的,『用的愈久,省的愈多』!
B. 若員工皆有此動力,在不影響正常工作,『鼓勵』都來不及,那有『壓抑』的道理,甚至還要派遣優(yōu)秀人員出去受訓(xùn),學(xué)習(xí)更好的設(shè)計技巧與創(chuàng)意呢?!
C. 千萬不要因為您的不懂或壓抑,SHOW您的權(quán)威與POWER,如此,不但對員工造成打擊,甚至您可能成為阻礙了公司計算機化進步的罪魁禍?zhǔn)?
D. 當(dāng)然,若要撰寫的程序很多,內(nèi)部設(shè)計人員的程序功力距離太遠,達成需求的時間反而變
6、得遙遙無期,那倒不如求助于市面上已有的相關(guān) AutoCAD 支持軟件。
2. 對設(shè)計人員而言:
A. 得到一筆提升績效獎金呢? 當(dāng)然,無形中,『AutoCAD 高手的封號』也將功力又往前邁出了一大步,對個人的成長幫助匪淺,幸運的話,搞不好還可以黃袍加身,不亦樂乎!!!
B. 『半桶水、響叮當(dāng)』,千萬不要因為會寫 AutoLISP 程序而自傲、孤僻、囂張起來,功力的增長,只是讓您有更多『服務(wù)他人、服務(wù)公司』的機會,若自恃過重,寧可不要!
C. AutoLISP 程序功力的累進,是無遠弗屆的,千萬不要『孤芳自賞』,『人外有人,天外有天』,也許您覺得是『寶貝加三級』的程序,只是其它設(shè)計師基
7、本程序中的一部份罷了!
D. 既然 AutoLISP 是 AutoCAD 的『最大功臣』,當(dāng)然不會輕易被舍棄,如此,您的學(xué)習(xí),保證不會白費!
E. 『精益求精』、『虛心求教』、『用心學(xué)習(xí)、觀摩』、『決心成為高手』
3.對程序本身而言:
A. 少少的幾行,卻可能有『大大滿意』的時候!!!
B. 充份掌握了控制、創(chuàng)造 AutoCAD 的『尚方寶劍』,讓您在 AutoCAD 的設(shè)計運作中『得心應(yīng)手』,享受無比的快樂與成就感!!!
五.如何有效的學(xué)習(xí) AutoLISP ?
1、先由小程序著手,認識AutoLISP語法規(guī)定!
2、瀏覽所有的AutoLISP功能函數(shù),重要的功能函數(shù)要熟記
8、腦海,俗語說的好『一回生,二回熟』,除非您不用心,否則沒有學(xué)不好的道理!!!
3、要懂得偷懶:不要認為在繪圖的過程中,繁瑣的步驟是合理的,困難的繪圖過程是必須忍耐的,試著用AutoLISP解決看看!
4、多觀摩別人的程序設(shè)計,吸取精華,像海棉一樣=>『吸』、『吸』、『吸』!!!
5、動手『寫』程序比用眼睛看程序,更能夠領(lǐng)略深記腦海!
6、隨時隨地整理您的程序,并加以批注,以免因時間的飛逝,當(dāng)時用心的成果也煙消云散,忘的一乾二凈!!!
7、『決心』是學(xué)好 AutoLISP 最重要的關(guān)鍵!
8、期許自己,要由操作者變成創(chuàng)造者!!!
單元二:AutoLISP的關(guān)鍵、基本結(jié)構(gòu)及語法
9、
一、學(xué)好 AutoLISP 的關(guān)鍵、基本結(jié)構(gòu)與語法:
1. AutoLISP 程序語言的特質(zhì)
A.語法簡單
B.功能函數(shù)強大
C.撰寫的環(huán)境不挑剃
D.直譯式程序,『即寫即測、即測即用』
E.橫跨 AutoCAD 各作業(yè)平臺,悠然自得 <注:以上五點,讀者可以參考上一章的剖析!!!>
2.學(xué)好 AutoLISP 的關(guān)鍵:充份掌握『語法結(jié)構(gòu)』&『功能函數(shù)』的搭配!!!
3.重要的 AutoLISP 的基本語法結(jié)構(gòu)
規(guī)則1:以括號組成表達式,、相對稱左右括號數(shù)一定要成雙成對
規(guī)則2:表達式型態(tài):<操作數(shù)運算子運算子運算子>
1.1 操作數(shù)包括『功能函數(shù)』&『自定函式』
10、
1.2 運算子<自變量>包括:
A.整數(shù) 如 8,-17,500,9999 .....
B.實數(shù) 如 8.5,-17.456 .....
C.字符串 如 "AutoCAD","123"
D.串行 如 <"a" "b" "c">,
E.圖元名稱代碼如
F.檔案代碼如 .....
G.選擇群集代碼如
規(guī)則3:表達式中的『運算子』,可以是另一『表達式』或『子程序』
規(guī)則4:多重的括號表達式,運算的先后順序
11、是『由內(nèi)而外、由左而右』
規(guī)則5:以檔案型態(tài)存在的 AutoLISP 程序,其擴展名必須是.lsp
規(guī)則6:撰寫的環(huán)境,只要是一般的文書編輯軟件、記事本,可編輯 ASCII 檔案者都適用
規(guī)則7:以 defun 功能函數(shù)定義新的指令或新的功能函式
規(guī)則8:新定義的功能函式名稱,若為『C:函式名』,則此函式可為 AutoCAD新指令
規(guī)則9:加載 AutoLISP 程序的作法:=> 指令:后直接鍵入
規(guī)則10: AutoLISP 程序中,在『分號 ;』后的內(nèi)容均為批注,程序不處理,適時的增加批注,將使程序更具可看性、學(xué)習(xí)性及完整性
12、
規(guī)則11: AutoLISP 最常用的變量型態(tài)是『整數(shù)』、『實數(shù)』、『字符串』、『點串行』四種,變量的型態(tài)依據(jù)設(shè)定值而自動定義,變量會一直儲存該值,直到被重新設(shè)定值或繪圖結(jié)束自動消失
規(guī)則12:以 setq 功能函數(shù)設(shè)定變量值
規(guī)則13:欲在 AutoCAD 的環(huán)境中,查看一變量值,指令:下鍵入『!變量名』即可
規(guī)則14:以 ........>程序中,程序中的變量若在『/』右邊變量內(nèi),則稱為『區(qū)域變量』,否則為『整體變量』
二、學(xué)好 AutoLISP 的關(guān)鍵:
充份掌握『語法結(jié)構(gòu)』&『功能函數(shù)』的搭配!!
13、! 其時這個關(guān)鍵亦是學(xué)習(xí)其它程序語言的關(guān)鍵.
*『語法結(jié)構(gòu)』AutoLISP 的語法結(jié)構(gòu)規(guī)定的并不多,變量不用事先定義及宣告,讀者可熟記下一單元有關(guān)重要的 AutoLISP基本語法結(jié)構(gòu),十四條設(shè)計上要求的『規(guī)則』
*『功能函數(shù)』AutoLISP 之所以能功能如此強大,都有賴功能函數(shù),其成員共約200個:
1、一般性函數(shù)170個
2、ADS 定義特殊函數(shù)9個
3、配合 DCL 交談框設(shè)計函數(shù) 22個
各功能函數(shù)在使用上要求配合的運算子<自變量>型態(tài),均有其規(guī)定,當(dāng)然,您可不能亂給!
例如:
指令:<+ 1 2 3 "ABC">
傳回:error : bad argume
14、nt type <自變量型態(tài)錯誤>
因為『+』函數(shù)不接受字符串,而 "abc" 正是字符串
指令:
傳回:error : bad argument type <自變量型態(tài)錯誤>
因為『rtos』函數(shù)只接受實數(shù)轉(zhuǎn)字符串
詳細內(nèi)容可參考下一章『快速瀏覽 AutoLISP 功能函數(shù)』至于各功能函數(shù)詳細的語法與實例應(yīng)用,讀者請參閱本書『第三篇AutoLISP功能函數(shù)詳解』
三、重要的 AutoLISP 的基本語法結(jié)構(gòu):
規(guī)則1:以括號組成表達式,左右括號數(shù)一定要成雙成對、相對稱
請依序在『指令:』列 <或指令:> 后面直接鍵入以下表達式
指令:<+ 1 2 3
15、 4 5> 傳回加總和15
指令: 傳回最大值35
指令: 顯示拉下POP1
指令: 傳回Enter Real:要求輸入一個實數(shù)
指令:> 傳回相乘值 50,同時設(shè)定給『變量 a』
指令:!a 回應(yīng)50 <注:! 號可用來查詢變數(shù)值>
指令: 響應(yīng)最小值50 <因為變量值a代表50>
錯誤的范例:
指令:
1> 傳回1>表示少了一個括號
1> > 此時,只要再補上一個
16、> 即可
指令: 傳回2>表示少了二個括號
2> >> 此時,只要再補上二個 > 即可
規(guī)則2:表達式型態(tài) <操作數(shù)運算子運算子運算子 ...>或 <函數(shù)<式> 自變量自變量自變量 ...>
或 <函數(shù)<式> 元素元素元素 ...>
1.1 操作數(shù)包括『功能函數(shù)』&『自定函式』
功能函數(shù): 如上練習(xí)中的 +、max、menucmd、getint、 setq、*、min,詳細內(nèi)容可參考下一章『快速瀏覽 AutoLISP 功能函數(shù)』&『第三篇 AutoLISP功能函數(shù)詳解』
自定函式: 由設(shè)計者自行定義的新函式或子程序
1.2 運算子<又稱
17、自變量或元素>包括:
A.整數(shù): 如8,-17,500,9999…
正常范圍: 2的16次方,介于-32768與+32767之間
特殊范圍: 若以 float 函數(shù)將其轉(zhuǎn)為實數(shù),則范圍2的32次方, 介于-2147483648與+2147483647之間
B.實數(shù): 如8.5,-17.456…
正常范圍: 帶有小數(shù)點的數(shù),精度可達 14 位有效數(shù)字
C.字符串: 如 "AutoCAD","123","Enter Real:","7.5",…
正常范圍: 以雙引號內(nèi)夾『字符』為認定,字符數(shù)不受限制
D.串行: 如 <"a"
18、 "b" "c">,,,<"a" 8 3.5>,....
正常范圍: 以左右括號內(nèi)夾『元素』為認定,元素型態(tài)非常彈性
使用頻率: 在 AutoLISP 程序設(shè)計中應(yīng)用非常高
范例說明 : <"a" 8 3.5 kk <1 2>>
表示此串行內(nèi)有五個元素 "a"表示字符串a(chǎn)、8表示整數(shù)8、3.5表示實數(shù)3.5、kk表示變量kk、<1 2>表示串行<1 2>
2D 點坐標(biāo) 表示法 => 以二實數(shù)形成串行
3D 點坐標(biāo) 表示法 => 以三實數(shù)形成串行
E.圖元名稱代碼:如 ...
使用范圍
19、: AutoCAD 會自動賦予圖元指向代碼,透過此代碼可找到圖元的數(shù)據(jù)庫記錄
范例說明: >
傳回
可找到圖元的數(shù)據(jù)庫串行
F.檔案代碼: 如…
使用范圍: 開啟檔案作讀檔、寫檔使用時,所產(chǎn)生的代碼,如下:
范例說明:
> 回應(yīng)
> 回應(yīng)
G.選
20、擇群集代碼: 如、…
使用范圍: 一個或數(shù)個圖元所形成的選擇集
范例說明:
>
選取對象: <可選擇物體>
選取對象: <可選擇物體>
選取對象: <按 [ENTER] 鍵>
回應(yīng)
規(guī)則3 :表達式中的『運算子』,可以是另一『表達式』或『子程序』功能函數(shù)使用語法:
字符串結(jié)合功能函數(shù)
要求鍵入一個字符串
將實數(shù)轉(zhuǎn)換成字符串
范例說
21、明1: 傳回:"abc123LISP"
范例說明2: >
執(zhí)行結(jié)果: Enter String: 鍵入任一字符串,假設(shè)是鍵入 *HELLO*
回應(yīng) "abc*HELLO*123.45"
本例中的strcat函數(shù)在語法中要求的『運算子』必須是『字符串』型態(tài)
『運算子1』= "abc" 是正常的字符串運算子
『運算子2』= 表達式 傳回結(jié)果是一字符串 "*HELLO
22、*"
『運算子3』= 表達式 傳回結(jié)果是一字符串 "123.45"
規(guī)則4:多重的括號表達式,運算的先后順序是『由內(nèi)而外、由左而右』
范例說明: 請將10.25 + 17 - 13.2 / 7的結(jié)果,設(shè)定給變量kk,并轉(zhuǎn)換成AutoLISP 的表達式
解法技巧A:
1:運用『二分法、加括號』:<10.25 + 17> - <13.2 / 7>
2:操作數(shù)往前提: kk = <- <10.25 + 17> <13.2 / 7>>
3:操作數(shù)再往前提:kk = <- <+ 10.25 17> 13.2 7>>
4:轉(zhuǎn)換完成:
23、 <+ 10.25 17> 13.2 7>>>
解法技巧B:
1:運用『二分法、加括號』:<10.25 + <17 - <13.2 / 7>>>
2:操作數(shù)往前提: kk = <+ 10.25 <17 - <13.2 / 7>>>
3:操作數(shù)再往前提:kk = <+ 10.25 <- 17 13.2 7>>>
4:轉(zhuǎn)換完成: >>>
規(guī)則5:以檔案型態(tài)存在的AutoLISP程序,其擴展名必須是.LSP
規(guī)則6:撰寫的環(huán)境,只要是一般的文書編輯軟件,可編輯 ASCII 檔案者都適用
24、如:PE2、PE3、DW3、書中仙、漢書、EDIT、記事本....等
規(guī)則7:以 defun 功能函數(shù)定義新的指令或新的功能函式 <注:自變量及區(qū)域變量可省略>
程序結(jié)構(gòu)型態(tài):
: :
: : 程序內(nèi)容
: :
>
規(guī)則8:新定義的功能函式名稱,若為『C:函式名』,則此函式可為 AutoCAD 新指令
<注:自變量及區(qū)域變量可省略>
程序結(jié)構(gòu)型態(tài):
: :程序內(nèi)容
: :
: :
>
則加載此 LISP 程序后,可在指令: 后直接鍵入新定義的 KK 指令
規(guī)則9:加載AutoL
25、ISP程序的作法:指令:后直接鍵入
注:load 與字符串間的空格,可有可無
注:load 與雙引號間的空格,可有可無
范例: 在 c:\lsptools 目錄下有一LISP程序tt.lsp,而您目前的工作目錄在c:\dwg下
若『環(huán)境設(shè)定』之『支持檔案搜尋路徑』有指定到c:\lsptools目錄,則欲使用加載tt.lspà指令:后鍵入 即可
若『環(huán)境設(shè)定』之『支持檔案搜尋路徑』無指定到c:\lsptools目錄,則鍵入 后,會出現(xiàn)錯誤訊息如下:
無法開啟「tt.lsp
26、」做輸入錯誤: 載入失敗*取消*
此時您可鍵入:
指令: 或
指令:
不可鍵入:
因為『\』在 AutoLISP 結(jié)構(gòu)語法中已經(jīng)用于『跳脫碼控制』了
規(guī)則10:AutoLISP 程序中,在『分號 ;』后的內(nèi)容均為批注,程序不處理,適時的增加批注,將使程序更具可看性、學(xué)習(xí)性及完整性
范例: pp.lsp 內(nèi)容如下:
;本程序功能可快速畫門、窗
;設(shè)計者:QQ博士
;版權(quán)所有,歡迎使用
27、
: :
; 以下為畫門子程序
: :
; 以下為畫窗子程序,
: :
: :
>
規(guī)則11:AutoLISP 最常用的變量型態(tài)是『整數(shù)』、『實數(shù)』、『字符串』、『點串行』四種,變量的型態(tài)依據(jù)設(shè)定值而自動定義,變量會一直儲存該值,直到被重新設(shè)定值或繪圖結(jié)束自動消失
規(guī)則12:以 setq 功能函數(shù)設(shè)定變量值
范例:
;變量 a 值設(shè)定成整數(shù) 100
;變量b值設(shè)定成實數(shù)123.56
;變量 c 值設(shè)定成字符串
28、t1 > ;變量 pt1 值設(shè)定成點串行
>
;此時,a值是100,b值是123.56變量pt2值設(shè)定成點串行<100 123.56>
> ;變量 pt3 值設(shè)定成點串行 <297 210>
注意: 直接設(shè)定成點串行時,不能省略單引號『'』否則會被誤認 <297 210>又是一個表達式, 297是操作數(shù)而出錯!
規(guī)則13:欲在 AutoCAD 的環(huán)境中,查看一變量值,指令:下鍵入『!變量名』即可
范例:
指令:>
29、 傳回:175
指令:!aa 傳回:175
指令:> 傳回:<90 50>
指令:!pp 傳回: <90 50>
指令:!ww 傳回:nil 空值無設(shè)定
規(guī)則14:以 ........>程序中,程序中的變量若在『/』右邊變量內(nèi),則稱為『區(qū)域變量』,否則為『整體變量』<注:在 AutoLISP 中,未賦予值的變量,其值皆響應(yīng) nil>
『區(qū)域變量』于此程序執(zhí)行完畢后,其值自動消失
『整體變量』于此程序執(zhí)行完畢后,其值仍然存在
范例: test.lsp 內(nèi)容如下
30、 sb sc>
>
>
回到:指令:鍵入 傳回:c:tt
指令:tt 傳回:130
指令:!sa 傳回:nil <屬區(qū)域變量>
指令:!sb 傳回:nil <屬區(qū)域變量>
指令:!sc 傳回:nil <屬區(qū)域變量>
指令:!sd 傳回:130 <屬整體變量>
單元三:快速分類瀏覽AutoLISP功能函數(shù)<一>
一、看到以下那么多的 AutoLISP 功能函數(shù),洋洋灑灑17大類:
1、您第一個念頭,一定驚訝怎么會那么多,您可
31、能快嚇壞了!
2、您第二個念頭,一定會想『那么多,怎么記得下來』,您可能快放棄了!
二、其實,您應(yīng)該要『很興奮』而『充滿信心』的,怎么說呢?
1、您有那么多的『大將』協(xié)助您撰寫 AutoLISP 程序,當(dāng)然左右又逢源,不但輕松, 而且要快樂的不得了!!!
2、這些函數(shù)只要您先瀏覽有印象, 要用時,再翻查該函數(shù),了解用途語法再加入到您的程序中就可以了!!!
3、常用的函數(shù),寫久、用久后,自然會深深牢記腦海,想忘都很難,不常用的函數(shù), 若硬要您記下來,相信連高手都很困難,更何況是初學(xué)的您!!!
4、您不用再摸不著頭緒了,因為您幸運的擁有了本書,就是您成功的開始!!!
第一類數(shù)學(xué)運算功
32、能函數(shù)
項目
函數(shù)語法傳回
1.1 <+ 數(shù)值數(shù)值 ...> 累計實數(shù)或整數(shù)數(shù)值
1.2 <- 數(shù)值數(shù)值 ...> 減去數(shù)值
1.3 <* 數(shù)值數(shù)值 ...> 所有數(shù)值乘積
1.4 數(shù)值數(shù)值 ...> 第一個數(shù)值除以第二個以后數(shù)值的商
1.5 <1+ 數(shù)值> 數(shù)值+1
1.6 <1- 數(shù)值> 數(shù)值-1
1.7 數(shù)值的絕對值
1.8 反正切值
1.9 角度的余弦值,角度值為弧度。
1.10 數(shù)值的指數(shù)
1.11 基數(shù)的指數(shù)值
1.12
33、值> 將數(shù)值轉(zhuǎn)換為整數(shù)值 〔取整
1.13 將數(shù)值轉(zhuǎn)換為實數(shù)值
1.14 二數(shù)值的最大公因子 〔greatest common divisor
1.15 數(shù)值的自然對數(shù)值 〔相當(dāng)于ln……
1.16 數(shù)值中的最大值
1.17 數(shù)值中的最小值
1.18 pi 常數(shù)p ,其值約為 3.1415926
1.19 二數(shù)值的相除的余數(shù) 〔remainder
1.20 角度的正旋值,角度值為弳度
1.21 <
34、sqrt 數(shù)值> 數(shù)值的平方根
第二類檢驗 & 邏輯運算功能函數(shù)
項目函數(shù)語法傳回
2.1 <= 表示式1 表示式2> 比較表示式1是否等于表示式2適用數(shù)值及字符串
2.2 = 表示式1 表示式2> 比較表示式1是否不等于表示式 2
2.3 << 表示式1 表示式2> 比較表示式 1 是否 <小于表示式 2
2.4 <<= 表示式1 表示式2> 比較表示式 1 是否 <=小于等于表示式 2
2.5 <> 表示式1 表示式2> 比較表示式 1 是否 >大于表示式 2
2.6 <>= 表示式1 表示式2> 比較表示式1是否大于等于表示式2
2.7 <~ 數(shù)值> 傳回:數(shù)
35、值的位not值,<1的補碼>
2.8 邏輯and的結(jié)果
2.9 位式布爾運算
2.10 比較表示式1與表示式2是否相同, 適用串行比較<實際相同>
2.11 比較表示式1與表示式2是否相同, 差量可省略<內(nèi)容相同>
第三類轉(zhuǎn)換運算功能函數(shù)
項目函數(shù)語法傳回
3.1 角度值〔單位為度的字符串轉(zhuǎn)成實數(shù)
3.2 角度〔單位為弧度轉(zhuǎn)成的字符串值
3.3 <
36、atof 字符串> 字符串轉(zhuǎn)成實數(shù)值
3.4 字符串轉(zhuǎn)成整數(shù)值
3.5 數(shù)值轉(zhuǎn)換單位后的值轉(zhuǎn)換根據(jù) acad.unt 檔案
3.6 依模式將字符串轉(zhuǎn)成實數(shù)值
3.7 整數(shù)轉(zhuǎn)成字符串
3.8 實數(shù)轉(zhuǎn)成字符串
3.9 轉(zhuǎn)換坐標(biāo)系統(tǒng)值
第四類串行處理功能函數(shù)
項目函數(shù)語法傳回
4.1 結(jié)合所有串行成一個串行
4.2
37、素聯(lián)合串行> 依關(guān)鍵元素找尋聯(lián)合串行中關(guān)系數(shù)據(jù)
4.3 串行中的第一個元素通常用來求 x 坐標(biāo)
4.4 串行中的第二個元素通常用來求 y 坐標(biāo)
4.5 串行中的第三個元素通常用來求 z 坐標(biāo)
4.6 除去第一個元素后的串行
4.7 將新元素結(jié)合到串行
4.8 將串行的每一元素對應(yīng)至名稱再依表示式執(zhí)行響應(yīng)
4.9 串行內(nèi)的元素數(shù)量
4.10 將所有元素結(jié)合成一串行
4.11
38、 判斷元素是否為一串
4.12 將串行1、串行2、…等串行的元素配合函數(shù),求得新串行
4.13 取關(guān)鍵元素<含>以后的串行
4.14 串行的第n個元素 〔串行中的元素是從0開始編號的
4.15 將串行元素依順序顛倒過來的串行
4.16 用新項替換串行中的舊項
第五類字符串、字符、檔案處理功能函數(shù)
項目函數(shù)語法傳回
5.1 字符串第一個字符
39、的『ASCII』碼 〔a~z:97~122;A~Z:65~90
5.2 整數(shù)所對應(yīng)的 ASCII 單一字符串
5.3 關(guān)閉檔案
5.4 開啟檔案代碼,準(zhǔn)備讀取或?qū)懭霐?shù)據(jù)
5.5 串行中的字符串的第一組元素
5.6 經(jīng)由鍵盤或檔案中讀取單一字符
5.7 經(jīng)由鍵盤或檔案中讀取一行字符串
5.8 轉(zhuǎn)換字符串大小寫
5.9
40、將各字符串結(jié)合成一字符串
5.10 字符串構(gòu)成的字符數(shù)<即字符串長度>
5.11 取出子字符串
5.12 T或nil,將字符串與通用字符進行比對
5.13 將一ASCII字符寫到檔案或屏幕
5.14 將字符串寫到檔案或屏幕上
第六類等待輸入功能函數(shù)
項目函數(shù)語法傳回
6.1 請求輸入十進制角度數(shù)值,響應(yīng)一弧度值提示及參考點可有可無
6.2
41、 請求輸入另一矩框?qū)屈c坐標(biāo)
6.3 請求輸入一段距離
6.4 請求輸入一整數(shù)值
6.5 請求輸入『關(guān)鍵詞』
6.6 請求輸入十進制角度,響應(yīng)一弧度值不受angbase、angdir影響
6.7 請求輸入一個點坐標(biāo)
6.8 請求輸入一實數(shù)
6.9 請求輸入一字符串
6.10 <
42、initget [位] 字符串> 設(shè)定下次 getxxx 函數(shù)的有效輸入
第七類幾何運算功能函數(shù)
項目函數(shù)語法傳回
7.1 取得二點的角度弧度值
7.2 取得二點的距離
7.3 取得兩條線的交點
7.4 依輔助抓點模式取得另一坐標(biāo)點
7.5 依極坐標(biāo)法取得另一坐標(biāo)點
7.6 取得文字符串的二對角點坐標(biāo)
第八類圖元處理功能函數(shù)
項目函數(shù)語法傳回
8.1 <
43、entdel 圖元名稱> 刪除或逆刪除圖元
8.2 取出圖元名稱的數(shù)據(jù)串行
8.3 取出圖形數(shù)據(jù)中的最后一個圖元
8.4 建立一個新的圖元串行
8.5 依更新的數(shù)據(jù)串行更新屏幕上元體
8.6 找尋圖面中的下一個圖元
8.7 請求選取一個圖元,響應(yīng)包含圖元名稱及選點坐標(biāo)的串行
8.8 更新屏幕上復(fù)元體圖形
8.9 圖碼的元體名稱
8
44、.10 BLOCK所含副元體圖元數(shù)據(jù)串行
8.11 BLOCK所含副元體圖元數(shù)據(jù)<以4 x 4矩形表示>
單元四:快速分類瀏覽AutoLISP功能函數(shù)<二>
第九類選擇集、符號表處理功能函數(shù)
項目
函數(shù)語法傳回
9.1 將圖元加入選擇集或建立一新選擇集
9.2 將圖元自選擇集中移出
9.3 取得一個選擇集
9.4 取得依過濾串行所指定范圍的選
45、擇集
9.5 計算選擇集的圖元個數(shù)
9.6 響應(yīng)圖元名稱是否包含于選擇集內(nèi)
9.7 依索引值取出選擇集中的圖元名稱
9.8 檢視符號表,有效的符號表: "LAYER"、"LTYPE"、"VIEW"、"STYLE"、"BLOCK"
9.9 在符號表中搜尋符號
第十類 AutoCAD 相關(guān)查詢、控制功能函數(shù)
項目
函數(shù)語法傳回
10.1 呼叫執(zhí)
46、行AutoCAD指令
10.2 傳回:應(yīng)該文件名的路徑及文件名
10.3 透過標(biāo)準(zhǔn)AutoCAD檔案對話DCL交談框求得檔案
10.4 取得該環(huán)境變量的設(shè)定值,以字符串表示
10.5 取得該系統(tǒng)變量的設(shè)定值,以字符串表示
10.6 設(shè)定該系統(tǒng)變量的值
10.7 將目前的AutoCAD圖形登記為一個應(yīng)用程序名稱
第十一類判斷式、循環(huán)相關(guān)功能函數(shù)
項目
函數(shù)語法傳回
47、
11.1 <表示式1> [表示式2]> 檢算比較式結(jié)果,如果為真,執(zhí)行<表示式1>否則,執(zhí)行<表示式2>
11.2 <表達式> ...]> 重復(fù)執(zhí)行<整數(shù)>次數(shù)
11.3 透過標(biāo)準(zhǔn) AutoCAD 檔案對話DCL交談框求得檔案
11.4 取得該環(huán)境變量的設(shè)定值,以字符串表示
11.5 連結(jié)其內(nèi)的表達式為一組,常用于配合if、cond等函數(shù)
第十二類函數(shù)處理、定義、追蹤 & 錯誤處理功能函數(shù)
項目
函數(shù)語
48、法傳回
12.1 <*error* 字符串> 程序錯誤時的警示訊息
12.2 以交談框式顯示出警告字符串
12.3 將功能函數(shù)與串行結(jié)合后執(zhí)行
12.4 自定函數(shù)或子程序
12.5 傳回:表示式的執(zhí)行結(jié)果
12.6 強制退出目前的應(yīng)用程序
12.7 定義未具名的函數(shù)
12.8 連結(jié)其內(nèi)的表達式為一組,常用于配合if、cond等函數(shù)
12.9
49、t> 強制退出目前的應(yīng)用程序
12.10 取用或建立對數(shù)字板的校調(diào)
12.11 對函數(shù)設(shè)定追蹤旗號,輔助除錯
12.12 對函數(shù)設(shè)定解除追蹤旗號
第十三類顯示、打印控制功能函數(shù)
項目
函數(shù)語法傳回
13.1 作圖環(huán)境切換到圖形畫面
13.2 暫時清除模前的屏幕畫面
13.3 暫時性的畫出一條線
13.4 由輸入設(shè)備讀取追蹤值
13.5
50、text 位置字符串 [亮顯]> 將字符串顯示在狀態(tài)列或屏幕菜單上
13.6 暫時性的畫出多條線
13.7 提供在AutoLISP中呼叫各菜單
13.8 將表示式打印于命令區(qū)或已開啟的檔案,句柄字符則以"\" 為前綴展開
13.9 除句柄字符則不以 "\" 為前綴展開外其余同prin1
13.10 除表示式會往下一新行列出,及一空格外其余同prin1
13.11
51、將訊息顯示于屏幕的命令區(qū),并隨后響應(yīng)一個nil訊息
13.12 重繪整張圖或依圖元名稱重繪該圖形
13.13 在屏幕上顯示新列
13.14 作圖環(huán)境切換到文字畫面
13.15 清除文字畫面文字類似DOS的cls指令
13.16 傳回:窗口組態(tài)串行
第十四類符號、元素、表示式處理功能函數(shù)
項目
函數(shù)語法傳回
14.1 如果元素不是串行,響應(yīng) T,否則為 nil
14.2 傳回
52、:一組已定義函數(shù)的符號串行
14.3 傳回:T或nil,響應(yīng)表示式是否有值存在
14.4 傳回:T 或 nil,元素是否為負值
14.5 傳回:T 或 nil,判定元素是否為 nil
14.6 傳回:T或nil判定元素是否被賦予nil值
14.7 傳回:T或nil,元素是否為整數(shù)或?qū)崝?shù)
14.8 <... '表示式> 響應(yīng)表示式未檢算前狀態(tài)
14.9 響應(yīng)表示式未檢算前狀態(tài),同『'』功能
14.10 將表
53、示式結(jié)果設(shè)定給帶單引號 ' 符號
14.11 設(shè)定表示式結(jié)果給各符號
14.12 傳回:元素的數(shù)據(jù)型態(tài)
143.13 傳回:T 或 nil,元素是否為 0 值
第十五類 ADS、AutoLISP 加載與釋放函數(shù)
項目
函數(shù)語法傳回
15.1 傳回:目前加載ADS程序串行
15.2 傳回:目前AutoLISP版本字符串
15.3 載入AutoLISP檔案<*.lsp>
15.4
54、應(yīng)用程序名稱> [錯誤響應(yīng)]> 加載一個ARX應(yīng)用程序文件
15.5 [錯誤響應(yīng)]> 釋放ARX應(yīng)用程序文件
15.6 <指令定義>> 加載一個關(guān)連式的ARX檔
15.7 加載一個關(guān)連式的AutoLISP檔
15.8 <指令定義>> 加載一個關(guān)連式的ADS檔
15.9 加載ADS應(yīng)用程序
15.10 釋放ADS應(yīng)用程序
55、
第十六類內(nèi)存空間管理函數(shù)
項目
函數(shù)語法傳回
16.1 以節(jié)點數(shù)值設(shè)定區(qū)段大小
16.2 以區(qū)段數(shù)值配置節(jié)點空間
16.3 強制收回廢內(nèi)存
16.4 顯示目前的內(nèi)存使用狀態(tài)
16.5 釋放ADS應(yīng)用程序
16.6 傳回圖元延伸數(shù)據(jù)允用得內(nèi)存空間
16.7 傳回圖元延伸數(shù)據(jù)所占用的內(nèi)存空間
第十七類 ARX 定義的函數(shù)
項目
函數(shù)語法傳回
17.1 顯示出標(biāo)準(zhǔn)AutoCAD顏
56、色選擇交談框
17.2 顯示出標(biāo)準(zhǔn) AutoCAD 求助交談框
17.3 作串行排序
單元五:輕松快速的掌握AutoLISP設(shè)計技巧
一、AutoLISP 程序設(shè)計的四個步驟:
1.第一步驟:產(chǎn)生寫程序的動機、預(yù)期目標(biāo)
2.第二步驟:構(gòu)思程序流程、所需之LISP功能函數(shù)、相關(guān)變量訂定&提示訊息
3.第三步驟:利用文書軟件 <如記事本> 撰寫xxx.lsp程序
4.第四步驟:回到AutoCAD下,加載AutoLISP程序以 或
5
57、.第五步驟:執(zhí)行新的 AutoLISP 指令
二、透過簡單范例全程演練AutoLISP:
1.第一步驟:動機、預(yù)期目標(biāo)
2.第二步驟:構(gòu)思程序相關(guān)變量訂定
定出程序名為 pbox.lsp
構(gòu)思程序流程、相關(guān)變量:變量名稱可自行設(shè)定<如 pa、ww、hh、pb、pc、pd、mp1、mp2、mp3、mp4>,掌握三個原則:
*不可重復(fù)
*好記不會混淆
*適時的以分號『;』加上批注
;以下 pa、ww、hh 值須由使用者輸入
>
>
58、入矩形高度實數(shù)值>>
;以下pb、pc、pd值須由程序依據(jù)pa、ww、hh求出
>
>
>
;以下依據(jù) pa、pb、pc、pd 點畫矩形
<以pline指令畫出矩形>
;以下mp1、mp2、mp3、mp4值須由程序依據(jù)pa、ww、hh
;& pb、pc、pd 值求出
>
>
>
59、
>
;以下依據(jù) mp1、mp2、mp3、mp4 點畫出二條線
<以 line 指令畫出 mp1 到 mp3 的線>
<以 line 指令畫出 mp2 到 mp4 的線>
>
本程序所需的 AutoLISP功能函數(shù)及其用法
<-- 請求輸入一個點坐標(biāo)
<-- 請求輸入一實數(shù)
<-- 依極坐標(biāo)法取得另一坐標(biāo)點
其中『弳度值』之轉(zhuǎn)換為:
十進制角度弳度值十進制轉(zhuǎn)弳度公式
0度 0 0
90度 1/2π pi 2> 或 <
60、* pi 0.5>
180度π pi
270度 2/3π <* pi 1.5>
N度π*N/180 <* pi n 180>>
<--呼叫執(zhí)行 AutoCAD 指令
注意:指令及其副選項皆要用雙引號處理
假設(shè) pa、pb、pc、pd 皆為變量,其值為點坐標(biāo)
正確:
錯誤:
原因:指令 pline 及其副選項 c 皆沒用雙引號括住
錯誤:
61、 pd c>
原因:副選項c <代表 close> 沒用雙引號括住,會被誤認為是
AutoLISP的變量名,但事實又沒有 c 這個變數(shù)
錯誤:
原因:變數(shù) pa、pb、pc、pd 不須用雙引號括住
注意:副選項中,若使用 "" ,連續(xù)二個雙引號,代表按 [ENTER] 鍵
若想畫一條 pa 到 pc 的 LINE & 一條 pb 到 pd 的 LINE
正確:
錯誤:
62、ne" pa pc>
其它相關(guān)接近的功能函數(shù)...
?請求輸入一段距離
?請求輸入一整數(shù)值
?請求輸入另一矩框?qū)屈c坐標(biāo)
?傳回:串行中的第一個元素通常用來求x坐標(biāo)
?傳回:串行中的第二個元素通常用來求 y 坐標(biāo)
?傳回:串行中的第三個元素通常用來求z坐標(biāo)
3.第三步驟:利用 PE2、CE 或記事本,撰寫 PBOX.LSP 程序并儲存到 C:\LISPTOOL 目錄下
63、!!!
;以下 pa、ww、hh 值須由使用者輸入
>
>
>
;以下pb、pc、pd值須由程序依據(jù)pa、ww、hh求出
>
hh>>
>
;以下依據(jù) pa、pb、pc、pd 點畫矩形
64、and "pline" pa pb pc pd "c">
;以下mp1、mp2、mp3、mp4值須由程序依據(jù)pa、ww、hh
;& pb、pc、pd 值求出
>>
hh 2>>>
>>
hh 2>>>
;以下依據(jù) mp1、mp2、mp3、mp4 點畫出二條線
65、"line" mp2 mp4 "">
>
4.第四步驟:回到 AutoCAD 下,加載 AutoLISP 程序
若您的AutoCAD『環(huán)境設(shè)定』中『支持文件搜尋路徑』有加上 c:\lisptool,則您可輕松載入 pbox.lsp 程序
指令: 傳回:c:pbox
或指令: 傳回:c:pbox
或指令: 傳回:c:pbox
若您的AutoCAD『環(huán)境設(shè)定』中『支持文件搜尋路徑』并未加上 c:\lisptool,
則您載入 pbox.lsp 程序時,須包含程序所在路徑:
錯誤的加載:指令:
66、ad "pbox">
會出現(xiàn):無法開啟「pbox.lsp」做輸入
錯誤: 加載失敗
*取消
正確的加載方式:
指令: 傳回:c:pbox
或:指令: 傳回:c:pbox
5.第五步驟:執(zhí)行新的 AutoLISP 指令
指令:pbox <-- 成功加載后,直接鍵入 pbox 指令
Enter Left/Low Point: <-- 請給一左下角點
Width: <-- 給一實數(shù)當(dāng)寬度,例如100
Hieght: <-- 給一實數(shù)當(dāng)高度,例如50
指令:nil
指令
三、PBOX.LSP 程序產(chǎn)生的問題 & 改良
1. 原程序雖是成功的加載執(zhí)行了,但卻有以下幾點小問題:
問題1:給完左下角點后,『Width:』及『Height:』提示卻在同一行出現(xiàn),應(yīng)該一個提示各別一行才好???
ANS:很簡單,只要做如下的改變,加入『\n』即可!!!
>à