AutoCAD軟件的二次開發(fā).ppt
《AutoCAD軟件的二次開發(fā).ppt》由會員分享,可在線閱讀,更多相關《AutoCAD軟件的二次開發(fā).ppt(55頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第七章AutoCAD軟件的二次開發(fā),VisualLISP簡介AutoLISP程序設計語言,改變AutoCAD工作方式的方法:定制編程AutoLISP/VisualLISPAutoCADVBA(VisualBasicforApplication)ADS(AutoCADDevelopmentSystem)ObjectARX(AutoCADRuntimeeXtension),1.LISP(ListProcessingLanguage):人工智能領域中廣泛采用的一種程序設計語言,由于其處理的對象是符號表達式,因此也稱為符號式語言。應用領域:人工智能、機器人、專家系統(tǒng)、博弈、定理證明等。版本:MacLISP、InterLISP、ZetaLISP、CommonLISP,2.AutoLISP:嵌套于AutoCAD內(nèi)部,將LISP語言與AutoCAD有機結合的編程語言,用于定制和擴展AutoCAD的功能,是AutoCAD二次開發(fā)的工具之一。使用AutoLISP可以直接調用幾乎所有的AutoCAD命令;AutoLISP既具備高級語言的基本結構和功能,又具有一般高級語言所沒有的強大的圖形處理功能。用途:利用AutoLISP進行AutoCAD二次開發(fā),實現(xiàn)直接增加和修改AutoCAD命令;擴大AutoCAD的圖形編輯功能;建立圖形庫和數(shù)據(jù)庫并對當前圖形進行直接訪問和修改;開發(fā)CAD軟件包。,一、AutoLISP簡介,3.AutoLISP的典型應用參數(shù)化繪圖程序設計尺寸驅動程序鼠標驅動程序驅動利用AutoCAD提供的PDB模板構成的DCL(DialogControlLanguage)文件創(chuàng)建自己的對話框。,4.AutoLISP的特點AutoLISP語言是在普通LISP語言基礎上,擴充了許多適用于CAD應用的特殊功能而形成的,是一種僅能用解釋方式運行于AutoCAD內(nèi)部的解釋型程序設計語言。AutoLISP語言中的一切成分都是以函數(shù)形式給出的,沒有語句概念和其它語法結構。AutoLISP把數(shù)據(jù)和程序統(tǒng)一表達為表結構,因此可以把程序當作數(shù)據(jù)來處理,也可以把數(shù)據(jù)當作程序來執(zhí)行。AutoLISP語言中的程序運行過程就是對函數(shù)求值得過程,在函數(shù)求值過程中實現(xiàn)函數(shù)功能。AutoLISP語言的主要控制結構采用遞歸方式,程序設計簡單易懂。,一、AutoLISP簡介,二、AutoLISP的程序結構:AutoLISP程序是由一個或者一系列按照特定順序排列的標準表組成的,程序所實現(xiàn)的功能就是每個標準表所實現(xiàn)功能的總和。,1.標準表:由左右兩個括號組成,其功能由括號內(nèi)的代碼實現(xiàn);標準表中的第一個元素均為操作符或者函數(shù)名,其余元素都是相應函數(shù)的參數(shù)。標準表格式:(函數(shù)名),標準表示例:(setqx10.0)(setqy10.0)(setqz(+xy)(setqa“HelloWorld!”)(command“l(fā)ine”“0.0”“10,10”“”)(command“circle”“100,100”“50”),注意:標準表中可包含別的表。,2.AutoLISP程序書寫格式的特點AutoLISP程序是由標準表組成的,因此程序中所有的括號都必須左右匹配;AutoLISP程序閱讀函數(shù)時,按照從左到右的規(guī)則進行。操作符(函數(shù)名)必須放在標準表中第一個元素的位置。標準表中的函數(shù)與參數(shù)、參數(shù)與參數(shù)之間至少要用一個空格來分開。2個標準表之間和表內(nèi)的多余空格和回車都是不需要的,因此一個表可以占多行,一行內(nèi)也可寫多個表。AutoLISP程序中用“;”作注釋,程序執(zhí)行時會自動跳過每一行中分號以后的部分。注釋可放于程序中的任何地方。AutoLISP程序的擴展名為(.lsp),并以ASCII碼文本文件的形式表達,可用文本編輯軟件進行編輯。,(setqx10.0)(setqy10.0)(setqz(+xy)(setqa“HelloWorld!”)(command“l(fā)ine”“0.0”“10,10”“”)(command“circle”“100,100”“50”),學習AutoLISP的核心是掌握AutoLISP函數(shù),包括AutoCAD自帶的內(nèi)部函數(shù)和由用戶自行定義的外部函數(shù)。,二、AutoLISP的程序結構,三、AutoLISP的內(nèi)存分配,1.AutoLISP運行時所需的兩個內(nèi)存區(qū)域:Heap(堆區(qū)域):存儲所有函數(shù)和變量。程序使用的函數(shù)和表越多,變量名越長,函數(shù)越復雜,該區(qū)域所占的空間越大。Heap:25000bytesStack(棧區(qū)域):存儲函數(shù)的變量和局部結構。標準表中嵌套的表越多,函數(shù)執(zhí)行的遞歸次數(shù)越多,該區(qū)域所占的空間越大。Stack:20000byets,2.內(nèi)存出錯提示信息堆空間用光:Insufficientnodespace。沒有足夠的內(nèi)存裝載AutoLISP:Insufficiecntmemory-AutoLISPdisabled。,注意:AutoCAD平臺上運行AutoLISP時,用戶不能擴展系統(tǒng)的堆或棧空間,四、AutoLISP程序執(zhí)行過程,在AutoCAD環(huán)境中command命令提示符下輸入AutoLISP程序,回車直接運行,返回結果立即顯示在文本屏幕上。,例:(setqstring“programmingwithAutoLISPisgreatfun!”),用文本編輯軟件編寫AutoLISP程序,再用Load函數(shù)在AutoCAD環(huán)境中裝載并運行。,例:1.編寫AutoLISP程序代碼,存盤(d:MyAutoLISP.lsp)(princ“nWelcome!)(defunc:welcome()(print“AutoLISPwelcomeyou!”)2.啟動AutoCAD,加載AutoLISP應用程序在command命令提示符下鍵入:(load“d:/lisp/myautolisp.lsp”)3.運行defun定義的函數(shù)在command命令提示行下鍵入:welcome,回車,五、VisualLISP:Autodesk公司為增強AutoLISP程序開發(fā)能力而設計的軟件工具。,VisualLISP集成開發(fā)環(huán)境的組成部分:語法檢查器:可識別錯誤的AutoLISP結構和內(nèi)部函數(shù)調用中不合適的參數(shù)。文件編譯器:可改善程序的執(zhí)行速度并提供一個有效的開發(fā)平臺。資源管理器:允許用戶在一個窗口中一步步地執(zhí)行AutoLISP程序源代碼,并在AutoCAD圖形窗口中顯示代碼執(zhí)行結果。AutoLISP格式工具:可重新安排程序格式,增強程序可讀性。檢查和觀察工具:可方便地訪問變量和表達式的值,還可瀏覽AutoCAD圖形實體的各項屬性值。上下文相關菜單:提供有關AutoLISP函數(shù)信息以及對符號名的搜索。項目管理系統(tǒng):使用戶可以更方便地管理多文件應用程序。編譯過的AutoLISP文件將被封裝為一個單獨的模塊。窗口保護和恢復功能:使用戶可以保存并再次使用任一VisualLISP情景窗口環(huán)境。智能化的控制臺窗口:基本功能對應于AutoCAD文本屏幕窗口,同時提供了一些交互特性。,AutoLISP表達式和數(shù)據(jù)結構AutoLISP變量基本輸出函數(shù)符號和函數(shù)控制,一、數(shù)據(jù)類型,1.整型:32位帶符號的整數(shù).范圍:-2147483648+2147483647(-231+231-1)。注意:如果輸入的整數(shù)超過范圍,則AutoLISP將整數(shù)轉換為實數(shù);如果兩個整數(shù)運算結果超過這個范圍,結果將是無效的。例:(seta2147483648)輸出:2.14748e+009轉換為實數(shù)(seta(+21474836463)輸出:-2147483647無效結果,2.實型:用雙精度的浮點數(shù)表示,至少有14位有效位數(shù)的精度,可用科學計數(shù)法表示。,3.字符串:字符常數(shù),由雙引號引起來的字符系列。字符串長度:不包括雙引號的字符個數(shù),最大為100個字符,超過部分無效。任何字符都可以用nnn的格式表示,是ASCII碼的前導標識字符,nnn是該字符的ASCII碼。(例:ABCD可表示為101102103104),注意:其中的字符e、n、r、t都必須是小寫。,常用控制字符的表示方法,例:(setqa(getpoint“n請用鼠標指示一個點:”)(setqa(getpoint“012請用鼠標指示一個點:”),4.表:以“(”開始,以配對的“)”結束,()里可為空,可有若干元素(簡單或復雜),還可是其他的表。表的長度:表中的元素個數(shù)。例:(1.01.00.0)(“this”“that”“theother”)(1“ONE”)(ab)c(cd)長度:3323(+123)(sin(*0.5pi),長度:42,用表可以方便地構造出復雜的數(shù)據(jù)結構。,5.選擇集:一個或多個圖形對象的集合,用戶可通過AutoLISP程序向選擇集添加或者從選擇集中刪除圖形對象。例:_$(ssget“X”)說明:返回一個包含圖形文件中所有對象的選擇集。,6.實體名:為圖形對象指定的16進制的數(shù)字標識。通過該標識,可找到實體在圖形數(shù)據(jù)庫中的位置,并可進一步對其進行編輯。例:_$(entlast)說明:返回最后一個加入圖形文件的對象的實體名,7.VLA:VisualLISP在ActiveX中使用的對象。AutoCAD的對象如直線、圖層、視圖、視口等都屬于VLA對象。,8.文件描述:賦予被打開文件的標識,類似于文件指針。例:_$(setqfile(open“c:1.txt”“r”)#,9.符號與變量:,(1)符號:標識,用來作為變量、函數(shù)的名稱。規(guī)定:不能只包含數(shù)字,不能包含:().“;,大小寫等價。例:合法符號:A11AB1-d+e非法符號:(a)b4“5注意:符號的長度如果不是十分必要,最好不要超過6個字符。,(2)變量的數(shù)據(jù)類型:變量被賦予的值得類型就是變量本省的類型,程序運行過程中,同一變量可被賦予不同類型的值,可用type命令了解變量的數(shù)據(jù)類型。,(3)變量賦值Setq函數(shù):(setq變量1值1變量2值2)例:(setqa(+12),(4)預定義符號Nil:如果變量沒有被賦值,則其值為Nil,注意:Nil不是空串也不是0值。T:邏輯常量True。PAUSE:與command函數(shù)配合使用,用于暫停,等待用戶輸入。PI:圓周率。注意:每個變量都占用一定的內(nèi)存空間,為節(jié)省存儲空間,可重復使用變量名,或將不再使用的變量賦予Nil,以便釋放該變量所占用的內(nèi)存空間。如果所定義變量名與預定義符號或系統(tǒng)內(nèi)部函數(shù)名稱相同,則后面的定義取代前面的定義。,(5)顯示變量的值:在變量名稱前加“!”,可在AutoCAD命令提示區(qū)看到變量的值??衫眠@種方法將變量的值直接傳遞給AutoCAD。例:command:(setqa(10.010.0)command:lineSpecifyfirstpoint!a,二、表達式,1.操作符前置表示法:函數(shù)名和操作符號放在所有操作數(shù)前面。例:(seta(*z(+xy)說明:a=z*(x+y)操作符前置表示法使得運算和函數(shù)的調用形式得到統(tǒng)一。,2.運算的優(yōu)先級:函數(shù)之間不存在優(yōu)先的關系,運算的順序僅由表的層次來決定。最里層的表最先被求值,把求值的結果返回給外面的層,一直到求出最終的結果。例:(seta(*z(+xy)說明:a=z*(x+y),3.AutoLISP的求值過程:函每個表達式都返回一個數(shù)值,供外層表達式使用。如果沒有外層表達式,AutoLISP將這個值返回給AutoCAD,AutoCAD最多顯示六位小數(shù)。,3.AutoLISP的求值規(guī)則整型數(shù)、實型數(shù)、字符串、文件指針和函數(shù),以它們本省的值作為求值的結果;符號以它們當前的約束值作為求值的結果;表根據(jù)其第一個元素來進行計算:如果第一個元素為函數(shù)名,則表中的剩余元素作為該函數(shù)的變元;如果表的第一個元素是一個表,這個表就假設為函數(shù)定義,以外層表中剩余的元素作為該函數(shù)的變元進行計算;如果表的第一個元素是quote函數(shù),就不再對這樣的表求值,而是直接引用這個表例:(setqa(quote(1010)等價于(setqa(1010),三、數(shù)據(jù)存儲結構,指針:如果內(nèi)存單元A的內(nèi)容是另一個內(nèi)存單元B的地址,則A稱為指向B的指針。,節(jié)點:如果內(nèi)存單元A分為左右兩個部分,分別存放2個內(nèi)存單元B、C的地址,則A稱為左右2個指針,具有左右2個指針的內(nèi)存單元稱為節(jié)點。,AotoLISP的內(nèi)存由一系列的節(jié)點組成,每個節(jié)點長度為12個字節(jié),等分為兩部分,作為左右指針,每個節(jié)點都有它的地址。AutoLISP通過訪問符號、字符串、表等節(jié)點對其進行存取。,1.符號的存儲結構:一個符號至少需要3個節(jié)點。,符號表,鏈接到符號表鏈尾,并指向存放符號名的節(jié)點,存放符號名和符號值指針的節(jié)點,存放符號值的節(jié)點,符號名超過6個字符,需申請存放符號名的空間,原半個節(jié)點作為指向符號名的指針,2.字符串的存儲結構:字符串在內(nèi)存中是以連續(xù)空間存儲的。,3.表的存儲結構:用一組節(jié)點存儲,節(jié)點的右指針指向下一個元素的地址,最后一個元素的右指針為空,節(jié)點的左指針指向各自的元素。,4.點對:只有兩個元素,且兩個元素都是原子的表。形式:(原子.原子)例:(a.b)(1.2)點對只用1個節(jié)點存放指針,節(jié)點的左指針指向第一個元素,節(jié)點的右指針指向第二個元素。,點對可以節(jié)省存儲空間,且可簡化某些函數(shù)對表的運算,是AutoLISP程序開發(fā)中常用的數(shù)據(jù)結構。,四、AutoLISP語言的控制流程,1.AutoLISP的3種基本結構:順序結構分支結構循環(huán)結構直到型循環(huán)(給定邏輯條件不滿足時執(zhí)行循環(huán)體,直到滿足為止)當型循環(huán)(當給定邏輯條件滿足時執(zhí)行循環(huán)體,直到不滿足為止),2.AutoLISP的3種控制語句:選擇語句、循環(huán)語句、轉移語句,(1)條件語句:If語句和cond語句,If語句的基本形式:(iftestexprthenexprelseexpr),例:Command:(if(=13)“Yes!”“no.”)Command:(if(=2(+11)“Yes!”)Command:(if(=2(+34)“Yes!”),If語句可嵌套使用,cond語句的基本形式:(cond(testresult),例:(cond(minuspa)(-a);判斷a是否為負數(shù),如果是,返回-a(ta);默認情況,用t作為測試表達式),求a的絕對值,例:(cond(=s“Y”)1)(=s“y”)1)(=s“N”)0)(=s“n”)0)(tnil),判斷字符串s的值,視情況返回0、1、Nil,(2)循環(huán)語句:repeat循環(huán)和while循環(huán),repeat函數(shù)的基本形式:(repeatintexpr),例:Command:(setqa10b100)100Command:(repeat4(setqa(+a10)(setqb(+b100)500,While函數(shù)的基本形式:(whiletestexprexpr),例:(setqtest1)while(10為止,期間執(zhí)行循環(huán)體,四、函數(shù)與函數(shù)控制,1.定義AutoLISP函數(shù)defun函數(shù)格式:(defun函數(shù)名(函數(shù)參數(shù)/變量表)表達式),例:(defunadd10(x)setqx(+10 x)command:(setqx5)command:(add10 x),定義加10的函數(shù),函數(shù)調用,2.調用AutoLISP函數(shù)(函數(shù)名函數(shù)參數(shù)),3.調用AutoCAD命令:command函數(shù)(command“AutoCAD命令”“命令所需的數(shù)據(jù)”),例:(command“l(fā)ine”“10,10”“”“20,20”“”),4.定義AutoCAD命令:defun函數(shù)(defunC:AutoCAD命令名(/局部變量表)表達式),例:(defunc:cir(/p1p2)(setqp1(getpoint“n請指示圓心:”)(setqp2(getpoint“n請指示圓上一點:”)(setqr(distancep1p2)(command“circle”p1r),查詢與Command函數(shù)顯示控制幾何工具的使用方法,一、查詢和命令,1.Command函數(shù):將AutoCAD命令送到AutoCAD操作環(huán)境的命令行。格式:(command“AutoCAD命令”“命令所需的數(shù)據(jù)”)說明:函數(shù)參數(shù)的類型可以是整型、實型、字符串、點、實體名或選擇集。如果參數(shù)是類似于角度、距離和點的數(shù)據(jù),則可用字符串或者數(shù)據(jù)本身的值作為參數(shù)輸入。,例:(command“circle”“0,0”“3,3”)(command“thickness”1)(setqpt(113)(setradius5)(command“circle”ptradius),(1)暫停以等候輸入的預定義參數(shù):pause,例:(command“circle”“5,5”pause“l(fā)ine”“5,5”“7,5”),注意:暫停等候用戶輸入時,函數(shù)被認為是激活的,用戶不能其它的AutoLISP表達式來進行計算。,例:(setqblk“MY_BLOCK”)(setqoldlayer(getvar“clayer”)(command“l(fā)ayer”“set”“NEW_LAY”“”)(command“insert”blkpause“”“”pause)(command“l(fā)ayer”“set”oldlayer),(2)將拾取點傳入AutoCAD命令,對需要用戶指定拾取點和對象的AutoCAD命令,要將這些點和對象的組合不使用pause符號而傳入command函數(shù),則必須將它們保存在變量中,在傳入command函數(shù)(其中點可作為字符串傳入command函數(shù))。,例:(command“circle”“5,5”“2”)(command“l(fā)ine”“3,5”“7,5”)(setqe1(entlast)(setqpoint(57)(command“trim”e1“”point“”),(3)對command函數(shù)的undo操作,如果想將幾條command函數(shù)作為一組命令全部撤銷,則必須使用undobegin和undoend選項。,例:(commandundobe)(command“circle”“5,5”“2”)(command“l(fā)ine”“3,5”“7,5”“”)(setqe1(entlast)(setqpoint(57)(command“trim”e1“”point“”)(commandundo“end),2.系統(tǒng)和環(huán)境變量的查詢和設置查詢函數(shù):(getvar“AutoCAD系統(tǒng)變量名”)說明:獲得AutoCAD系統(tǒng)變量的值。設置函數(shù):(setvar“AutoCAD系統(tǒng)變量名”系統(tǒng)變量值)說明:設置AutoCAD系統(tǒng)變量值。,AutoCAD系統(tǒng)變量值的類型:整數(shù)、實數(shù)、字符串、二維點、三維點。,例:(if(getvar“filletrad”)1)(setvar“filletrad”1),例:(if(getvar“isolines”)8)(setvar“isolines”8),二、顯示控制,2.菜單查詢和控制函數(shù):menucmd格式:(menucmdstring)說明:控制圖形窗口的菜單顯示,包括顯示、修改和查詢當前的子菜單。,指定菜單區(qū)域或菜單項,指定在菜單區(qū)域或菜單項上執(zhí)行的操作,例:(setqs(menucmdP11.3=?);Getsthestatusofthemenuitem(if(=s“”);Ifthestatusisanemptystring,(menucmdP11.3=);disablethemenuitem),1.文本輸出函數(shù):prompt、princ、print,3.控制圖形和文本窗口的函數(shù)graphscr函數(shù):顯示圖形窗口。textscr函數(shù):顯示文本窗口。,格式:(redrawenamemode)參數(shù):ename實體名;mode顯示模式,例:(redraw(entlast)3),redraw函數(shù):圖形對象重繪函數(shù)。,顯示模式參數(shù):重繪實體:1消隱實體:2亮顯實體:3不亮顯實體:4,三、獲取用戶輸入,例:(setqp(00)(getcornerpinputacorner:),例:(initget1YesNo)(setqx(getkwordAreyousure?(YesorNo)(if(=Yesx)(princnUserpressYes)(princnUserpressno),例:(initget6)(setqr(getreal輸入半徑)(commandcircle0,0r),例:(getpoint(00)inputotherpt),四、幾何工具,1.angle函數(shù):計算直線與x軸的夾角(弧度)。,2.distance函數(shù):計算2點間的距離。,3.polar函數(shù):依靠極坐標獲得1個點。,4.insert函數(shù):計算2條直線的交點。,例:(setqpt1(3.06.00.0)(setqpt2(5.02.00.0)(setqbase(1.07.00.0)(setqrads(anglept1pt2)(setqlen(distancept1pt2)(setqendpt(polarbaseradslen),5.osnap函數(shù):對象捕捉函數(shù)。,例:(setqpt2(osnappt1“midp”),捕捉靠近pt1對象的中點,例:(setqpt2(osnappt1_end,_int),捕捉靠近pt1對象的端點或交點,6.aperture系統(tǒng)變量確定在使用對象捕捉時,選擇點與對象允許的接近程度。,五、數(shù)據(jù)轉換,1.rots函數(shù):將實數(shù)轉換為字符串。,實數(shù)的單位由lunits系統(tǒng)變量控制實數(shù)的精度由luprec系統(tǒng)變量控制結果字符中如何顯示前面和后面的0由尺寸變量dimzin控制,例:(setqx17.5)(setqstrnValueformattedas)(setqfmtval(rtosx14);模式1表示科學計數(shù)法(princ(strcatstrfmtval)(setqfmtval(rtosx24);模式2表示10進制表示(princ(strcatstrfmtval)(setqfmtval(rtosx34);模式3表示工程表示(princ(strcatstrfmtval)(setqfmtval(rtosx44);模式4表示建筑表示(princ(strcatstrfmtval)(setqfmtval(rtosx54);模式5表示分數(shù)表示(princ(strcatstrfmtval),格式:(rtosnumbermodeprecision),2.Distof函數(shù):將字符串轉換為實數(shù)。,格式:(Distofstringmode),例:(distof1.7500E+011);模式1表示科學計數(shù)法1.7500E+01(distof17.502);模式2表示10進制表示17.50(distof1-5.503);模式3表示工程表示1-5.5(distof1-51/24);模式4表示建筑表示1-51/2(distof171/25);模式5表示分數(shù)表示,注意反斜杠的作用,3.angtos函數(shù):將角度轉換為字符串。,例:(setqang3.14159str2nAngleformattedas)(setqfmtval(angtosang00);模式0表示角度(princ(strcatstr2fmtval)(setqfmtval(angtosang14);模式1表示度/分/秒形式表示角度(princ(strcatstr2fmtval)(setqfmtval(angtosang24);模式2表示梯度表示法(princ(strcatstr2fmtval)(setqfmtval(angtosang34);模式3表示弧度(princ(strcatstr2fmtval)(setqfmtval(angtosang42);模式4表示測量員表示方式(princ(strcatstr2fmtval),格式:(angtosangleunitprecision),4.angtof函數(shù):將字符串轉換為角度。,格式:(angtofstringunits),例:(setqa(angtof1800);模式0角度表示法(setqb(angtof180d001);模式1表示度分秒表示法(setqc(angtof200.0000g2);模式2表示梯度表示法(setqd(angtof3.14159r3);模式3表示弧度表示法(setqe(angtofW4);模式4表示測量員表示法,都返回3.14159,例:將角度值從弧度轉換為角度:先用angtos函數(shù)獲得角度的字符串,然后用atof函數(shù)將字符串轉換為實數(shù)。(setqpoint1(11)point2(12)(setqrad(anglepoint1point2)(setqdegree(atof(angtosrad02),六、坐標系轉換,(transptfromtodisp),說明:pt:Alistofthreerealsthatcanbeinterpretedaseithera3Dpointora3Ddisplacement(vector).,from:Anintegercode,entityname,or3Dextrusionvectoridentifyingthecoordinatesysteminwhichptisexpressed.Theintegercodecanbeoneofthefollowing:0World(WCS)1User(currentUCS)2Ifusedwithcode0or1,thisindicatestheDisplayCoordinateSystem(DCS)ofthecurrentviewport.Whenusedwithcode3,itindicatestheDCSofthecurrentmodelspaceviewport.3PaperspaceDCS(usedonlywithcode2),to:Anintegercode,entityname,or3Dextrusionvectoridentifyingthecoordinatesystemofthereturnedpoint.Seethefromargumentforalistofvalidintegercodes.,例:用getpoint函數(shù)獲取點后,將該點轉換為世界坐標系下的點。(setqpnt(getpoint“輸入點:”)(transpnt10),一、DCL文件結構,二、DCL語法,1.定義控件,格式:name:item1:item2:item3attribute=value;,說明:每個item都是預先定義的控件。新定義的控件繼承了所有控件(item1)的屬性;大括號的屬性定義補充或替換繼承的定義;如果多個item指定相同的屬性,則使用第1個遇到的屬性;,2.引用控件,格式:name;,或:nameattribute=value;,例:spacer;ok_cancel;,3.屬性和屬性值,格式:attribute=value;,attribute:屬性value:屬性值;:賦值語句結束標志,4.注釋:DCL文件中前帶/的語句是注釋,/到行尾的內(nèi)容被忽略。也可使用/*注釋文字*/的整段注釋,三、控件及其屬性,1.加框列(boxed_column)和加框行(boxed_row)屬性:標題,如果標題為空,加框列和行內(nèi)的控件將被無標題的線包圍。,例::boxed_columnlabel=“Insulation:”;,2.加框單選列(boxed_radio_column)和加框行(boxed_radio_row)屬性:標題。值:用雙引號括起來的表示單選按鈕關鍵字的字符串,其值為1。,3.button屬性:label、is_default、is_cancel。說明:如果設置為true,則用戶按回車鍵的結果與點擊該按鈕一樣;如果設置為true,則用戶按Esc鍵的響應與點擊該按鈕一樣。,4.Edit_box屬性:label、edit_width、edit_limit、value、allow_accept。說明:edit_width是以字符為單位的edit_box控件之寬度;edit_limit是規(guī)定用戶能夠在edit_box控件中輸入的字符數(shù);value屬性值為用引號括起來的字符,對話框可見時出現(xiàn)在edit_box中;allow_accept設置為true時,用戶按回車鍵,相當于鼠標選擇edit_box。,5.image_button屬性:color、aspect_ratio。說明:color是背景色,07或black、red、yellow、green、cyan、blue、magenta、white;aspect_ratio是圖像控件的寬和高之比。,例::edit_boxkey=“l(fā)yr_ebox”;value=“0”;edit_width=31;edit_limit=31;,例::imagekey=“mfsld”;color=0;aspect_ratio=0.7;,6.list_box屬性:label、multiple_select、list、tabs、value、aspect_ratio。說明:multiple_select設置為true時,允許用戶在list_box中選擇多行文字;list屬性規(guī)定列表框中顯示文本的初始設置,每行文字用轉義字符n分開,字符串中可包含制表符,允許特殊的字符串格式化;tab屬性是一個包含數(shù)值的字符串,規(guī)定list_box中的制表位置;value屬性是引號括起來的字符串,包含整數(shù),以規(guī)定哪一行在初始化中被選中。,例::list_boxkey=“vpdes”;value=“”;width=60;height=10;tab=“51726”,6.popup_list屬性:label、edit_width、list、tabs、value。,7.radio_button屬性:label、value。說明:value為引號括起來的整數(shù),“0”或“1”,“1”表示單選按鈕被選中。,8.toggle_button屬性:label、value。說明:value為引號括起來的整數(shù),“0”或“1”,“1”表示復選按鈕被選中。,四、布局和尺寸屬性,width(寬度)height(高度)alignment(對齊)children_alignment(子控件對齊)fixed_width(固定寬度)fixed_height(固定高度)children_fixed_width(子控件固定寬度)children_fixed_height(子控件固定高度),四、布局和尺寸屬性,五、功能屬性,Is_enabled:true或false,指定控件是否可選。Is_tab_stop:按Tab鍵可逐個通過對話框上is_tab_stop=true的控件。mnemonic:設置一個由mnemonic值表示的字符,當按該字符時,聚焦到該空間,mnemonic字符必須大寫且須是控件標題的大寫字符之一。,例::edit_boxlabel=“ATopVertOpng”;key=“l(fā)yr_ebox”;value=“0”;edit_width=31;edit_limit=31;mnemonic=“A”;,六、關鍵字key屬性:應用程序與對話框中控件聯(lián)系的途徑。說明:每個激活的控件必須有一個關鍵字值,并且對于一個對話框是唯一的,關鍵字的值是引號括起來的字符串,區(qū)分大小寫。關鍵字前綴命名方案:,一、AutoLISP程序控制DCL對話框的方法,步驟:(1)用load_dialog函數(shù)將DCL文件加載到內(nèi)存中;(2)調用new_dialog函數(shù),將對話框名和DCL標識碼作為參數(shù)傳遞給該函數(shù);(3)通過設置控件值、列表和圖像初始化對話框;(4)調用start_dialog將對話框的控制傳遞給AutoCAD并顯示出來;(5)調用unload_dialog,在用戶響應后從內(nèi)存中刪除對話框。,hello:dialoglabel=SampleDialogBox;:textlabel=Hello,world;ok_only;,例:hello對話框的控制方法,用戶單擊“確定”按鈕后,AutoCAD將ok_only控件指定動作done_dialog的調用傳遞給AutoLISP應用程序,并關閉對話框。,二、動作表達式和回調,action_tile函數(shù):將AutoLISP表達式與控件相關聯(lián),從而定義對話框中控件被選定時執(zhí)行的操作。格式:(action_tilekeyaction-expression),get_attr函數(shù):檢索DCL文件中用戶定義的屬性。,get_tile函數(shù):獲得控件的當前運行值(基于用戶對控件的輸入)。,注意:定義動作表達式必須在調用new_dialog之后,調用start_dialog之前。用戶如何選定控件或修改控件內(nèi)容的信息,將作為回調返回給動作表達式,多數(shù)情況下,對話框每個被激活的控件都將產(chǎn)生一個回調。定義回調的動作表達表達式通常被當作回調函數(shù)引用。該函數(shù)檢查關聯(lián)控件的合法性,并更新對話框中關于控件值的信息。只有OK按鈕(或與之等效的控件)可檢查控件的值,以永久保存用戶最終選定的設置。也就是說,應該在OK按鈕的回調中更新與控件值相關聯(lián)的變量,而不是在單個空間的回調中更新,否則將無法通過Cancel按鈕來取消變量的值。如果OK按鈕的回調檢查到錯誤,則不應退出對話框,而應顯示錯誤信息,并將焦點返回到錯誤控件處。,1.動作表達式,動作表達式變量表,例:(action_tile“edit1”“(setqns$value)”),$value包含用戶輸入的字符串,動作表達式將其存入變量ns中,2.回調原因:指明動作發(fā)生的原因,并返回$reason變量中。,回調原因代碼,三、控件處理,1.初始化控件和回調時改變控件的模式,使控件成為對話框的初始化鍵盤焦點。禁用或啟用控件。如果控件是編輯框或圖像,則高亮顯示其內(nèi)容。,set_tile函數(shù):設置控件的值,格式:(set_tilekeyvalue)mode_tile函數(shù):設置控件模式,格式:(mode_tilekeymode),key:指定控件的字符串value:賦予控件的新值mode:控件控件模式代碼0啟用控件1禁用控件2將焦點設置到控件上3選擇編輯框內(nèi)容4圖像亮顯開關,例:,注意:當調用mode_tile來禁用帶有當前焦點的控件時,必須再次調用mode_tile將焦點設置到另一控件上。,2.單選按鈕的處理,單選按鈕出現(xiàn)在單選控件組中,每個單選按鈕以“1”表示開,“0”表示關。單選控件組的值是當前選定按鈕的key屬性,又可編程對話框(PDB)功能模塊管理一個控件組中的單選按鈕組的值,并確保同一時刻只能有一個單選按鈕被打開??蔀槊總€單選按鈕指定一個動作,但更為有效的辦法是為整個單選按鈕組指定一個動作,然后通過測試單選按鈕組的值來確定所選單選按鈕及相關聯(lián)的動作。,例:,3.滑塊的處理,當處理滑塊的動作和回調時,應用程序應檢查在回調過程中收到的原因代碼。每當?shù)竭_滑塊的增量邊界時,都要發(fā)生一個回調。,4.編輯框的處理,編輯框中的字符總是可見的,因此無須處理中間代碼;當編輯框上的焦點轉移時,編輯框只需返回回調代碼。,滑塊和編輯框的處理示例程序,- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- AutoCAD 軟件 二次開發(fā)
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權,請勿作他用。
鏈接地址:http://m.italysoccerbets.com/p-3390131.html