CAD二次開發技術一二課案_第1頁
CAD二次開發技術一二課案_第2頁
CAD二次開發技術一二課案_第3頁
CAD二次開發技術一二課案_第4頁
CAD二次開發技術一二課案_第5頁
已閱讀5頁,還剩32頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

會計學1CAD二次開發技術一二課案本課程要學習的內容第1章AutoCAD及其二次開發工具簡介第2章

AutoLISP基本函數和繪圖功能第3章

AutoLISP分支函數與循環結構第4章

AutoLISP輸入輸出函數和圖形數據庫第5章

AutoLISP對話框設計技術第1頁/共37頁§1.1AutoCAD簡介§1.2AutoCAD二次開發§1.3AutoCAD二次開發工具簡介§1.4AutoLISP語言概述第1章AutoCAD及其

二次開發工具簡介

第2頁/共37頁§1.1

AutoCAD簡介

AutoCAD是美國Autodesk公司開發的通用CAD軟件,1982年首次推出了AutoCADR1.0版本,經過不斷的版本更新,現最新的是AutoCAD2011版本。

AutoCAD是目前微機上應用最為廣泛的通用交互式計算機輔助繪圖與設計軟件包。AutoCAD的強大生命力在于它的通用性、多種工業標準和開放的體系結構。用AutoCAD繪圖速度更快、精度更高、而且便于個性,它已經在航空航天、造船、建筑、機械、電子、化工、美工、輕紡等很多領域得到了廣泛應用,并取得了豐碩的成果和巨大的經濟效益。

第3頁/共37頁AutoCAD軟件具有如下特點:

(1)具有完善的圖形繪制功能。

(2)有強大的圖形編輯功能。

(3)可以采用多種方式進行二次開發或用戶定制。

(4)可以進行多種圖形格式的轉換,具有較強的數據交換能力。

(5)支持多種硬件設備。

(6)支持多種操作平臺。

(7)具有通用性、易用性,適用于各類用戶。§1.1

AutoCAD簡介第4頁/共37頁

為了適用于各種產品的設計需求,多數CAD軟件的功能都具有很高的通用性。但由于針對性不強,用戶需求與CAD系統規模之間的矛盾日益增加,存在設計效率不高的問題。在CAD軟件平臺上,結合具體的應用需求,總結行業的設計知識和經驗,開發面向行業和設計流程的CAD系統,這就是所謂CAD二次開發。

AutoCAD的開放體系結構。允許用戶采用高級編程語言對其進行擴充和修改。Autodesk公司自AutoCADv2.18版至AutoCAD2000的短短十幾年間,就相繼推出了三代二次開發工具?!?.2

AutoCAD二次開發第5頁/共37頁

AutoLISPAutoLISP是1986年隨AutoCADv2.18提供的二次開發工具。它是嵌入AutoCAD內部的一種人工智能語言。使用AutoLISP可調用幾乎所有的AutoCAD命令。AutoLISP語言最典型的應用之一是實現參數化繪圖程序設計,包括尺寸驅動程序和鼠標拖動程序等。另一個典型應用就是驅動AutoCAD提供PDB模塊構成DCL文件,創建自己的對話框。

AutoLISP適合于有能力的終端用戶完成一些自己的開發任務?!?.3AutoCAD二次開發工具簡介第6頁/共37頁VisualLISP(VLISP)VLISP是AutoLISP的換代產品。與AutoLISP完全兼容,并提供它所有的功能,是新一代的AutoCADLISP語言。VLISP對語言進行了擴展,可以通過MicrosoftActiveXAutomation接口與對象交互。作為開發工具,VLISP提供了一個完整的集成開發環境(IDE),包括編譯器、調試器和其他工具,可以提高二次開發的效率?!?.3AutoCAD二次開發工具簡介第7頁/共37頁VBAVBA是2000版本后具備的功能。它通過AutoCADActiveXAutomation接口對AutoCAD進行編程控制,是一個引入了對象的設計環境,為用戶提供類似VisualBasic語言所擁有的功能,可以執行并存取

AutoCAD環境的所有資源,適合編寫中型的數據庫類的CAD軟件?!?.3AutoCAD二次開發工具簡介

ActiveXAutomation是微軟公司推出的一個技術標準,其作用是在Windows系統的統一管理下協調不同的應用程序,允許應用程序之間相互控制、相互調用。

AutoCADActiveX技術提供了一種機制,可使編程者通過編程手段從AutoCAD的內部或外部來操縱AutoCAD。ActiveX是由一系列的對象組成,每一個對象代表了AutoCAD中一個明確的功能,如繪制圖形對象、定義塊和屬性等等。ActiveX所具備的絕大多數AutoCAD功能,均以方法和屬性的方式被封裝在ActiveX對象中,只要使用某種方式,使ActiveX對象得以“暴露”,那么就可以使用各種面向對象編程的語言對其中的方法、屬性進行引用,從而達到對AutoCAD實現編程的目的。

第8頁/共37頁ARXObjectARX是AutoDesk公司針對AutoCAD平臺上的二次開發而推出的一個開發軟件包,它提供了以C++為基礎的面向對象的開發環境及應用程序接口,能真正快速的訪問AutoCAD圖形數據庫。ObjectARX應用程序是一個DLL(動態鏈接庫),共享AutoCAD的地址空間,對AutoCAD進行直接函數調用。所以,使用ARX編程的函數的執行速度得以大大提高。ARX類庫采用了標準的C++類庫的封裝形式,這也大大提高了程序員編程的可靠度和效率。由于是在Windows及VC++編程環境里運行,所以,對開發者的編程能力要求較高?!?.3AutoCAD二次開發工具簡介第9頁/共37頁LISP(ListProcessingLanguage)是一種計算機的表處理語言,是在人工智能學科領域廣泛應用的一種程序設計語言。

AutoLISP語言是嵌套于AutoCAD內部,將LISP語言與AutoCAD有機結合的產物。使用AutoLISP可直接調用幾乎所有的AutoCAD命令。AutoLISP語言既具備一般高級語言的基本功能,又具有一般高級語言所沒有的強大的圖形處理功能。是當今世界上CAD軟件中被廣泛應用的語言之一。

AutoLISP程序設計較簡單易懂,易于掌握。適合于有能力的終端用戶完成一些自己的開發任務。

VisualLISP是AutoLISP的換代產品。與AutoLISP完全兼容,并提供它所有的功能,是新一代的AutoCADLISP語言。VLISP對語言進行了擴展,可以通過MicrosoftActiveXAutomation接口與對象交互。§1.4AutoLISP語言概述第10頁/共37頁一、AutoLISP的數據類型整數:(-2147483648到+2147483648)實數:(-1.79769310308到+1.79769310308

)符號:包括除“(”、“)”、“.”、“‘”、“;”以外的任何打印字符。長度沒有限制,大小寫等價。字符串:包含在一對雙引號內的一組字符包括任何可以打印的字符。區別大小寫。最大長度為100個字符,100以后的字符無效。沒有任何字符的字符串為空串:””§1.4AutoLISP語言概述常用術語“符號”來指儲存靜態數據的一個符號名,如內建式函數和自定義函數。常用術語“變量”來指存儲程序數據的符號名(只有當前類型沒有固定類型,字母開頭,不用內部函數名和保留字符,如:+、-、*、/、<、>、.、;、(、)、pi、pause、T、nil等等)。AutoLISP的變量不需要事先定義。

每一個變量都要消耗少量內存,故當變量值不再有用時重復使用變量名或將變量設置成nil是良好的程序設計習慣。其值保持不變的變量稱為常量,如:Pi整數、實數、符號、字符串在AutoLISP語言中稱為原子。原子包括:數字原子、符號原子和串原子。第11頁/共37頁表:放在一對相匹配的左右括號內的一個或多個元素的集合。元素間用空格分開。有標準表和引用表兩種類型。一、AutoLISP的數據類型§1.4AutoLISP語言概述表有標準表和引用表兩種類型;AutoLISP程序就是用標準表來表示的;引用表用作數據處理,相當于其它高級語言的數組,提供了保存各種數據的有效方法。

引用表中的每一個元素可以是數字、符號、字符串,也可以是表。表可以嵌套。如:(231.5Adfg”程序”(20.030.00.0))僅有兩個元素,并用“.”分開表稱為點對。點對常用于構造連接表。原子和表是AutoLISP最基本的數據,總稱為符號表達式(S-表達式)。表有標準表和引用表兩種類型;AutoLISP程序就是用標準表來表示的;引用表用作數據處理,相當于其它高級語言的數組,提供了保存各種數據的有效方法。

引用表中的每一個元素可以是數字、符號、字符串,也可以是表。表可以嵌套。如:(231.5Adfg”程序”(20.030.00.0))僅有兩個元素,并用“.”分開表稱為點對。點對常用于構造連接表。第12頁/共37頁文件描述符:打開文件時的返回值,相當于其它語言的文件號,用于數據的存取。選擇集:選擇集是一個或多個對象的集合。實體名(圖元名):是AutoCAD系統在繪圖過程中賦予所繪對象的一個數字標號。確切地說,它是指向一個AutoCAD系統內部數據文件的指針。利用圖元名,AutoLISP可以查找到圖形對象的數據庫記錄,并對其進行各種方式的處理。一、AutoLISP的數據類型§1.4AutoLISP語言概述第13頁/共37頁AutoLISP語言中的一切設計成份都是以函數的形式給出的。它沒有語句的概念或其它語法結構,執行程序就是執行函數,再調用函數。學習掌握AutoLISP語言,核心就是要掌握它的函數;學習AutoLISP函數要掌握的基本內容:(1)調用格式:即函數名、函數要求的參數個數和類型。(2)功能:即該函數的作用,它對其參數如何進行處理。(3)求值情況:即哪些參數被求值,哪些不被求值。(4)求值結果的返回值類型二、AutoLISP的函數§1.4AutoLISP語言概述這一點很重要,因為大多數函數的返回值都要被其它函數接受,而每個函數所需要參數都有特定的類型。因此只有搞清被調用函數的返回值的類型,才不會因用錯函數的參數而導致錯誤。第14頁/共37頁AutoLISP程序是由一系列按順序排列的標準表組成。每個標準表的第一個元素均為系統或用戶定義的函數,其后的各元素為該函數的參數。如:(setqx25.0)(setqy25.0)(+(*xy)x)AutoLISP的程序的書寫格式:

所有括號必須左右匹配;閱讀AutoLISP程序時,按從左到右的規則進行;

函數必須放在表中的第一個元素位置;

一個表可以占多行,一行也可以寫多個表;

AutoLISP用“;”作注釋;

AutoLISP是以擴展名為“.lsp”的ASCII碼文本文件的形式存儲。三、AutoLISP的程序

(setqx25.0)

(setqx25.0)(setqy25.0)(+xy)§1.4AutoLISP語言概述第15頁/共37頁

程序編輯:

AutoLISP程序是純文本文件,可以用任意一種ASCII碼文本編輯器(如記事本)來進行編輯。編輯后以擴展名為“.lsp”進行保存。使用VisualLISP編程環境:打開AutoCAD2000及以上版本,點擊“工具”菜單下AutoLISP(S)菜單項中的VisualLISP編輯器(V),進入VisualLISP編程環境

程序運行:將編輯好的程序,加載后,在AutoCAD的命令行Command下輸入函數名即可運行。四、編輯和運行AutoLISP的程序§1.4AutoLISP語言概述第16頁/共37頁§2.1AutoLISP的基本函數§2.2AutoLISP繪圖功能第2章AutoLISP基本函數和繪圖功能第17頁/共37頁§2.1AutoLISP基本函數一、數值函數(1)數值運算函數加:(+<數1><數2>…)減:(-<數1><數2>…)乘:(*<數1><數2>…)除:(/<數1><數2>…)

注意防止除數為零,如:(/25(/49))求最大數:(max<數1><數2>…)求最小數:(min<數1><數2>…)求平方根:(sqrt<數>)求冪次方:(expt<數>)求絕對值:(abs<數>)第18頁/共37頁§2.1AutoLISP基本函數一、數值函數(2)三角函數正弦函數:(sin<角度>)<角度>用弧度表示余弦函數:(cos<角度>)<角度>用弧度表示反正切函數:(atan<數1><數2>)

若沒有提供<數2>,atan返回<數1>的反正切值(單位為弧度)返回角度范圍為-π到π;若提供了<數2>,則返回<數1>/<數2>的反正切值(單位為弧度);若<數2>為0,則返回值的符號同<數1>;其值為1.570796(90°)。第19頁/共37頁§2.1AutoLISP基本函數一、數值函數(3)數的類型轉換函數取整函數:(fix<數>)

截去<數>的小數部分,將<數>轉換為整型數。實型化函數:(float<數>)

將<數>轉換為實型數。第20頁/共37頁§2.1AutoLISP基本函數二、符號與函數處理函數(1)賦值函數:(setq<符號1><表達式1>[<符號2><表達式2>]…)setq函數返回值是最后一個表達式的賦值結果。AutoLISP程序中作為參數的任何符號都必須先賦值。setq函數的求值結果很重要,常作為其它函數的參數。不使用系統內部函數作為變量查看變量的值,在AutoCAD的Command下可在變量前加”!”;在控制臺下直接輸入變量,回車。(2)禁止求值函數:(quote<表達式1>)也可簡寫成:’(<表達式1>)

禁止對表達式求值,返回<表達式>本身。第21頁/共37頁§2.1AutoLISP基本函數二、符號與函數處理函數(3)定義用戶函數的函數:(defun<函數名><參數表><表達式1><表達式2>

…<表達式n>)<函數名>就是用戶所定義的函數名,它必須是符號原子。<形參表>每個參數都是符號原子。由用“/”隔開的形參和局部變量組成。它可以是空表、只有形參、只有局部變量或形參和局部變量都有。<表達式>可以是一個或多個,在函數調用時對它們進行求值。利用defun可以為AutoCAD增加命令(defunC:XXX()….)第22頁/共37頁§2.1AutoLISP基本函數二、符號與函數處理函數(3)定義用戶函數的函數:defun函數的調用是對已定義的函數的調用,其調用格式為:(<函數名><實參表>)

<實參表>中實參的個數與位置,要與函數定義的<形參表>中形實參的個數與位置逐一對應。Defun函數的返回值是所定義函數的函數名。執行完defun定義的函數,局部變量將被釋放掉。全局變量可由任何函數訪問和修改,或在任一表達式中使用。局部變量僅在定義它的函數求值期間(函數調用期間)有意義。第23頁/共37頁§2.1AutoLISP基本函數三、表處理函數(1)提取表中數據的函數:(car<表>)

提取表中第一個元素。(cdr<表>)

提取表中除第一個元素以外的所有元素組成表:(nth<n><表>)

提取表中第n個元素,n=0,1,2,…(last<n><表>)

提取表中頂層的最后一個元素。AutoLISP接受car和cdr的任意組合,

如:(cadar<表>)等效于(car(cdr(car<表>)。第24頁/共37頁§2.1AutoLISP基本函數三、表處理函數(2)構造和修改表的函數:(list<表達式>)

構造表:將任意數目的表達式的求值結果串在一起,并返回它們組成的表。(append<表>...)

構造表:將所有<表>中的元素串聯在一起,構成一個新表。(cons<新的第一個元素><表>)

構造表:將<新的第一個元素>加入<表>,返回加入元素后的表;若<表>為原子,則構造一個點對表。(reverse<表>)

構造表:將<表>中的頂層元素倒排,構成一個新表。第25頁/共37頁§2.1AutoLISP基本函數三、表處理函數(3)提取并修改表中數據的函數:(assoc<關鍵字><連接表>)

連接表又稱A-表。它是以點對或子表為元素組成的表。每個點對和子表的第一個元素稱為關鍵字。函數assoc搜索<連接表>,以找到此表中的關鍵字,并提取包含關鍵字的子表,并返回該子表;若未找到關鍵字,則返回nil。(subst<新項><舊項><表>)

函數subst從<表>搜索<舊項>,將表中的每一個<舊項>用<新項>替換,并返回替換后的表;若未在<表>中找到<舊項>,則返回沒有更改的表第26頁/共37頁§2.1AutoLISP基本函數三、表處理函數(4)表循環處理函數:(foreach<符號原子><表><表達式>)

該函數循環地將<表>中每一個頂層元素賦給<符號原子>再對循環體中的每一個表達式求值,并返回最后一次循環時循環體中最后一個表達式的求值結果。

(mapcar<函數名><表1>…<表n>)

該函數依次循環地把<表1>、<表2>…

<表n>的元素賦給<函數名>所指函數的相應參數,并調用此函數進行求值,把每次循環的求值結果按求值順序構成一個表,作為mapcar函數的返回值。第27頁/共37頁§2.1AutoLISP基本函數四、字符串處理函數(1)數串互換函數:(itoa<整數>)

該函數將整數轉換成整數字符串,返回字符串。(atoi<數字串>)

該函數將數字字符串轉換成整數,返回整數。(atof<數字串>)

該函數將數字字符串轉換成實型數,返回實型數。

第28頁/共37頁§2.1AutoLISP基本函數四、字符串處理函數(1)數串互換函數:(rtos<數>[<模式>[<精度>]])

該函數該函數根據<模式>和<精度>,將<數>轉換成相應的字符串,其中<模式>和<精度>都為整數。

<模式>的值的意義:1科學計數格式2十進制格式3工程計數格式4建筑計數格式5任選的分數單位

<精度>:保留小數點后幾位第29頁/共37頁§2.1AutoLISP基本函數四、字符串處理函數(2)字符串處理函數:(strcat<字符串1><字符串2>…)

該函數將<字符串1><字符串2>…按順序頭尾相連組成一個新的字符串,并返回這個新字符串。(substr<字符串1><開始><長度>)

該函數從<字符串>中截取一個子字符串并返回,其中<開始>和<長度>變量都必須是正整數

。(strlen<字符串>…

該函數求<字符串>中字符的個數(含空格)并返回。

第30頁/共37頁§2.2AutoLISP的繪圖功能一、GET類輸入函數GET類(屏幕)輸入函數的通用格式:(getXXX[<提示>])

XXX:intrealstringpointdistangle…(getint[<提示>])從提示行輸入一整型數;(getreal[<提示>])從提示行輸入一實型數;(getstring[<提示>])從提示行輸入一字符串;(getpoint[<提示>])從提示行輸入一個點或在屏幕上用鼠標輸一個點(getdist[<提示>])從提示行輸入一個實型或整型值(距離值)或從屏幕上輸入兩點而決定距離。(getangle[<提示>])從提示行輸入一個角度值或基于從屏幕上選取的點決定角度值。第31頁/共37頁§2.2AutoLISP的繪圖功能二、Command函數(1)Command函數的格式(Command<參數>…...)<參數>格式取決于所執行的AutoCAD命令及其所需要的數據類型。即command函數中所調用的<參數>類型、個數、與順序均要和AutoCAD命令嚴格對應。

AutoCAD的命令、子命令和選擇項要用不含空格的字符串表示,大小寫均可。數字常量(整數或實型數)可寫成數本身也可寫成字符串形式點常量有兩種表示方法,一是用表的形式,如(10.025.0);二是用字符串中的數據表示如:”

10.0,25.0”。

command函數調用參數中的空串(“”),等效于在鍵盤上按一次空格鍵。

command函數調用的參數,如數字、點也可為表達式,但表達式求值結果的數據類型要和AutoCAD命令的要求一致。

command函數可以不帶任何參數,相當于在鍵盤上按一次Ctrl+C。

AutoLISP具有強大的繪圖編輯功能,主要是由于它提供了一個系統內部函數Command函數,利用Command函數可以非常方便地調用幾乎全部AutoCAD命令,以完成各種工程圖形的繪制功能。第32頁/共37頁§2.2AutoLISP的繪圖功能二、Command函數(2)Command函數的功能

Command函數

溫馨提示

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

評論

0/150

提交評論