化工制圖AutoCAD實戰(zhàn)教程與開發(fā)隨書電子課件第9章_第1頁
化工制圖AutoCAD實戰(zhàn)教程與開發(fā)隨書電子課件第9章_第2頁
化工制圖AutoCAD實戰(zhàn)教程與開發(fā)隨書電子課件第9章_第3頁
化工制圖AutoCAD實戰(zhàn)教程與開發(fā)隨書電子課件第9章_第4頁
化工制圖AutoCAD實戰(zhàn)教程與開發(fā)隨書電子課件第9章_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第9章二次開發(fā)及AutoLISP?

AutoCAD二次開發(fā)在化工制圖中的應用?

AutoLISP語言基礎?VisualLISP基礎?

DCL基礎1編輯課件第9章二次開發(fā)及AutoLISP?AutoCAD二次AutoCAD二次開發(fā)在化工制圖中的應用本章目錄2編輯課件AutoCAD二次開發(fā)在化工制圖中的應用本章目錄2編輯課件二次開發(fā)的目的及必要性幾種主要的二次開發(fā)語言簡介化工AutoCAD二次軟件開發(fā)的思路及步驟3編輯課件二次開發(fā)的目的及必要性3編輯課件二次開發(fā)的目的及必要性AutoCAD軟件作為CAD工業(yè)的旗幟產(chǎn)品,以其強大的功能得到廣大用戶的青睞。它具有精確的坐標系,能夠完成各種圖形的精確繪制、任意縮放和修改,支持數(shù)字化儀的精確輸入。盡管如此,由于AutoCAD是作為一個通用的繪圖軟件而設計開發(fā)的,但各行各業(yè)都有自己的行業(yè)和專業(yè)標準,許多單位也有自己的技術規(guī)格和企業(yè)標準,化工行業(yè)也不例外,有著大量的各種圖紙設計標準,因而,AutoCAD不可能完全滿足每一用戶的具體應用要求。但是,AutoCAD具有開放的體系結構,它允許用戶和開發(fā)者在幾乎所有方面對其進行擴充和修改,同時可以利用多種開發(fā)語言,開發(fā)可以自動完成某一繪制任務的軟件,可大大提高繪制速度,改善工作效率。以上工作可稱之為AutoCAD的二次開發(fā)技術。也就說AutoCAD二次開發(fā)技術主要包括兩個方面:一方面是對它的功能進行擴充和修改,如修改或增加菜單、進行各種定制工作;另一方面是利用開發(fā)工具編寫能夠完成特殊任務的自動繪制軟件,如下面將介紹的通過人機交互界面輸入必要的數(shù)據(jù)后,系統(tǒng)自動完成法蘭的繪制,就屬于這一類型,在化工繪圖中,我們需要的也是有關這一方面的開發(fā)軟件,它能最大限度地滿足用戶的特殊需要,通過調(diào)用各種已經(jīng)開發(fā)好的專用零件圖繪制軟件,加快繪制速度,提高工作效率。尤其重要的是,可以將大量的計算工作交給計算機去完成。這樣,不僅提高了繪圖速度,同時也提高了繪制精度,避免了人為的計算錯誤。AutoCAD二次開發(fā)在化工制圖中的應用4編輯課件二次開發(fā)的目的及必要性AutoCAD二次開發(fā)在化工制圖中的應目前很多化工技術人員對AutoCAD的使用一般還僅限于它自身的各種繪圖功能,使用鼠標手工繪制各種圖件,對其強大的二次開發(fā)功能還沒有進行深入使用。如果能使用AutoCAD的二次開發(fā)技術開發(fā)出一套軟件,讓AutoCAD自動繪制我們目前使用的各種圖件,就可以大大提高作圖效率,發(fā)揮出AutoCAD的強大圖形編輯、修改功能,對圖件中的各種元素進行任意修改,滿足各種不同的圖件格式和繪圖標準,由此可見,對于一個化工技術人員來說,學會自己開發(fā)AutoCAD二次應用軟件顯得十分必要,因為這將大大減少具體的繪制工作,而可以將主要精力集中到設備的設計中去,從而加快化工設備的開發(fā)速度。近幾年來,隨著計算機軟、硬件技術的飛速發(fā)展及其應用的普及,也帶來了化工領域使用計算機的浪潮。首先是各課程教學使用了CAI課件,學生們可以清楚地看到各種物質(zhì)的具體顏色,并可以看到動畫反應,讓學生們能夠形象生動地上課。然后是各種實驗仿真軟件的出現(xiàn),讓學生們不用親自下到工廠,也不用浪費任何原料,在沒有危險的情況下就可以完成對實驗過程或者是生產(chǎn)流程的學習和實習。同時計算機可以對反應進行模擬,對實驗數(shù)據(jù)的擬合都大大方便了化工工作者。隨之誕生的各種化工專用軟件,給化學工業(yè)的發(fā)展注入了新鮮血液,使化學工業(yè)的發(fā)展如虎添翼。AutoCAD二次開發(fā)在化工制圖中的應用5編輯課件目前很多化工技術人員對AutoCAD的使用一般目前,隨著化學工業(yè)的進一步向前發(fā)展,各種新的機械設備被人們設計和制造,這些設備的工程圖都是一件很大的工程。比如一個完整熱交換器圖紙,就需要一個專人1~2天的工夫才能完成。利用AutoCAD的二次開發(fā)技術,可以編出對熱交換器的圖進行批處理的程序,只需通過簡單的人機會話,計算機能自動繪制出圖紙,這也是化工技術人員學習掌握AutoCAD二次開發(fā)技術的目的之所在。隨著化學工業(yè)的不斷日新月異,對設備圖紙繪制的速度要求也將越來越快,利用AutoCAD二次開發(fā)技術開發(fā)而成的軟件直接繪制各種設備的技術將在化學工業(yè)中得到更加廣泛的應用,其開發(fā)技術必將伴著化學工業(yè)一起發(fā)展。AutoCAD二次開發(fā)在化工制圖中的應用6編輯課件目前,隨著化學工業(yè)的進一步向前發(fā)展,各種新的機械設備被人們設幾種主要的二次開發(fā)語言簡介⑴AutoLISPAutoLISP語言是AutoCAD所支持的一種內(nèi)嵌式語言,它由美國Autodesk公司開發(fā),其目的是使用戶十分方便地利用AutoLISP編程語言對AutoCAD進行二次開發(fā),它采用了與LISP語言中的CommonLISP最近的語法和習慣約定,同時又針對AutoCAD增加了許多新的功能,使用戶可以直接調(diào)用幾乎全部的AutoCAD命令,因此它既具有一般高級語言的基本結構和功能,又具有AutoCAD強大的圖形處理能力,是目前計算機輔助設計和繪圖中較廣泛采用的語言之一。⑵VisualLISPVisualLISP(簡稱VLISP)是為加速AutoLISP程序開發(fā)而設計的強有力的工具。它提供了一個完整的集成開發(fā)環(huán)境(包括編譯器、調(diào)試器及其他工具,它可以顯著地提高自定義AutoCAD的效率)。VisualLISP提供的主要工具有:文本編輯器、格式編排器、語法檢查器、源代碼調(diào)試器、檢驗和監(jiān)視工具、文件編譯器、工程管理系統(tǒng)/快捷相關幫助與自動匹配功能和智能化控制臺等。VisualLISP克服了AutoLISP一直以來開發(fā)中所存在的諸多不便和某些局限性。從語言方面看,VisualLISP對AutoLISP語言進行了擴展,可以通過MicrosoftActiveXAutomation接口與對象交互。同時,通過實現(xiàn)事件反應器函數(shù),還擴展了AutoLISP響應事件的能力。VisualLISP已經(jīng)被完整地集成到AutoCAD中。AutoCAD二次開發(fā)在化工制圖中的應用7編輯課件幾種主要的二次開發(fā)語言簡介AutoCAD二次開發(fā)在化工制圖中⑶VBAVBA(VisualBasicforApplication)最早是建立在Office97中的標準宏語言,由于它在開發(fā)方面的易用性且功能強大,許多軟件開發(fā)商都將其嵌入自己的應用程序中,作為一種開發(fā)工具提供給用戶使用。而AutoCADVBA就是集成在AutoCAD中的VisualBasic開發(fā)環(huán)境,與VB的主要區(qū)別是VBA在與AutoCAD相同的進程空間中運行,提供了與AutoCAD關聯(lián)的快捷的編程環(huán)境,程序設計直觀快捷。它還提供了與其它可使用VBA應用程序集成的能力,可以作為其它應用程序如Word或Excel的自動化控制器??梢钥闯觯琕BA是其中編程很為快捷方便的一種,對于非計算機專業(yè)而更多熟悉VB編程語言的人來說,可以很快就掌握它。⑷ADSADS的全名是AutoCADDevelopmentSystem,它是AutoCAD的C語言開發(fā)系統(tǒng),ADS本質(zhì)上是一組可以用C語言編寫AutoCAD應用程序的頭文件和目標庫,它直接利用用戶熟悉的各種流行的C語言編譯器,將應用程序編譯成可執(zhí)行的文件在AutoCAD環(huán)境下運行,這種可以在AutoCAD環(huán)境中直接運行的可執(zhí)行文件叫做ADS應用程序。ADS由于其速度快,又采用結構化的編程體系,因而很適合于高強度的數(shù)據(jù)處理,如二次開發(fā)的機械設計CAD、工程分析CAD、建筑結構CAD、土木工程CAD、化學工程CAD、電氣工程CAD等。AutoCAD二次開發(fā)在化工制圖中的應用8編輯課件⑶VBAAutoCAD二次開發(fā)在化工制圖中的應用8編輯課件⑸ObjectARX

ObjectARX是一種嶄新的開發(fā)AutoCAD應用程序的工具,她以C++為編程語言,采用先進的面向?qū)ο蟮木幊淘恚峁┛膳cAutoCAD直接交互的開發(fā)環(huán)境,能使用戶方便快捷地開發(fā)出高效簡潔的AutoCAD應用程序。ObjectARX并沒有包含在AutoCAD中,可在AutoDESK公司網(wǎng)站中去下載,其最新版本是ObjectARXforAutoCAD2005,它能夠?qū)utoCAD的所有事務進行完整的、先進的、面向?qū)ο蟮脑O計與開發(fā),并且開發(fā)的應用程序速度更快、集成度更高、穩(wěn)定性更強。⑹ActiveXAutomation ActiveX技術來源于OLE(ObjectLinkingandEmbedding)技術。OLE最初是對象鏈接與嵌入,后來發(fā)展成為復合文檔技術,包括文字、圖片、聲音、動畫片和視頻等媒體可以共同存在于一個文檔中。它們可以由不同的應用程序產(chǎn)生,同時也可以在該文檔中編輯。如果應用程序支持OLE文檔,則在不同應用程序之間的切換由OLE自動完成。OLE技術和其它技術共同作用,從而實現(xiàn)不同應用程序之間的無縫鏈接。自動化技術(Automation)允許一個應用程序驅(qū)動另外一個程序。驅(qū)動程序被稱為自動化客戶,另一個為自動化服務器。自動化技術后來發(fā)展成為ActiveXAutomation。AutoCAD二次開發(fā)在化工制圖中的應用9編輯課件⑸ObjectARXAutoCAD二次開發(fā)在化工制圖中的應⑺VisualJava

Java是最早由Sun公司創(chuàng)建的一種頗具魅力的程序設計語言,她是針對嵌入系統(tǒng)而設計的。像許多開發(fā)語言一樣,Java是一組實時庫的集合,可為軟件開發(fā)者提供多種工具來創(chuàng)建軟件、管理用戶接口、進行網(wǎng)絡通訊、發(fā)布應用程序等。對AutoCAD用戶和開發(fā)者而言,Java代表著新一代的編程語言,它主要用于開發(fā)出全新的優(yōu)秀產(chǎn)品。AutoCAD二次開發(fā)在化工制圖中的應用10編輯課件⑺VisualJavaAutoCAD二次開發(fā)在化工制圖中化工AutoCAD二次軟件開發(fā)的思路及步驟化工AutoCAD二次軟件的開發(fā)和其它軟件的開發(fā)一樣,均需遵循一定的規(guī)律。一般來說,一個完善的AutoCAD二次軟件開發(fā)過程可以分成4個階段的內(nèi)容,它們分別是系統(tǒng)規(guī)劃、系統(tǒng)開發(fā)、系統(tǒng)運行與維護、系統(tǒng)更新。而系統(tǒng)規(guī)劃又可以分成3個方面的內(nèi)容,它們分別是戰(zhàn)略規(guī)劃、需求分析、資源分配。在這個階段,我們主要任務是確定所需要開發(fā)軟件的目的、使用對象、使用者的要求、開發(fā)者目前的能力及擁有的資源。軟件開發(fā)的第二階段是系統(tǒng)開發(fā),它包括系統(tǒng)分析、系統(tǒng)設計、系統(tǒng)實施。這時的主要任務根據(jù)第一階段已經(jīng)做的工作基礎上,提出所開發(fā)軟件的邏輯方案、確定系統(tǒng)開發(fā)中每一步的內(nèi)容和任務,在此基礎上,再進行系統(tǒng)總體結構設計,提出系統(tǒng)總體布局的方案。至此,軟件開發(fā)工作還停留在邏輯開發(fā)狀態(tài),尚未進入具體的編碼工作。軟件開發(fā)完成第二階段的系統(tǒng)設計后,就進入了實質(zhì)性的編碼工作,也就是說進入了系統(tǒng)的實施階段,這時要完成各種編碼工作,完善系統(tǒng)各個接口之間的聯(lián)絡,改善界面的友好程度,對整個軟件進行組裝及調(diào)試,最后完成交付使用前的各項工作。如該保密的部分需要進行封裝;可以公開的部分需要做好友善的人機界面。AutoCAD二次開發(fā)在化工制圖中的應用11編輯課件化工AutoCAD二次軟件開發(fā)的思路及步驟AutoCAD二次軟件開發(fā)的第三階段是運行和維護階段,一般對于規(guī)模較小的軟件,對這方面的考慮就比較少。比如我們自己經(jīng)常開發(fā)一些小軟件來解決一些實際問題,就較少考慮以后的維護,一般只要滿足目前的應用就可以了。但對于一個完善的軟件來說,就需要考慮實際運行過程中出現(xiàn)的各種情況,并有解決方案及維護方法。這樣,就會使得一個看上去較小的軟件,也會變得復雜起來,但這種復雜為使用和維護帶來了方便,提高了軟件對付外來情況的能力,提高了軟件的使用壽命,實際上等于節(jié)約了軟件使用成本。任何一個軟件,總有它更新的時候,此時,進入了軟件開發(fā)的第4階段,即系統(tǒng)更新階段,在新的情況下,對原有的系統(tǒng)進行更新開發(fā)。AutoCAD二次開發(fā)在化工制圖中的應用12編輯課件軟件開發(fā)的第三階段是運行和維護階段,一般對于AutoLISP語言基礎本章目錄13編輯課件AutoLISP語言基礎本章目錄13編輯課件基本運算基本函數(shù)編程中常用的分支及條件判斷函數(shù)常用的繪圖命令AutoLISP命令調(diào)用過程

14編輯課件基本運算14編輯課件⑴加法

格式:(+<數(shù)><數(shù)>…)功能:求出所列數(shù)的總和實例:(+2030)結果為50(+15-10)結果為5⑵減法格式:(-<數(shù)><數(shù)>…)功能:求出第一個數(shù)逐次減去后面數(shù)的差實例:(-1203050)結果為40(-15-10)結果為25⑶乘法格式:(*<數(shù)><數(shù)>…)功能:求出所列數(shù)的乘積實例:(*2030)結果為600(*1.5-102)結果為-30⑷除法格式:(/<數(shù)><數(shù)>…)功能:求出第一個數(shù)逐次除以后面數(shù)的商實例:(/20)結果為20(/1302)結果為65(/330)由于表中的兩個元素均為整型數(shù),結果也為整型數(shù),故結果為0(/3.030)結果為0.1

(/30(/69))系統(tǒng)顯示被0除,原因在于表(/69)的值為0AutoLISP語言基礎基本運算15編輯課件⑴加法AutoLISP語言基礎基本運算15編輯⑸自然數(shù)求冪格式:(exp<數(shù)>)功能:求e的<數(shù)>次冪值,e=2.71828實例:(exp2.0)結果為7.3890561(exp0)結果為1⑹普通數(shù)求冪格式:(expt<底數(shù)><冪>)功能:求<底數(shù)>的<冪>次方值實例:(expt23)結果為8⑺求自然對數(shù)格式:(log<數(shù)>)功能:求<數(shù)>的自然對數(shù),要求<數(shù)>必須大于零實例:(log10.0)結果為2.3025851⑻求平方根格式:(sqrt<數(shù)>)功能:求<數(shù)>的平方根,要求<數(shù)>必須大于零實例:(sqrt4.0)結果為2.0AutoLISP語言基礎基本運算16編輯課件⑸自然數(shù)求冪AutoLISP語言基礎基本運算16⑼求絕對值格式:(abs<數(shù)>)功能:求<數(shù)>的絕對值實例:(abs-3)結果為3⑽求最大值格式:(max<數(shù)1><數(shù)2>…)功能:求<數(shù)1>,<數(shù)2>…的最大值實例:(max23410)結果為10⑾求余數(shù)格式:(rem<數(shù)1><數(shù)2>…)功能:求<數(shù)1>整除<數(shù)2>的余數(shù),若參數(shù)多于兩個,則將<數(shù)1>整除<數(shù)2>后的余數(shù)再整除<數(shù)3>,求出余數(shù),以此類推。實例:(rem5094)結果為1AutoLISP語言基礎基本運算17編輯課件⑼求絕對值AutoLISP語言基礎基本運算17編AutoLISP語言基礎⑴正弦函數(shù)SIN格式:(sin<角度>),其中<角度>用弧度表示功能:求<角度>的正弦值實例:(sin(/pi2))結果為1⑵余弦函數(shù)COS格式:(cos<角度>),其中<角度>用弧度表示功能:求<角度>余弦值實例:(cos(/pi2))結果為0⑶正切TAN格式:(tan<角度>),其中<角度>用弧度表示功能:求<角度>正切值實例:(tan(/pi4))結果為1⑷反正切函數(shù)ATAN格式:(atan<數(shù)>)功能:求<數(shù)>反正切值,單位為弧度,為[-π/2,π/2]實例:(atan(1))結果為0.785398,即(π/4)實例:(cos(/pi2))結果為0基本函數(shù)18編輯課件AutoLISP語言基礎⑴正弦函數(shù)SIN基本函數(shù)⑸取整函數(shù)FIX格式:(fix<數(shù)>)功能:求<數(shù)>的整數(shù)部分,相當于高級語言中的“INT(數(shù))”語句。實例:(fix7.8)結果為7(fix-7.8)結果為-7(fix9)結果為9⑹實型化函數(shù)FLOAT格式:(float<數(shù)>)功能:求<數(shù)>轉(zhuǎn)化為實型數(shù),不考慮該數(shù)原來的類型實例:(float3)結果為3.0(float3.3)結果為3.3⑺賦值函數(shù)SETQ 格式:(setq<變量1><表達式1>[<變量2><表達式2>]…)功能:將表達式的值賦給變量,變量和表達式需成對出現(xiàn)實例:(setqa10)結果a=10(setqs“it”)結果s=“it”(setqb123c10d45)結果b=123c=10d=45(setqt(+3445))結果t=79(setqP1‘(3445))(setqp1'(3040))//確定點P1的坐標(setqp2'(300400))//確定點P2的坐標(command“l(fā)ine”p1p2“”)//繪制從P1點到P2點的直線AutoLISP語言基礎基本函數(shù)19編輯課件⑸取整函數(shù)FIXAutoLISP語言基礎基本函數(shù)⑻取表中第一元素CAR函數(shù)格式:(car<表>),表必須為引用表而非標準表,但可以是簡單表,也可以是嵌套表。功能:提取<表>的頂層第一個元素實例:(car‘(135))結果為1(car‘((13)65))結果為(13)⑼取表中除第一元素外其它元素的CDR函數(shù)格式:(cdr<表>),表必須為引用表而非標準表,但可以是簡單表,也可以是嵌套表。功能:提取<表>的除頂層第一個元素外的其它元素實例:(cdr‘(135))結果為(35)(cdr‘((13)65))結果為(65)⑽CAR和CDR的組合函數(shù)CAR和CDR可以任意組合,其組合深度可達4層,執(zhí)行時從右到左依次執(zhí)行,若搞錯次序,其結果必然出錯。4個層次的組合形式為CAR、CXXR、CXXXR、CXXXXR,其中X既可以是A也可以是D,例如:(cadr'(2(123)34))結果為(123)(caadr'(2((116)23)34))結果為(116)(caaadr'(2((116)23)34))結果為11(caaddr'(2((116)23)(34)))結果3AutoLISP語言基礎基本函數(shù)20編輯課件⑻取表中第一元素CAR函數(shù)AutoLISP語言基礎基⑾LAST函數(shù)格式:(last<表>),表必須為引用表而非標準表,但可以是簡單表,也可以是嵌套表。功能:提取<表>的頂層中最后一個元素實例:(last'(123))結果為3(last‘(123(45)))結果為(45)⑿NTH函數(shù)格式:(nth<序號><表>),表必須為引用表而非標準表,但可以是簡單表,也可以是嵌套表。功能:提取<表>中第<序號>個元素,注意第一個元素的序號為0號,以此類推。實例:(nth2'(23(45)5))結果為(45)(nth3'(23(45)5))結果為5⒀LIST函數(shù)格式:(list<表達式1><表達式2>……)功能:將所有的<表達式>按原位置構成新表,可用于確定點的坐標位置。實例:(list23'(56))結果為(23(56))(list23)結果為(23)下面是一個利用list確定點的位置,繪制圓的小程序:(setqp1(list22233))(setqp2(list200300))(command"circle"p2160)(command"circle"p1160)AutoLISP語言基礎基本函數(shù)21編輯課件⑾LAST函數(shù)AutoLISP語言基礎基本函⒁ATOF函數(shù)格式:(atof<數(shù)字串>)功能:將<數(shù)字串>轉(zhuǎn)換成實型數(shù),返回實型數(shù)實例:(atof"23")返回結果為23.0⒂ASCII函數(shù)格式:(ascii<字符串>)功能:將<字符串>中第一個字符轉(zhuǎn)換成ASCII碼,并返回該值實例:(ascii"bc")返回結果為98⒃CHR函數(shù)格式:(chr<整數(shù)>)功能:將ASCII碼為<整數(shù)>的轉(zhuǎn)換成相應字符,并返回該字符實例:(chr69)返回結果為"E"(chr80)返回結果為"P“⒄ITOA函數(shù)格式:(itoa<整數(shù)>)功能:將<整數(shù)>轉(zhuǎn)換成整數(shù)字符串實例:(itoa5)返回結果為"5“AutoLISP語言基礎基本函數(shù)22編輯課件⒁ATOF函數(shù)AutoLISP語言基礎基本函數(shù)2⒅ATOI函數(shù)格式:(atoi<數(shù)字串>)功能:將<數(shù)字串>轉(zhuǎn)換成整數(shù),返回值截去小數(shù)部分實例:(atoi"45.4")返回結果為45(atoi"-5.6")返回結果為-5(atoi"7")返回結果為7(atoi"34.6ac")返回結果為34(atoi"df43")45返回結果為0說明:當數(shù)字串中有非數(shù)字字符時,則轉(zhuǎn)換到第一個非數(shù)字原子時終止。⒆STRCAT函數(shù)格式:(strcat<字符串1><字符串2>……)功能:將<字符串>按先后順序頭尾相連起來,組成一個新的字符串。實例:(strcat"bc""etr""ty")返回結果為"bcetrty"AutoLISP語言基礎基本函數(shù)23編輯課件⒅ATOI函數(shù)AutoLISP語言基礎基本函數(shù)2(20)SUBSTR函數(shù)格式:(substr<字符串><起點>[<長度>]功能:從<字符串>中提取一個子串,該子串從起點的字符位置開始,由連續(xù)<長度>個字符組成,若<長度>缺省,則到字符串結束。實例:(substr"b212c"23)返回結果為"212"(substr"b2er12c"2)返回結果為"2er12c“(21)READ函數(shù)格式:(read<字符串>)功能:將<字符串>轉(zhuǎn)化成表或原子,文件處理時經(jīng)常使用實例:(read"ad")返回結果為AD(read"b")返回結果為B(read"(ab)")返回結果為(AB)(read"(34)")返回結果為(34)AutoLISP語言基礎基本函數(shù)24編輯課件(20)SUBSTR函數(shù)AutoLISP語言基礎基本編程中常用的分支及條件判斷函數(shù)

在程序編寫中經(jīng)常會用到一些條件判斷函數(shù)及循環(huán)函數(shù),沒有這些函數(shù),就難以完成一個理想的程序,下面將一些在編程中使用程度較高的函數(shù)介紹一下。⑴關系運算函數(shù)關系運算函數(shù)是編程中分支及條件判斷函數(shù)的基礎,它對數(shù)值型表達式的大小進行比較,表達式可以是兩個或兩個以上,其返回值是邏輯變量。比較運算成立,則返回T;不成立則返回nil,常作為條件用于條件判斷語句和循環(huán)判斷語句中,這一點將在下面講解中提到。AutoLISP共有6種關系運算函數(shù),它們分別是“=”等于、“/=”不等于、“<”小于、“>”大于、“<=”小于等于、“>=”大于等于。其中等于的關系函數(shù),其表達式只能兩個,下面是6種關系函數(shù)的實際例子:AutoLISP語言基礎(<2456)返回結果T(<2453)返回結果nil,全程比較(>8739)返回結果nil,全程比較(>8731)返回結果T(=22)返回結果T(="s""b")返回結果nil(/=123)返回結果T(/=113)返回結果nil,只比較前面兩個表達式(<=335)返回結果T(>=551)返回結果T25編輯課件編程中常用的分支及條件判斷函數(shù)AutoLISP語言基礎(<⑵邏輯運算函數(shù)AutoLISP共有3種邏輯運算函數(shù),分別是邏輯和AND、邏輯或OR、邏輯非NOT,下面通過實例說明其應用。(andadc3)返回結果nil,只要有一個表達式為假,則返回nil(anddc)返回結果nil(setqa3b4)返回結果4,返回最后一個賦值(andab)返回結果T,由于前面給a、b賦了值(and(<23)(+13)(>35))返回結果nil(or12ab)返回結果T,只要有一個表達式為真,則返回T(or(>42)(<42))返回結果T(not2)返回結果nil(not(>69))返回結果T⑶二分支條件函數(shù)IF格式:(if<測試表達式><成立表達式><非表達式>)功能:對<測試表達式>進行運算,若<測試表達式>成立,則執(zhí)行<成立表達式>,否則,執(zhí)行<非表達式>,兩者必居其一,所以稱之為二分支條件函數(shù),是在編程中經(jīng)常用到的條件判斷函數(shù)。下面是幾個實際例子:(if(=13)35)測試式不成立,執(zhí)行第二個表達式,第二個表達式為原子,返回5(if(<13)(setqa2)(setqa9))測試式成立,執(zhí)行第一個表達式,返回2(if(=13)"yes")測試式不成立,但無第二個表達式,返回nil(if1"yes""no")測試表達式為1,雖然不為T,但也不為nil,仍執(zhí)行第一表達式,返回“yes”AutoLISP語言基礎26編輯課件⑵邏輯運算函數(shù)AutoLISP語言基礎26編輯課件⑷多分支條件函數(shù)COND前面二分支條件函數(shù)只能解決兩種結果中選一種的條件判斷,若有多個條件中選一,則需用COND函數(shù)。格式:(cond(<測試表達式1><結果表達式1>)(<測試表達式2><結果表達式2>)::(<測試表達式n><結果表達式n>))該函數(shù)的參數(shù)為任意數(shù)目的表,每個表有兩個元素,第一個元素為測試式,第二個元素為結果。功能:對每一個支表中的<測試表達式>依次進行運算,若<測試表達式>成立,則執(zhí)行該支表對應的<結果表達式>,停止后面的測試工作;否則,繼續(xù)執(zhí)行<測試表達式>,直到最后一個分支條件。AutoLISP語言基礎27編輯課件⑷多分支條件函數(shù)CONDAutoLISP語言基礎27編輯課件⑸順序控制函數(shù)PROGN常和IF函數(shù)一起使用,使其在某一條件下,順序執(zhí)行多個表達式。格式:(progn<表達式1>

<表達式2>::)功能:按順序執(zhí)行多個表達式,并返回最后表達式求值結果,表達式需為標準表。⑹常見測試函數(shù)ZEROP函數(shù)用于判斷測試項是否為零,若為零,則返回T,否則返回nil。MINUSP函數(shù)用于判斷測試項是否為負,若為負,則返回T,否則返回nil。NUMBERP函數(shù)用于判斷測試項是否為數(shù),若為數(shù),則返回T,否則返回nil。ATOM函數(shù)用于判斷測試項是否為原子,若為原子數(shù),則返回T,否則返回nil。LISTP函數(shù)用于判斷測試項是否為表,若為表,則返回T,否則返回nil。AutoLISP語言基礎28編輯課件⑸順序控制函數(shù)PROGNAutoLISP語言基礎28編輯課件⑺循環(huán)函數(shù)在各種程序編寫中,循環(huán)語句是不可缺少的,AutoLISP的兩種主要循環(huán)函數(shù)是WHILE函數(shù)和REPEAT函數(shù),下面分別介紹之。①WHILE函數(shù)格式:(while<測試表達式>[標準表1][標準表2]:)功能:先對測試表達式進行測試,若其值不為nil,則依次執(zhí)行下面的各個[標準表],執(zhí)行完各[標準表]后,再返回來對測試表達式進行測試,直至測試表達式為nil,停止循環(huán)執(zhí)行。②REPEAT函數(shù)格式:(repeat<次數(shù)>[標準表1][標準表2]:)功能:按該定的次數(shù)進行循環(huán)計算式為nil,停止循環(huán)執(zhí)行。AutoLISP語言基礎29編輯課件⑺循環(huán)函數(shù)AutoLISP語言基礎29編輯課件常用的繪圖命令⑴常用的交互命令在程序編寫中經(jīng)常要用到一些交互式命令,通過交互命令,可提高程序的人機對話能力。AutoLISP也提供了一些常見的交互命令,下面分別介紹。①輸入整型數(shù)GETINT格式:(getint[提示])功能:該函數(shù)提示用戶輸入一個整型數(shù),并返回該數(shù),常和賦值函數(shù)SETQ合用實例:(setqn(getint“n=”))//等待用戶輸入一個整型數(shù),并將該數(shù)賦值給n。②輸入實型數(shù)GETREAL格式:(getreal[提示])功能:該函數(shù)提示用戶輸入一個整型數(shù),并返回該數(shù),常和賦值函數(shù)SETQ合用實例:(setqa(getreal“a=”))//等待用戶輸入一個實型數(shù),并將該數(shù)賦值給a。③輸入字符串GETSTRING格式:(getstring[提示])功能:該函數(shù)提示用戶輸入一個字符串,并返回該數(shù),常和賦值函數(shù)SETQ合用實例:(setqm(getstring“yourname”))//等待用戶輸入一個字符串,并將該字符串賦值給m,若輸入xiaodong,返回“xiaodong”。需要注意的是輸入字符串時,千萬別用空格鍵,否則只把空格鍵以前的內(nèi)容作為輸入的字符串。AutoLISP語言基礎30編輯課件常用的繪圖命令AutoLISP語言基礎30編輯課件④輸入點GETPOINT格式:(getpoint[基點][提示])功能:該函數(shù)提示用戶輸入一個點,若有基點,這將從基點到輸入的點之間畫一條直線拖動直線,但命令執(zhí)行過后消失。實例:(setqP1(getpoint‘(4050)“第二點”))//等待用戶從鍵盤輸入點或用光標選點。⑤輸入距離值GETDIST格式:(getdist[提示])功能:該函數(shù)提示用戶輸入一個距離值。實例:(setqtspac(getdist“輸入距離”))//等待用戶從鍵盤輸入某一數(shù)值。⑵點的確定確定點的位置,是進行各種繪制工作的基礎,除了前面介紹的用getpoint函數(shù)外,還可以用下面幾種方法確定點(通過繪制直線的小程序加以說明驗證)。實例:(setqp1'(3040))//用禁止求值表,確定P1點的位置(setqp2'(300400))(command"line"p1p2"")⑶直線的繪制LINE格式:(command“l(fā)ine”P1P2P3…………[條件])功能:將P1、P2、P3…….等點用直線連接起來,其中[條件]可缺省,若條件中輸入“c“,則繪制的將是封閉曲線。AutoLISP語言基礎31編輯課件④輸入點GETPOINTAutoLISP語言⑷多義線繪制格式:(command“pline”<起點>“w”<起點線寬><末點線寬><第二點>……<末點>[條件])功能:將P1、P2、P3…….等點用各種曲線連接起來,其中[條件]可缺省,若條件中輸入“c“,則繪制的將是封閉曲線。⑸矩形繪制格式:(command“rectang”[倒角(C)/標高(E)/圓角(F)/厚度(T)/寬度(W)]<指定另一個角點>[尺寸(D)]<指定另一個角點>)功能:繪制符合格式中定義的矩形。⑹圓的繪制格式:(command“circle”[三點(3P)/兩點(2P)/相切、相切、半徑(T)]<圓心<半徑>)功能:繪制符合格式中定義的圓,默認的輸入方式是圓心、半徑,其它輸入方式需根據(jù)具體選定的形式而定。⑺交點的確定格式:(inters<端點1><端點2><端點3><端點4>[<任選項>])功能:求<端點1>和<端點2>所確定的直線和<端點3>和<端點4>所確定的直線的交點,若存在則返回交點,若不存在,則返回nil。如果有任選項,且該項為nil,則可求延長線的交點。AutoLISP語言基礎32編輯課件⑷多義線繪制AutoLISP語言基礎32編輯課件⑻圖層的設置格式:(command“l(fā)ayer”“m”<圖層名>“c”<圖層顏色>“l(fā)”<圖層線型>“l(fā)w”<圖層線寬>"")功能:設置和格式中描述相符合的圖層,除圖層名為不可缺省外,其它均可采用默認值,當調(diào)用圖層時,可只采用格式中的前4項。⑼剖面線繪制格式:(command“batcht”<填充圖案模式>[<比例>][<角度>]<填充對象>)功能:將<填充對象>按格式中定義的要求進行填充,其中[<比例>]和[<角度>]可默認,<填充對象>有多種獲取方法,如果是填充剛繪制好的實體,則可用entlast命令。⑽尺寸標注格式:(command“dim”<標注模式><標注起點><標注終點><標注線位置中點>)[<標注內(nèi)容>])功能:<標注起點>和<標注終點>之間按標注模式標注尺寸,若標注內(nèi)容缺省,則按默認方式標注。⑾文本書寫格式:(command“text”[<起點類型>]<起點><字高><字旋轉(zhuǎn)角度4><文字內(nèi)容>)功能:將文字內(nèi)容按格式中的定義書寫出來,如缺省[<起點類型>]則以左下角為起點。AutoLISP語言基礎33編輯課件⑻圖層的設置AutoLISP語言基礎33編輯課件AutoLISP命令調(diào)用過程首先將AUTOLISP的程序用任何一種ASCII碼文本編輯器來編輯,在DOS環(huán)境下可采用EDIT編輯,在WINDOWS環(huán)境下可用附件中的記事本編輯,并注意在保存時以.LSP為后綴,一般的調(diào)用過程如下。①用編輯器編寫好,以*.LSP存盤。②在AutoCAD中的命令中輸入:(Load“盤符/子目錄/文件名”),回車。③輸入:(文件名、參數(shù)1、參數(shù)2……)[注意參數(shù)和參數(shù)之間不要加逗號],回車。④在AutoCAD的界面上自動生成圖。AutoLISP語言基礎34編輯課件AutoLISP命令調(diào)用過程AutoLISP語言基礎34編輯VisualLISP基礎本章目錄35編輯課件VisualLISP基礎本章目錄35編輯課件安裝啟動編輯調(diào)試36編輯課件安裝36編輯課件安裝

VisualLISP無需單獨安裝,我們在安裝AutoCAD2004時已經(jīng)將其捆綁按安裝在一起,只要在使用時調(diào)用它即可,這為我們省了不少安裝軟件過程中的麻煩,同時也使得該軟件和AutoCAD之間的關系更加緊密。尤其是VisualLISP中的部分AutoLISP程序幾乎可以移植到任何版本的AutoCAD中,而不受版本先后的影響。VisualLISP基礎37編輯課件安裝VisualLISP基礎37編輯課件啟動

啟動VisualLISP有兩種方法,但都需首先啟動AutoCAD軟件。第一種方法是從AutoCAD菜單中選擇“工具”>>“AutoLisp”>>“VisualLisp編輯器”;第二中方法是在AutoCAD命令行中輸入“vlisp”,啟動VisualLisp編輯器。VisualLISP基礎38編輯課件啟動VisualLISP基礎38編輯課件編輯VisualLISP的程序在編輯窗口進行編輯,編輯時,系統(tǒng)會自動進行一些識別,并將其顯示成不同的顏色。如括號是紅色;函數(shù)是藍色,如果想輸?shù)氖歉鞣N函數(shù),一般為表中第一項,但輸完后系統(tǒng)沒有自動變成藍色,則說明你輸錯了;雙引號內(nèi)的繪圖命令為粉紅色,包括雙引號本身;各種變量是黑色;數(shù)字是綠色。掌握這些規(guī)律對減少編程中的錯誤很有幫助。在編程過程中,如果遇到一些較為生疏的函數(shù),可以通過系統(tǒng)的幫助功能加以解決。VisualLISP基礎39編輯課件編輯VisualLISP基礎39編輯課件調(diào)試調(diào)試是編程工作中一項十分重要又非常繁重的工作。在沒有VisualLISP之前,AutoLISP程序的調(diào)試是十分困難的,常常找不到問題之所在。幸好有了VisualLISP,使調(diào)試工作有了質(zhì)的飛躍。利用其提供的調(diào)試工具和專用工具,一般可以較快地找到問題。系統(tǒng)調(diào)試中最常見的錯誤是缺少括號或有多余括號;其次是錯誤函數(shù)或命令,常常是繪圖命令輸錯,因為若函數(shù)錯誤,在編寫中可以根據(jù)顏色判斷;還有列表缺陷,被零除及函數(shù)被取消。對函數(shù)被取消這種現(xiàn)象有點特殊,因為它并不是當前所編的程序有問題,而是在上一次調(diào)試過程中,所編程序存在缺陷,使的AutoCAD處于命令等待狀態(tài)。這時,需要通過視圖轉(zhuǎn)換,激活AutoCAD,取消命令等待狀態(tài),就可以了。根據(jù)我們自己開發(fā)程序的經(jīng)驗,認為調(diào)試工作需和整個軟件的開發(fā)工作結合起來。在程序開發(fā)的步驟上考慮到調(diào)試工作問題,以采用從下到上的程序編程工作為佳,結合該方法,作者推薦如下的編程調(diào)試步驟。①將整個軟件分解成功能相對獨立的功能塊,再將功能塊分解成若干個小程序。VisualLISP基礎40編輯課件調(diào)試VisualLISP基礎40編輯課件②將小程序中的每一個語句,按照先后次序進行編輯。在編輯過程中首先利用顏色的改變,糾正一些明顯的錯誤,如果對某一語句把握不大,可直接加載該語句,判斷系統(tǒng)能否通過。關于加載運行可通過選中需要加載的語句,點擊專用工具中欄中的第二個工具,一般情況下,以編完相對較完整的一段語句后,再將這段進行加載運行較好,如所有的賦值語句。一段語句編寫完成,加載運行結果正確,則進入下一段語句的編寫。如正確,但根據(jù)錯誤提示可明顯找到問題的,則修改后再加載運行;如無法根據(jù)錯誤提示找到問題的,則可以采用調(diào)試工具欄中的各種方法進行錯誤查找,如仍無法查到,則需逐句加載,但在逐句加載中,需要補充對加載語句中所需變量值的設定工作。通過以上工作,將小程序全局調(diào)通,并進行封裝。③將同一功能的小程序進行組裝,并進行調(diào)試,調(diào)試完成,將功能程序進行封裝。④將不同功能的功能程序進行組裝,并進行全局調(diào)試,調(diào)試通過,完成軟件基本開發(fā)工作。⑤根據(jù)客戶應用的各種情況,對軟件進行各種測試,對發(fā)現(xiàn)問題進行修改,最后得到完善軟件,并將其封裝。VisualLISP基礎41編輯課件②將小程序中的每一個語句,按照先后次序進行編輯。在編輯過程中DCL基礎本章目錄42編輯課件DCL基礎本章目錄42編輯課件定義控件程序編輯軟件調(diào)試及加載43編輯課件定義43編輯課件定義對話框是人機交互的主要界面之一,它具

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論