版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
會(huì)計(jì)學(xué)1AutoCAD軟件的二次開發(fā)7.1AutoLISP簡(jiǎn)介3.AutoLISP的典型應(yīng)用參數(shù)化繪圖程序設(shè)計(jì)尺寸驅(qū)動(dòng)程序:通過改變實(shí)體標(biāo)注尺寸值,實(shí)現(xiàn)圖形的自動(dòng)修改;鼠標(biāo)驅(qū)動(dòng)程序:讓用戶直接讀取AutoCAD的輸入設(shè)備,任選項(xiàng)追蹤光標(biāo)移動(dòng)存在且為真時(shí),調(diào)整所需參數(shù)值而達(dá)到自動(dòng)改變屏幕圖形的屬性。驅(qū)動(dòng)利用AutoCAD提供的可編程對(duì)話框PDB(ProgrammingDialogBox)模板構(gòu)成的DCL(DialogControlLanguage)文件創(chuàng)建自己的對(duì)話框。4.AutoLISP的特點(diǎn)AutoLISP語言是在普通LISP語言基礎(chǔ)上,擴(kuò)充了許多適用于CAD應(yīng)用的特殊功能而形成的,是一種僅能用解釋方式運(yùn)行于AutoCAD內(nèi)部的解釋型程序設(shè)計(jì)語言。AutoLISP語言中的一切成分都是以函數(shù)形式給出的,沒有語句概念和其它語法結(jié)構(gòu)。AutoLISP把數(shù)據(jù)和程序統(tǒng)一表達(dá)為表結(jié)構(gòu),因此可以把程序當(dāng)作數(shù)據(jù)來處理,也可以把數(shù)據(jù)當(dāng)作程序來執(zhí)行。AutoLISP語言中的程序運(yùn)行過程就是對(duì)函數(shù)求值得過程,在函數(shù)求值過程中實(shí)現(xiàn)函數(shù)功能。AutoLISP語言的主要控制結(jié)構(gòu)采用遞歸方式,程序設(shè)計(jì)簡(jiǎn)單易懂。一、AutoLISP簡(jiǎn)介第2頁/共54頁第1頁/共54頁二、AutoLISP的程序結(jié)構(gòu):AutoLISP程序是由一個(gè)或者一系列按照特定順序排列的標(biāo)準(zhǔn)表組成的,程序所實(shí)現(xiàn)的功能就是每個(gè)標(biāo)準(zhǔn)表所實(shí)現(xiàn)功能的總和。7.1VisualLISP簡(jiǎn)介1.標(biāo)準(zhǔn)表:由左右兩個(gè)括號(hào)組成,其功能由括號(hào)內(nèi)的代碼實(shí)現(xiàn);標(biāo)準(zhǔn)表中的第一個(gè)元素均為操作符或者函數(shù)名,其余元素都是相應(yīng)函數(shù)的參數(shù)。
標(biāo)準(zhǔn)表示例:
(setqx10.0)(setqy10.0)(setqz(+xy))(setqa“HelloWorld!”)(command“l(fā)ine”“0.0”“10,10”“”)(command“circle”“100,100”“50”)注意:標(biāo)準(zhǔn)表中可包含別的表??梢栽诿钚兄杏?x查詢變量x的值標(biāo)準(zhǔn)表格式:(函數(shù)名[<參數(shù)1>][<參數(shù)2>]……[<參數(shù)n>])第3頁/共54頁第2頁/共54頁7.1VisualLISP簡(jiǎn)介2.AutoLISP程序書寫格式的特點(diǎn)(setqx10.0)(setqy10.0)(setqz(+xy))(setqa“HelloWorld!”)(command“l(fā)ine”“0.0”“10,10”“”)(command“circle”“100,100”“50”)
學(xué)習(xí)AutoLISP的核心是掌握AutoLISP函數(shù),包括AutoCAD自帶的內(nèi)部函數(shù)和由用戶自行定義的外部函數(shù)。二、AutoLISP的程序結(jié)構(gòu)AutoLISP程序的擴(kuò)展名為(.lsp),并以ASCII碼文本文件的形式表達(dá),可用文本編輯軟件進(jìn)行編輯。AutoLISP程序中用“;”作注釋,程序執(zhí)行時(shí)會(huì)自動(dòng)跳過每一行中分號(hào)以后的部分。注釋可放于程序中的任何地方。2個(gè)標(biāo)準(zhǔn)表之間和表內(nèi)的多余空格和回車都是不需要的,因此一個(gè)表可以占多行,一行內(nèi)也可寫多個(gè)表。操作符(函數(shù)名)必須放在標(biāo)準(zhǔn)表中第一個(gè)元素的位置。標(biāo)準(zhǔn)表中的函數(shù)與參數(shù)、參數(shù)與參數(shù)之間至少要用一個(gè)空格來分開。AutoLISP程序閱讀函數(shù)時(shí),按照從左到右的規(guī)則進(jìn)行。AutoLISP程序是由標(biāo)準(zhǔn)表組成的,因此程序中所有的括號(hào)都必須左右匹配。第4頁/共54頁第3頁/共54頁三、AutoLISP的內(nèi)存分配7.1VisualLISP簡(jiǎn)介1.AutoLISP運(yùn)行所需的兩個(gè)內(nèi)存區(qū)域:2.內(nèi)存出錯(cuò)提示信息堆空間用光:Insufficientnodespace。沒有足夠的內(nèi)存裝載AutoLISP:Insufficientmemory-AutoLISPdisabled。注意:AutoCAD平臺(tái)上運(yùn)行AutoLISP時(shí),用戶不能擴(kuò)展系統(tǒng)的堆或??臻gStack(棧區(qū)域):存儲(chǔ)函數(shù)的變量和局部結(jié)構(gòu)。標(biāo)準(zhǔn)表中嵌套的表越多,函數(shù)執(zhí)行的遞歸次數(shù)越多,該區(qū)域所占的空間越大。
Stack:20000byetsHeap(堆區(qū)域):存儲(chǔ)所有函數(shù)和變量。程序使用的函數(shù)和表越多,變量名越長(zhǎng),函數(shù)越復(fù)雜,該區(qū)域所占的空間越大。
Heap:25000bytes第5頁/共54頁第4頁/共54頁7.1VisualLISP簡(jiǎn)介四、AutoLISP程序執(zhí)行過程在AutoCAD環(huán)境中command命令提示符下輸入AutoLISP程序,回車直接運(yùn)行,返回結(jié)果立即顯示在文本屏幕上。例:
(setqstring“programmingwithAutoLISPisgreatfun!”)用文本編輯軟件編寫AutoLISP程序,再用Load函數(shù)在AutoCAD環(huán)境中裝載并運(yùn)行。例:1.編寫AutoLISP程序代碼,存盤(d:\MyAutoLISP.lsp)
(princ“\nWelcome!)
(defunc:welcome()(print“AutoLISPwelcomeyou!”))
2.啟動(dòng)AutoCAD,加載AutoLISP應(yīng)用程序
在command命令提示符下鍵入:
(load“d:/lisp/myautolisp.lsp”)
3.運(yùn)行defun定義的函數(shù)
在command命令提示行下鍵入:welcome,回車第6頁/共54頁第5頁/共54頁7.1VisualLISP簡(jiǎn)介五、VisualLISP:Autodesk公司為增強(qiáng)AutoLISP程序開發(fā)能力而設(shè)計(jì)的軟件工具。VisualLISP集成開發(fā)環(huán)境的組成部分:智能化的控制臺(tái)窗口:基本功能對(duì)應(yīng)于AutoCAD文本屏幕窗口,同時(shí)提供了一些交互特性。窗口保護(hù)和恢復(fù)功能:使用戶可以保存并再次使用任一VisualLISP情景窗口環(huán)境。項(xiàng)目管理系統(tǒng):使用戶可以更方便地管理多文件應(yīng)用程序。編譯過的AutoLISP文件將被封裝為一個(gè)單獨(dú)的模塊。上下文相關(guān)菜單:提供有關(guān)AutoLISP函數(shù)信息以及對(duì)符號(hào)名的搜索。檢查和觀察工具:可方便地訪問變量和表達(dá)式的值,還可瀏覽AutoCAD圖形實(shí)體的各項(xiàng)屬性值。AutoLISP格式工具:可重新安排程序格式,增強(qiáng)程序可讀性。資源管理器:允許用戶在一個(gè)窗口中一步步地執(zhí)行AutoLISP程序源代碼,并在AutoCAD圖形窗口中顯示代碼執(zhí)行結(jié)果。文件編譯器:可改善程序的執(zhí)行速度并提供一個(gè)有效的開發(fā)平臺(tái)。語法檢查器:可識(shí)別錯(cuò)誤的AutoLISP結(jié)構(gòu)和內(nèi)部函數(shù)調(diào)用中不合適的參數(shù)。第7頁/共54頁第6頁/共54頁7.2AutoLISP程序設(shè)計(jì)語言AutoLISP表達(dá)式和數(shù)據(jù)結(jié)構(gòu)AutoLISP變量基本輸出函數(shù)符號(hào)和函數(shù)控制第8頁/共54頁第7頁/共54頁7.2AutoLISP程序設(shè)計(jì)語言一、數(shù)據(jù)類型1.整型:32位帶符號(hào)的整數(shù).
范圍:-2147483648~+2147483647
(-231~+231-1)
。注意:如果輸入的整數(shù)超過范圍,則AutoLISP將整數(shù)轉(zhuǎn)換為實(shí)數(shù);
如果兩個(gè)整數(shù)運(yùn)算結(jié)果超過這個(gè)范圍,結(jié)果將是無效的。例:(seta2147483648)
輸出:2.14748e+009
轉(zhuǎn)換為實(shí)數(shù)
(seta(+21474836463)
輸出:-2147483647
無效結(jié)果2.實(shí)型:用雙精度的浮點(diǎn)數(shù)表示,至少有14位有效位數(shù)的精度,可用科學(xué)計(jì)數(shù)法表示。3.字符串:字符常數(shù),由雙引號(hào)引起來的字符系列。
字符串長(zhǎng)度:不包括雙引號(hào)的字符個(gè)數(shù),最大為100個(gè)字符,超過部分無效。任何字符都可以用\nnn的格式表示,\是ASCII碼的前導(dǎo)標(biāo)識(shí)字符,nnn是該字符的ASCII碼。(例:ABCD可表示為\101\102\103\104)第9頁/共54頁第8頁/共54頁7.2AutoLISP程序設(shè)計(jì)語言控制字符用“\”為前導(dǎo)的轉(zhuǎn)義字符表示用“\”為前導(dǎo)的ASCII碼數(shù)值表示反斜杠\\\014雙引號(hào)“’”雙引號(hào)“’”\042Esc鍵\e\033回車鍵\r\015換行\(zhòng)n\012Tab鍵\t\011注意:其中的字符e、n、r、t都必須是小寫。常用控制字符的表示方法例:(setqa(getpoint“\n請(qǐng)用鼠標(biāo)指示一個(gè)點(diǎn):”))
(setqa(getpoint“\012請(qǐng)用鼠標(biāo)指示一個(gè)點(diǎn):”))
第10頁/共54頁第9頁/共54頁7.2AutoLISP程序設(shè)計(jì)語言4.表:以“(”開始,以配對(duì)的“)”結(jié)束,()里可為空,可有若干元素(簡(jiǎn)單或復(fù)雜),還可是其他的表。表的長(zhǎng)度:表中的元素個(gè)數(shù)。例:(1.01.00.0)(“this”“that”“theother”)(1“ONE”)((ab)c(cd))長(zhǎng)度:3323(+123)(sin(*0.5pi))長(zhǎng)度:42
用表可以方便地構(gòu)造出復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。5.選擇集:一個(gè)或多個(gè)圖形對(duì)象的集合,用戶可通過AutoLISP程序向選擇集添加或者從選擇集中刪除圖形對(duì)象。例:_$(ssget“X”)
說明:返回一個(gè)包含圖形文件中所有對(duì)象的選擇集。6.實(shí)體名:為圖形對(duì)象指定的16進(jìn)制的數(shù)字標(biāo)識(shí)。通過該標(biāo)識(shí),可找到實(shí)體在圖形數(shù)據(jù)庫中的位置,并可進(jìn)一步對(duì)其進(jìn)行編輯。例:_$(entlast)
說明:返回最后一個(gè)加入圖形文件的對(duì)象的實(shí)體名第11頁/共54頁第10頁/共54頁7.2AutoLISP程序設(shè)計(jì)語言7.VLA:VisualLISP在ActiveX中使用的對(duì)象。AutoCAD的對(duì)象如直線、圖層、視圖、視口等都屬于VLA對(duì)象。8.文件描述:賦予被打開文件的標(biāo)識(shí),類似于文件指針。例:_$(setqfile(open“c:\\1.txt”“r”))#<file“c:\\1.txt”>9.符號(hào)與變量:(1)符號(hào):標(biāo)識(shí),用來作為變量、函數(shù)的名稱。規(guī)定:不能只包含數(shù)字,不能包含:()
.‘“;,
大小寫等價(jià)。
例:合法符號(hào):A11AB1-d+e
非法符號(hào):(a)b’4“5
注意:如果不是十分必要,符號(hào)的長(zhǎng)度最好不要超過6個(gè)字符。(2)變量的數(shù)據(jù)類型:變量被賦予的值得類型就是變量本身的類型,程序運(yùn)行過程中,同一變量可被賦予不同類型的值,可用(type變量名)
命令了解變量的數(shù)據(jù)類型。以讀的方式打開文件,并將文件描述符得數(shù)值賦予file第12頁/共54頁第11頁/共54頁(3)變量賦值
Setq函數(shù):(setq變量1
值1變量2
值2……)
例:(setqa(+12))7.2AutoLISP程序設(shè)計(jì)語言(4)預(yù)定義符號(hào)
Nil:如果變量沒有被賦值,則其值為Nil,注意:Nil不是空串也不是0值。
T:邏輯常量True。
PAUSE:與command函數(shù)配合使用,用于暫停,等待用戶輸入。
PI:圓周率。注意:每個(gè)變量都占用一定的內(nèi)存空間,為節(jié)省存儲(chǔ)空間,可重復(fù)使用變量名,或?qū)⒉辉偈褂玫淖兞抠x予Nil,以便釋放該變量所占用的內(nèi)存空間。如果所定義變量名與預(yù)定義符號(hào)或系統(tǒng)內(nèi)部函數(shù)名稱相同,則后面的定義取代前面的定義。(5)顯示變量的值:在變量名稱前加“!”,可在AutoCAD命令提示區(qū)看到變量的值。可利用這種方法將變量的值直接傳遞給AutoCAD。例:command:(setqa‘(10.010.0))
command:lineSpecifyfirstpoint!a第13頁/共54頁第12頁/共54頁二、表達(dá)式7.2AutoLISP程序設(shè)計(jì)語言1.操作符前置表示法:函數(shù)名和操作符號(hào)放在所有操作數(shù)前面。例:(seta(*z(+xy)))說明:a=z*(x+y)
操作符前置表示法使得運(yùn)算和函數(shù)的調(diào)用形式得到統(tǒng)一。2.運(yùn)算的優(yōu)先級(jí):函數(shù)之間不存在優(yōu)先的關(guān)系,運(yùn)算的順序僅由表的層次來決定。最里層的表最先被求值,把求值的結(jié)果返回給外面的層,一直到求出最終的結(jié)果。例:(seta(*z(+xy)))說明:a=z*(x+y)3.AutoLISP的求值過程:每個(gè)表達(dá)式都返回一個(gè)數(shù)值,供外層表達(dá)式使用。如果沒有外層表達(dá)式,AutoLISP將這個(gè)值返回給AutoCAD,AutoCAD最多顯示六位小數(shù)。第14頁/共54頁第13頁/共54頁7.2AutoLISP程序設(shè)計(jì)語言3.AutoLISP的求值規(guī)則整型數(shù)、實(shí)型數(shù)、字符串、文件指針和函數(shù),以它們本身的值作為求值的結(jié)果;符號(hào)以它們當(dāng)前的約束值作為求值的結(jié)果;表根據(jù)其第一個(gè)元素來進(jìn)行計(jì)算:如果第一個(gè)元素為函數(shù)名,則表中的剩余元素作為該函數(shù)的變?cè)?;如果表的第一個(gè)元素是一個(gè)表,這個(gè)表就假設(shè)為函數(shù)定義,以外層表中剩余的元素作為該函數(shù)的變?cè)M(jìn)行計(jì)算;如果表的第一個(gè)元素是quote函數(shù),就不再對(duì)這樣的表求值,而是直接引用這個(gè)表例:(setqa(quote(1010)))
等價(jià)于
(setqa’(1010))
第15頁/共54頁第14頁/共54頁7.2AutoLISP程序設(shè)計(jì)語言三、數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)指針:如果內(nèi)存單元A的內(nèi)容是另一個(gè)內(nèi)存單元B的地址,則A稱為指向B的指針。節(jié)點(diǎn):如果內(nèi)存單元A分為左右兩個(gè)部分,分別存放2個(gè)內(nèi)存單元B、C的地址,則A稱為左右2個(gè)指針,具有左右2個(gè)指針的內(nèi)存單元稱為節(jié)點(diǎn)。AotoLISP的內(nèi)存由一系列的節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)長(zhǎng)度為12個(gè)字節(jié),等分為兩部分,作為左右指針,每個(gè)節(jié)點(diǎn)都有它的地址。AutoLISP通過訪問符號(hào)、字符串、表等節(jié)點(diǎn)對(duì)其進(jìn)行存取。1.符號(hào)的存儲(chǔ)結(jié)構(gòu):一個(gè)符號(hào)至少需要3個(gè)節(jié)點(diǎn)?!璦1(setqa1)符號(hào)表鏈接到符號(hào)表鏈尾,并指向存放符號(hào)名的節(jié)點(diǎn)存放符號(hào)名和符號(hào)值指針的節(jié)點(diǎn)存放符號(hào)值的節(jié)點(diǎn)…1(setqslot_name1)slot_name符號(hào)表符號(hào)名超過6個(gè)字符,需申請(qǐng)存放符號(hào)名的空間,原半個(gè)節(jié)點(diǎn)作為指向符號(hào)名的指針第16頁/共54頁第15頁/共54頁7.2AutoLISP程序設(shè)計(jì)語言2.字符串的存儲(chǔ)結(jié)構(gòu):字符串在內(nèi)存中是以連續(xù)空間存儲(chǔ)的。3.表的存儲(chǔ)結(jié)構(gòu):用一組節(jié)點(diǎn)存儲(chǔ),節(jié)點(diǎn)的左指針指向各自的元素,節(jié)點(diǎn)的右指針指向下一個(gè)元素的地址,最后一個(gè)元素的右指針為空。123(123)簡(jiǎn)單表的存儲(chǔ)結(jié)構(gòu)1234(1(23)4)復(fù)雜表的樹狀存儲(chǔ)結(jié)構(gòu)第17頁/共54頁第16頁/共54頁7.2AutoLISP程序設(shè)計(jì)語言4.點(diǎn)對(duì):只有兩個(gè)元素,且兩個(gè)元素都是原子的表。形式:(原子.原子)例:(a.b)(1.2)
點(diǎn)對(duì)只用1個(gè)節(jié)點(diǎn)存放指針,節(jié)點(diǎn)的左指針指向第一個(gè)元素,節(jié)點(diǎn)的右指針指向第二個(gè)元素。12(1.2)點(diǎn)對(duì)
點(diǎn)對(duì)可以節(jié)省存儲(chǔ)空間,且可簡(jiǎn)化某些函數(shù)對(duì)表的運(yùn)算,是AutoLISP程序開發(fā)中常用的數(shù)據(jù)結(jié)構(gòu)。第18頁/共54頁第17頁/共54頁7.2AutoLISP程序設(shè)計(jì)語言四、AutoLISP語言的控制流程1.AutoLISP的3種基本結(jié)構(gòu):順序結(jié)構(gòu):兩個(gè)或多個(gè)操作順序執(zhí)行的程序結(jié)構(gòu)。分支結(jié)構(gòu):根據(jù)給定邏輯條件執(zhí)行兩個(gè)中的一個(gè)(選擇結(jié)構(gòu))循環(huán)結(jié)構(gòu)直到型循環(huán)(給定邏輯條件不滿足時(shí)執(zhí)行循環(huán)體,直到滿足為止)當(dāng)型循環(huán)(當(dāng)給定邏輯條件滿足時(shí)執(zhí)行循環(huán)體,直到不滿足為止)2.AutoLISP的3種控制語句:選擇語句、循環(huán)語句、轉(zhuǎn)移語句(1)條件語句:If語句和cond語句If語句的基本形式:(iftestexprthenexpr[elseexpr])例:Command:(if(=13)“Yes!!”“no.”)
Command:(if(=2(+11))“Yes!!”)
Command:(if(=2(+34))“Yes!!”)If語句可嵌套使用第19頁/共54頁第18頁/共54頁cond語句的基本形式:(cond[(testresult…)…])7.2AutoLISP程序設(shè)計(jì)語言例:(cond((minuspa)(-a));;;判斷a是否為負(fù)數(shù),如果是,返回-a(ta);;;默認(rèn)情況,用t(True)作為測(cè)試表達(dá)式
)求a的絕對(duì)值例:(cond((=s“Y”)1)((=s“y”)1)((=s“N”)0)((=s“n”)0)(tnil))判斷字符串s的值,視情況返回0、1、Nil第20頁/共54頁第19頁/共54頁(2)循環(huán)語句:repeat循環(huán)和while循環(huán)repeat函數(shù)的基本形式:(repeatint[expr…])例:Command:(setqa10b100)100
Command:(repeat4(setqa(+a10))(setqb(+b100)))7.2AutoLISP程序設(shè)計(jì)語言While函數(shù)的基本形式:(whiletestexpr[expr…])例:(setqtest1)while(<=test10)(……);;循環(huán)體
setqtest(+1test)))不斷對(duì)test進(jìn)行+1操作,直至test>10為止,期間執(zhí)行循環(huán)體
500第21頁/共54頁第20頁/共54頁7.2AutoLISP程序設(shè)計(jì)語言四、函數(shù)與函數(shù)控制1.定義AutoLISP函數(shù)
defun函數(shù)格式:
(defun函數(shù)名([函數(shù)參數(shù)][/變量表…])表達(dá)式…)例:(defunadd10(x)setqx(+10x))
command:(setqx5)
command:(add10x)定義加10的函數(shù)函數(shù)調(diào)用2.調(diào)用AutoLISP函數(shù):以表的形式調(diào)用。
(函數(shù)名[函數(shù)參數(shù)…])3.調(diào)用AutoCAD命令:command函數(shù)
(command“AutoCAD命令”“命令所需的數(shù)據(jù)”)例:(command“l(fā)ine”“10,10”“20,20”“”)注意:繪線函數(shù)用空回車或空格響應(yīng)“Specifynextpoitor[Undo]:”,才能結(jié)束命令,所以最后一個(gè)點(diǎn)的后面加空字符串””,表示空格,表示結(jié)束line命令第22頁/共54頁第21頁/共54頁7.2AutoLISP程序設(shè)計(jì)語言4.定義AutoCAD命令:defun函數(shù)
(defunC:AutoCAD命令名
(/局部變量表…)表達(dá)式…)例:(defunc:cir(/p1p2)(setqp1(getpoint“\n請(qǐng)指示圓心:”))(setqp2(getpoint“\n請(qǐng)指示圓上一點(diǎn):”))(setqr(distancep1p2)(command“circle”p1r))五、AutoLISP應(yīng)用舉例繪制漸開線繪制三維螺旋線第23頁/共54頁第22頁/共54頁7.3AutoLISP與AutoCAD的通信查詢與Command函數(shù)顯示控制幾何工具的使用方法第24頁/共54頁第23頁/共54頁7.3AutoLISP與AutoCAD的通信一、查詢和命令1.Command函數(shù):將AutoCAD命令送到AutoCAD操作環(huán)境的命令行。格式:(command“AutoCAD命令”“命令所需的數(shù)據(jù)”)說明:函數(shù)參數(shù)的類型可以是整型、實(shí)型、字符串、點(diǎn)、實(shí)體名或選擇集。如果參數(shù)是類似于角度、距離和點(diǎn)的數(shù)據(jù),則可用字符串或者數(shù)據(jù)本身的值作為參數(shù)輸入。例:(command“circle”“0,0”“3,3”)(command“thickness”1)(setqpt‘(113))(setradius5)(command“circle”ptradius)(1)暫停以等候輸入的預(yù)定義參數(shù):pause例:(command“circle”“5,5”pause“l(fā)ine”“5,5”“7,5”)注意:暫停等候用戶輸入時(shí),函數(shù)被認(rèn)為是激活的,用戶不能用其它的AutoLISP表達(dá)式來進(jìn)行計(jì)算。例:(setqblk“MY_BLOCK”)(setqoldlayer(getvar“clayer”)(command“l(fā)ayer”“set”“NEW_LAY”“”)(command“insert”blkpause“”“”pause)(command“l(fā)ayer”“set”oldlayer)第25頁/共54頁第24頁/共54頁7.3AutoLISP與AutoCAD的通信(2)將拾取點(diǎn)傳入AutoCAD命令
對(duì)需要用戶指定拾取點(diǎn)和對(duì)象的AutoCAD命令,要將這些點(diǎn)和對(duì)象的組合不使用pause符號(hào)而傳入command函數(shù),則必須將它們保存在變量中,再傳入command函數(shù)(其中點(diǎn)可作為字符串傳入command函數(shù))。例:(command“circle”“5,5”“2”)(command“l(fā)ine”“3,5”“7,5”)(setqe1(entlast))(setqpoint‘(57))(command“trim”e1“”point“”)(3)對(duì)command函數(shù)的undo操作
如果想將幾條command函數(shù)作為一組命令全部撤銷,則必須使用undobegin和undoend選項(xiàng)。例:(command"undo""be")
(command“circle”“5,5”“2”)(command“l(fā)ine”“3,5”“7,5”“”)(setqe1(entlast))(setqpoint‘(57))(command“trim”e1“”point“”)(command"undo"“end")第26頁/共54頁第25頁/共54頁7.3AutoLISP與AutoCAD的通信2.系統(tǒng)和環(huán)境變量的查詢和設(shè)置查詢函數(shù):(getvar“AutoCAD系統(tǒng)變量名”)說明:獲得AutoCAD系統(tǒng)變量的值。設(shè)置函數(shù):(setvar“AutoCAD系統(tǒng)變量名”系統(tǒng)變量值)說明:設(shè)置AutoCAD系統(tǒng)變量值。AutoCAD系統(tǒng)變量值的類型:整數(shù)、實(shí)數(shù)、字符串、二維點(diǎn)、三維點(diǎn)。例:(if(<(getvar“filletrad”)1)(setvar“filletrad”1))例:(if(<(getvar“isolines”)8)(setvar“isolines”8))Filletrad為儲(chǔ)存圓角半徑的系統(tǒng)變量isolines為指定對(duì)象上每個(gè)面的輪廓線數(shù)目的系統(tǒng)變量第27頁/共54頁第26頁/共54頁7.3AutoLISP與AutoCAD的通信二、顯示控制2.菜單查詢和控制函數(shù):menucmd格式:(menucmdstring)
說明:控制圖形窗口的菜單顯示,包括顯示、修改和查詢當(dāng)前的子菜單。string參數(shù)的格式:"menu_area=value"
指定菜單區(qū)域或菜單項(xiàng)指定在菜單區(qū)域或菜單項(xiàng)上執(zhí)行的操作例:(setqs(menucmd"P11.3=?"));;;Getsthestatusofthemenuitem(if(=s“”);;;Ifthestatusisanemptystring,(menucmd"P11.3=~");;;disablethemenuitem)1.文本輸出函數(shù):prompt、princ、print第28頁/共54頁第27頁/共54頁7.3AutoLISP與AutoCAD的通信3.控制圖形和文本窗口的函數(shù)graphscr函數(shù):顯示圖形窗口。textscr函數(shù)(txtpage函數(shù)):顯示文本窗口。格式:(redraw[ename[mode]])參數(shù):ename——實(shí)體名;mode——顯示模式例:(redraw(entlast)3)redraw函數(shù):圖形對(duì)象重繪函數(shù)。顯示模式參數(shù):
重繪實(shí)體:1
隱藏實(shí)體:2
亮顯實(shí)體:3
不亮顯實(shí)體:4第29頁/共54頁第28頁/共54頁三、獲取用戶輸入(getxxx函數(shù))7.3AutoLISP與AutoCAD的通信函數(shù)名用戶輸入類型getint在命令行中輸入整數(shù)getreal在命令行中輸入實(shí)數(shù)或整數(shù)getstring在命令行中輸入字符串getpoint在命令行中輸入或在繪圖區(qū)域內(nèi)拾取點(diǎn)getcorner在命令行中輸入或在繪圖區(qū)域內(nèi)拾取點(diǎn)getdist在命令行中輸入或在繪圖區(qū)域內(nèi)拾取點(diǎn)getangle在命令行中輸入或在繪圖區(qū)域內(nèi)拾取點(diǎn)getorient在命令行中輸入或在繪圖區(qū)域內(nèi)拾取點(diǎn)getkword在命令行中輸入一個(gè)預(yù)定義的關(guān)鍵字或其縮寫第30頁/共54頁第29頁/共54頁7.3AutoLISP與AutoCAD的通信例:(setqp'(00))(getcornerp"inputacorner:")例:(initget1"YesNo")(setqx(getkword"Areyousure?(YesorNo)"))(if(="Yes"x)(princ"\nUserpressYes")(princ"\nUserpressno"))例:(initget6)(setqr(getreal"輸入半徑"))(command"circle""0,0"r)例:(getpoint'(00)"inputotherpt")第31頁/共54頁第30頁/共54頁四、幾何工具7.3AutoLISP與AutoCAD的通信1.angle函數(shù):計(jì)算直線與x軸的夾角(弧度)。2.distance函數(shù):計(jì)算2點(diǎn)間的距離。3.polar函數(shù):依靠極坐標(biāo)獲得1個(gè)點(diǎn)。4.insert函數(shù):計(jì)算2條直線的交點(diǎn)。例:(setqpt1'(3.06.00.0))(setqpt2'(5.02.00.0))(setqbase'(1.07.00.0))(setqrads(anglept1pt2))(setqlen(distancept1pt2))(setqendpt(polarbaseradslen))5.osnap函數(shù):對(duì)象捕捉函數(shù)。例:(setqpt2(osnappt1“midp”)捕捉靠近pt1對(duì)象的中點(diǎn)例:(setqpt2(osnappt1"_end,_int"))
捕捉靠近pt1對(duì)象的端點(diǎn)或交點(diǎn)6.aperture系統(tǒng)變量確定在使用對(duì)象捕捉時(shí),選擇點(diǎn)與對(duì)象允許的接近程度。(setvarapertureXX)第32頁/共54頁第31頁/共54頁7.3AutoLISP與AutoCAD的通信五、數(shù)據(jù)轉(zhuǎn)換1.rots函數(shù):將實(shí)數(shù)轉(zhuǎn)換為字符串。
實(shí)數(shù)的單位由lunits系統(tǒng)變量控制實(shí)數(shù)的精度由lures系統(tǒng)變量控制結(jié)果字符中如何顯示前面和后面的0由尺寸變量dimzin控制例:(setqx17.5)(setqstr"\nValueformattedas")(setqfmtval(rtosx14));模式1表示科學(xué)計(jì)數(shù)法(princ(strcatstrfmtval))(setqfmtval(rtosx24));模式2表示10進(jìn)制表示(princ(strcatstrfmtval))(setqfmtval(rtosx34));模式3表示工程表示(princ(strcatstrfmtval))(setqfmtval(rtosx44));模式4表示建筑表示(princ(strcatstrfmtval))(setqfmtval(rtosx54));模式5表示分?jǐn)?shù)表示(princ(strcatstrfmtval))格式:(rtosnumber[mode[precision]])
第33頁/共54頁第32頁/共54頁2.Distof函數(shù):將字符串轉(zhuǎn)換為實(shí)數(shù)。格式:(Distofstring[mode])
7.3AutoLISP與AutoCAD的通信例:(distof"1.7500E+01"1);模式1表示科學(xué)計(jì)數(shù)法1.7500E+01(distof"17.50"2);模式2表示10進(jìn)制表示17.50(distof"1‘-5.50\""3);模式3表示工程表示1'-5.5"(distof"1‘-51/2\""4);模式4表示建筑表示1'-51/2"(distof"171/2"5);模式5表示分?jǐn)?shù)表示注意反斜杠\的作用第34頁/共54頁第33頁/共54頁7.3AutoLISP與AutoCAD的通信3.angtos函數(shù):將角度轉(zhuǎn)換為字符串。例:(setqang3.14159str2"\nAngleformattedas")(setqfmtval(angtosang00));模式0表示角度(princ(strcatstr2fmtval))(setqfmtval(angtosang14));模式1表示度/分/秒形式表示角度(princ(strcatstr2fmtval))(setqfmtval(angtosang24));模式2表示梯度表示法(princ(strcatstr2fmtval))(setqfmtval(angtosang34));模式3表示弧度(princ(strcatstr2fmtval))(setqfmtval(angtosang42));模式4表示測(cè)量員表示方式(princ(strcatstr2fmtval))格式:(angtosangle[unit[precision]])
第35頁/共54頁第34頁/共54頁7.3AutoLISP與AutoCAD的通信4.angtof函數(shù):將字符串轉(zhuǎn)換為角度。格式:(angtofstring[units])
例:
(setqa(angtof"180"0));模式0角度表示法
(setqb(angtof"180d0'0\""1));模式1表示度分秒表示法
(setqc(angtof"200.0000g"2));模式2表示梯度表示法
(setqd(angtof"3.14159r"3));模式3表示弧度表示法
(setqe(angtof"W"4));模式4表示測(cè)量員表示法都返回3.14159例:將角度值從弧度轉(zhuǎn)換為角度:先用angtos函數(shù)獲得角度的字符串,然后用atof函數(shù)將字符串轉(zhuǎn)換為實(shí)數(shù)。
(setqpoint1'(11)point2'(12))(setqrad(anglepoint1point2))(setqdegree(atof(angtosrad02)))第36頁/共54頁第35頁/共54頁7.3AutoLISP與AutoCAD的通信六、坐標(biāo)系轉(zhuǎn)換(transptfromto[disp])說明:pt:Alistofthreerealsthatcanbeinterpretedaseithera3Dpointora3Ddisplacement(vector).from:Anintegercode,entityname,or3Dextrusionvectoridentifyingthecoordinatesysteminwhichptisexpressed.Theintegercodecanbeoneofthefollowing:
0
World(WCS)
1
User(currentUCS)
2
Ifusedwithcode0or1,thisindicatestheDisplayCoordinateSystem(DCS)ofthecurrentviewport.Whenusedwithcode3,itindicatestheDCSofthecurrentmodelspaceviewport.
3
PaperspaceDCS(usedonlywithcode2)to:Anintegercode,entityname,or3Dextrusionvectoridentifyingthecoordinatesystemofthereturnedpoint.Seethefromargumentforalistofvalidintegercodes.例:用getpoint函數(shù)獲取點(diǎn)后,將該點(diǎn)轉(zhuǎn)換為世界坐標(biāo)系下的點(diǎn)。
(setqpnt(getpoint“輸入點(diǎn):”))(transpnt10)第37頁/共54頁第36頁/共54頁7.4對(duì)話框控制語言DCL一、DCL文件結(jié)構(gòu)dialogboxed_colummtoggletoggleboxed_rowradiobuttontoggletoggletoggleradiobuttonOk_Cancel第38頁/共54頁第37頁/共54頁7.4DCL對(duì)話框二、DCL語法1.定義控件格式:name:item1[:item2:item3…]{attribute=value;…}說明:每個(gè)item都是預(yù)先定義的控件。新定義的控件繼承了所有控件(item1…)的屬性;大括號(hào)的屬性定義補(bǔ)充或替換繼承的定義;如果多個(gè)item指定相同的屬性,則使用第1個(gè)遇到的屬性;2.引用控件格式:name;或:name{attribute=value;…}例:spacer;ok_cancel;第39頁/共54頁第38頁/共54頁7.4DCL對(duì)話框3.屬性和屬性值格式:attribute=value;attribute:屬性value:屬性值;:賦值語句結(jié)束標(biāo)志4.注釋:DCL文件中前帶
//
的語句是注釋,//到行尾的內(nèi)容被忽略。
也可使用/*注釋文字*/的整段注釋第40頁/共54頁第39頁/共54頁三、控件及其屬性7.4DCL對(duì)話框1.加框列(boxed_column)和加框行(boxed_row)屬性:標(biāo)題,如果標(biāo)題為空,加框列和行內(nèi)的控件將被無標(biāo)題的線包圍。例:
:boxed_column{label=“Insulation:”;……}2.加框單選列(boxed_radio_column)和加框單選行(boxed_radio_row)屬性:標(biāo)題。
值:用雙引號(hào)括起來的表示單選按鈕關(guān)鍵字的字符串,其值為1。3.button屬性:label、is_default、is_cancel。說明:如果設(shè)置為true,則用戶按回車鍵的結(jié)果與點(diǎn)擊該按鈕一樣;如果設(shè)置為true,則用戶按Esc鍵的響應(yīng)與點(diǎn)擊該按鈕一樣。例:
:button{key=“btm_ok”;label=“OK”is_default=true;}例:
:button{key=“btm_cancel”;label=“Cancel”is_cancel=true;}第41頁/共54頁第40頁/共54頁7.4DCL對(duì)話框4.Edit_box屬性:label、edit_width、edit_limit、value、allow_accept。說明:edit_width是以字符為單位的edit_box控件之寬度;
edit_limit是規(guī)定用戶能夠在edit_box控件中輸入的字符數(shù);
value屬性值為用引號(hào)括起來的字符,對(duì)話框可見時(shí)出現(xiàn)在edit_box中;
allow_accept設(shè)置為true時(shí),用戶按回車鍵,相當(dāng)于鼠標(biāo)選擇edit_box。5.image_button屬性:color、aspect_ratio。說明:color是背景色,0~7或black、red、yellow、green、cyan、blue、
magenta、white;aspect_ratio是圖像控件的寬和高之比。例:
:edit_box{key=“l(fā)yr_ebox”;value=“0”;edit_width=31;edit_limit=31;}例:
:image{key=“mfsld”;color=0;aspect_ratio=0.7;}第42頁/共54頁第41頁/共54頁7.4DCL對(duì)話框6.list_box屬性:label、multiple_select、list、tabs、value、aspect_ratio。說明:multiple_select設(shè)置為true時(shí),允許用戶在list_box中選擇多行文字;
list屬性規(guī)定列表框中顯示文本的初始設(shè)置,每行文字用轉(zhuǎn)義字符\n分開,字符串中可包含制表符,允許特殊的字符串格式化;
tab屬性是一個(gè)包含數(shù)值的字符串,規(guī)定list_box中的制表位置;
value屬性是引號(hào)括起來的字符串,包含整數(shù),以規(guī)定哪一行在初始化中被選中。例:
:list_box{key="vpdes";value="";width=60;height=10;tabs="51726";}第43頁/共54頁第42頁/共54頁7.4DCL對(duì)話框6.popup_list屬性:label、edit_width、list、tabs、value。7.radio_button屬性:label、value。說明:value為引號(hào)括起來的整數(shù),“0”或“1”,“1”表示單選按鈕被選中。8.toggle_button屬性:label、value。說明:value為引號(hào)括起來的整數(shù),“0”或“1”,“1”表示復(fù)選按鈕被選中。第44頁/共54頁第43頁/共54頁7.4DCL對(duì)話框四、布局和尺寸屬性width(寬度)height(高度)alignment(對(duì)齊)children_alignment(子控件對(duì)齊)fixed_width(固定寬度)fixed_height
(固定高度)children_fixed_width
(子控件固定寬度)children_fixed_height(子控件固定高度)四、布局和尺寸屬性五、功能屬性Is_enabled:true或false,指定控件是否可選。Is_tab_stop:按Tab鍵可逐個(gè)通過對(duì)話框上is_tab_stop=true的控件。mnemonic:設(shè)置一個(gè)由mnemonic值表示的字符,當(dāng)按該字符時(shí),聚焦到該控件,mnemonic字符必須是控件標(biāo)題的字符之一。例:
:edit_box{label=“A–TopVertOpng”;key=“l(fā)yr_ebox”;value=“0”;edit_width=31;edit_limit=31;mnemonic=“A”;}第45頁/共54頁第44頁/共54頁7.4DCL對(duì)話框六、關(guān)鍵字key屬性:應(yīng)用程序與對(duì)話框中控件聯(lián)系的途徑。說明:每個(gè)激活的控件必須有一個(gè)關(guān)鍵字值,并且對(duì)于一個(gè)對(duì)話框是唯一的,關(guān)鍵字的值是引號(hào)括起來的字符串,區(qū)分大小寫。關(guān)鍵字前綴命名方案:前綴控件類型btn_按鈕tg_復(fù)選框rb_單選按鈕eb_編輯框im_圖像控件imb_圖像按鈕lb_列表框pl_彈出式列表框第46頁/共54頁第45頁/共54頁7.4DCL對(duì)話框管理一、AutoLISP程序控制DCL對(duì)話框的方法步驟:(1)用load_dialog函數(shù)將DCL文件加載到內(nèi)存中;(2)調(diào)用new_dialog函數(shù),將對(duì)話框名和DCL標(biāo)識(shí)碼作為參數(shù)傳遞給該函數(shù);(3)通過設(shè)置控件值、列表和圖像初始化對(duì)話框;(4)調(diào)用start_dialog將對(duì)話框的控制傳遞給AutoCAD并顯示出來;(5)調(diào)用unload_dialog,在用戶響應(yīng)后從內(nèi)存中刪除對(duì)話框。hello:dialog{label="SampleDialogBox";:text{
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《消防器材使用方法》課件
- 小學(xué)一年級(jí)20以內(nèi)的進(jìn)位加法口算練習(xí)題
- 小學(xué)五年級(jí)數(shù)學(xué)下冊(cè)第五單元《分?jǐn)?shù)混合運(yùn)算》測(cè)試題
- 金融工程試題及答案
- 計(jì)算機(jī)組裝與維護(hù)第五版課后習(xí)題參考答案(工業(yè))
- 2020年計(jì)算機(jī)軟考《信息系統(tǒng)項(xiàng)目管理師》基礎(chǔ)練習(xí)及答案
- 小學(xué)數(shù)學(xué)二年級(jí)整十整百整千數(shù)加減法口算練習(xí)990道
- 高三寫作點(diǎn)悟
- 《神經(jīng)系統(tǒng)的認(rèn)識(shí)》課件
- 《化工開放設(shè)計(jì)》課件
- 建立創(chuàng)新攻關(guān)“揭榜掛帥”機(jī)制行動(dòng)方案
- 2024年浙江省杭州余杭區(qū)機(jī)關(guān)事業(yè)單位招用編外人員27人歷年管理單位遴選500模擬題附帶答案詳解
- 2024年01月22332高等數(shù)學(xué)基礎(chǔ)期末試題答案
- 期末素養(yǎng)測(cè)評(píng)卷(試題)-2024-2025學(xué)年三年級(jí)上冊(cè)數(shù)學(xué)人教版
- 印章交接表(可編輯)
- 體育場(chǎng)館運(yùn)營(yíng)合同
- 5-項(xiàng)目五 跨境電商出口物流清關(guān)
- FMEA培訓(xùn)教材(課堂)
- 2024年支原體肺炎治療
- 棟號(hào)長(zhǎng)年度述職報(bào)告
- 無人機(jī)安全飛行承諾書
評(píng)論
0/150
提交評(píng)論