第四章-CAD軟件的二次開發(fā)技術(shù)_第1頁
第四章-CAD軟件的二次開發(fā)技術(shù)_第2頁
第四章-CAD軟件的二次開發(fā)技術(shù)_第3頁
第四章-CAD軟件的二次開發(fā)技術(shù)_第4頁
第四章-CAD軟件的二次開發(fā)技術(shù)_第5頁
已閱讀5頁,還剩92頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Pro/Engineer、UGII、I-DeaS、MASTERCAM、Solodedge

等,都是商品化的通用平臺,基本上覆蓋了整個制造行業(yè).

專業(yè)針對性差,并且不能滿足各種各樣的具體產(chǎn)品的設(shè)計需要,在實際的工程設(shè)計中難以達到理想的效果,幾乎不能真正實現(xiàn)軟件的靈活高效的特點。

CAD軟件的二次開發(fā)問題就成為了CAD技術(shù)推廣應(yīng)用過程中所必須面對和解決的課題之一。第四章CAD軟件的二次開發(fā)14.1CAD軟件的二次開發(fā)概述二次開發(fā)的定義:就是把商品化、通用化的CAD系統(tǒng)用戶化、本地化的過程,即以優(yōu)秀的CAD系統(tǒng)為基礎(chǔ)平臺,研制開發(fā)符合國家標(biāo)準(zhǔn)、適合企業(yè)實際應(yīng)用的用戶化、專業(yè)化、集成化軟件。

AutoCAD軟件包是目前最為流行的工程繪圖軟件,該軟件包因其構(gòu)造、編輯圖形能力強、開發(fā)性好、支持微機平臺等優(yōu)點,在國內(nèi)得到廣泛的應(yīng)用。但AutoCAD軟件本身是一種非參數(shù)化環(huán)境的軟件,只能通過交互式繪圖命令及一些二次開發(fā)手段來進行設(shè)計制圖。24.1CAD軟件的二次開發(fā)概述

AutoCAD軟件其不足主要表現(xiàn)為:(1)圖形輸入工作量大、效率低。(2)若需生成系列圖紙,CAD人員只能通過大量修改,“人工”參數(shù)化繪圖。

AutoCAD強大的生命力不僅在于其完善的繪圖功能,良好的用戶界面,易學(xué)易用的操作特點而且還在于它開放的結(jié)構(gòu)體系,AutoCAD為用戶提供了多種二次開發(fā)工具。AutoCAD強大的圖形編輯功能和完全開放的結(jié)構(gòu)有利于對其進行再開發(fā),以滿足用戶的特殊要求。從而克服了軟件的不足和局限性,提高了設(shè)計效率和質(zhì)量。34.1CAD軟件的二次開發(fā)概述Visuallisp技術(shù)

Visuallisp是嵌入AutoCAD的解釋型過程語言,繼承了Lisp語言的語法傳統(tǒng)約定和基本函數(shù)與數(shù)據(jù)類型,并且擴展了圖形處理,幾乎能調(diào)用CAD的所有命令。具有比較強的開發(fā)能力,但是運行速度慢,不宜用于高強度的數(shù)據(jù)處理。AutoCAD的二次開發(fā)工具44.1CAD軟件的二次開發(fā)概述ARX(C++)技術(shù)

ARX(AutoCADRuntimeExtension)是以C++語言為基礎(chǔ)的、面向?qū)ο蟮拈_發(fā)環(huán)境應(yīng)用程序接口。

ARX程序本質(zhì)上為Windows

動態(tài)鏈接庫(DLL)程序,與AutoCAD共享地址空間,直接調(diào)用AutoCAD的核心函數(shù),可直接訪問AutoCAD數(shù)據(jù)庫的核心數(shù)據(jù)結(jié)構(gòu)和代碼。以便能夠在運行期間擴展AutoCAD固有命令特權(quán)的新命令。54.1CAD軟件的二次開發(fā)概述VBA技術(shù)

VBA(VisualBasicforApplication)最早是嵌入在Office中的一種編程語言,因為易學(xué)易用,功能強大,AutoDesk公司開始在AutoCAD版本中內(nèi)置VBA開發(fā)工具,同時提供了使用的對象模型和開發(fā)環(huán)境,到AutoCAD2000功能得到了加強。6解釋型語言用戶編寫的源程序代碼直接由解釋器解釋并執(zhí)行。平臺和操作系統(tǒng)獨立

AutoLisp程序可移植性好,程序可在多種平臺和操作系統(tǒng)上運行。版本獨立

AutoLisp語言向后兼容,為任意版本AutoCAD編寫的AutoLisp程序可以在以后版本的AutoCAD中運行。4.2AutoLisp語言的特性74.2AutoLisp語言的特性AutoLisp與主流編程語言的比較:AutoLisp與其他語言最大的區(qū)別是用表存放數(shù)據(jù),沒有數(shù)組、聯(lián)合、結(jié)構(gòu)等。變量沒有明確的類型,變量類型在賦值時動態(tài)確定,不用事先定義變量類型。沒有語句、關(guān)鍵詞以及運算符。它是函數(shù)定位的語言,所有運算都有函數(shù)調(diào)用完成。8Autolisp

有如下優(yōu)點:(1)Lisp是所用編程語言中最容易學(xué)習(xí)和掌握的。(2)Autolisp提供的大多數(shù)函數(shù)都是直接針對AutoCAD的操作,可用它編寫訪問AutoCAD的數(shù)據(jù)庫的操作。(3)解釋執(zhí)行,立竿見影可以在AutoCAD的提示符:command:下逐條輸入Autolisp

語句,立即得到結(jié)果。4.2AutoLisp語言的特性(4)Autolisp

可在功能強大的開發(fā)工具Visuallisp上開發(fā)運行94.2AutoLisp語言的特性

AutoLISP是開發(fā)AutoCAD的最主要的工具。用戶可以利用AutoLISP語言實現(xiàn)對AutoCAD當(dāng)前圖形數(shù)據(jù)庫的直接訪問和修改,增加AutoCAD新命令和開發(fā)參數(shù)化繪圖程序等。

10

(1)符號符號用于存儲數(shù)據(jù),“符號”與“變量”含義相當(dāng),可互相交換使用。符號:除了一些特殊字符(如(、)、.

、‘、“、;)以外的任何可打印字符;符號的大小寫是等效的。不允許使用數(shù)字作為符號名的第一位。合法符號:abc、$AD、a3;非法的符號:(a)、3d、a.b、A;等4.3.1AutoLISP的數(shù)據(jù)類型4.3AutoLisp語言常用函數(shù)11

4.3.1AutoLISP的數(shù)據(jù)類型

(2)字符串字符串是由雙引號引起來的字符序列組成。字符串中同一字母的大小寫被認(rèn)為是不同的字符,空格也是一個有意義的字符。例如:

〝ABC〝≠〝abc〝〝abc〝≠〝abc〝在字符串中用〝\〝可以添加控制字符。例如:

\r:表示回車;\n:表示換行;

\〝:表示〝;\e:表示ESC鍵12

4.3.1AutoLISP的數(shù)據(jù)類型

(3)表它是指放在一對左、右圓括號中的元素的有序集合。表中的項稱為表的元素。元素可以是:整型數(shù)、實型數(shù)、字符串、符號、表、函數(shù)名;例1:(21304560)為一個表,包含4個元素。例2:(setqa63)為一個表,表中包含3個元素。134.3.1AutoLISP的數(shù)據(jù)類型在AutoLISP語言中,用表來表示圖形中點的坐標(biāo)。例如:(56.430.04.0)表示三維點的坐標(biāo);第一、二、三個元素分別對應(yīng)點的X、Y、Z坐標(biāo)值。(setqa63)表中三個元素:

setq--為函數(shù)名;a--變量;表示:a=63(setqb(+a108))表示:b=a+108144.3.1AutoLISP的數(shù)據(jù)類型

表有兩種基本類型:標(biāo)準(zhǔn)表和引用表;標(biāo)準(zhǔn)表:表中第一個元素必須是一個合法的已存在的Autolisp函數(shù),AutoCAD將按照此函數(shù)的功能完成其操作;例如:(setqb(+a108))引用表:在表前加一單引號(ˊ),表示不對此表作求值處理。例如:(setq

po

ˊ(1005896))表示:Po=(10015896)154.3.1AutoLISP的數(shù)據(jù)類型

(4)文件描述符文件描述符是一個指針,指向用AutoLISP語言的OPEN函數(shù)打開了的某個文件。該指針返回為一個數(shù)字標(biāo)號;在訪問該文件時,根據(jù)該文件描述符對指定文件進行操作。例如:(setq

fp(open“myfile.dat”“w”))

(print“1563”fp)第一句:以寫的方式打開數(shù)據(jù)文件myfile.dat,并把文件的指針賦予文件描述符fp;第二句:將字符串“1563”輸出到fp指向的數(shù)據(jù)文件。164.3.1AutoLISP的數(shù)據(jù)類型(5)實體名實體名是AutoCAD系統(tǒng)在繪圖過程中賦予所繪實體的一個數(shù)字符號。利用實體名,AutoLISP函數(shù)可以查找到實體的數(shù)據(jù)庫記錄,并對實體進行各種處理。例如:(setqelast(entlast))把最后繪制的實體用變量elast表示。(6)選擇集選擇集是多個實體的集合。在AutoLISP程序中可以構(gòu)造一個選擇集,并把它賦予一個變量(或符號)供其它函數(shù)調(diào)用。171.AutoLISP語言表達式與高級語言的區(qū)別高級語言采用“中綴表示法”:運算符、賦值符位于中間。如:表達式x=(a+b)·c→x=(a+b)*cAutoLISP語言采用“前綴表示法”:運算符、賦值符位于前面。如:表達式x=(a+b)·c→(setqx(*(+ab)c))式中:

setq

→=4.3.2AutoLISP語言的程序結(jié)構(gòu)184.3.2AutoLISP語言的程序結(jié)構(gòu)2.AutoLISP語言的程序結(jié)構(gòu)與高級語言的程序結(jié)構(gòu)的區(qū)別:高級語言的程序由一系列的語句組成。AutoLISP語言的程序由一系列的表組成。表的格式為:(function1(function2(function3參數(shù)1參數(shù)2…)…)表中第一個元素是函數(shù),其余元素是該函數(shù)所需要的參數(shù),每個參數(shù)又可以是另一個表,即表可以嵌套。表的運算過程:先內(nèi)后外194.3.2AutoLISP語言的程序結(jié)構(gòu)例如:

(defun

init_global_date()(setvar"cmdecho"0)(setq

dssf(getvar"osmode"))(setvar"osmode"0)(setqp1(/pi2))(setqp2(

*

(/pi2)3))(setqp3(/pi4))(setq

a0(*pi(/20.0180.0)))(setq

list_n"1")(setq

init_point(list100100))

)20(1)加函數(shù)

(+<number1><number2>…)該函數(shù)返回<number1>+<number2>+…+相加的和(2)減函數(shù)

(-<number1><number2>…)該函數(shù)返回<number1>-<number2>-…-的差。(3)乘函數(shù)(*<number1><number2>…)該函數(shù)返回<number1>·<number2>·…·相乘的積。4.3.3AutoLISP的數(shù)值計算函數(shù)214.3.3AutoLISP的數(shù)值計算函數(shù)(4)除函數(shù)(/<number1><number2>…)該函數(shù)返回<number1>÷<number2>÷…÷的商。(5)乘方函數(shù)(expt<base><power>)該函數(shù)返回數(shù)<base>為底的<power>次冪的值(6)平方根函數(shù)(sqrt<number>)該函數(shù)返回數(shù)<number>的實型平方根。224.3.3AutoLISP的數(shù)值計算函數(shù)(7)正弦函數(shù)(sin<angle>)該函數(shù)返回角度<angle>的正弦值,其中<angle>的單位為弧度。(8)余弦函數(shù)(cos<angle>)該函數(shù)返回角度<angle>的余弦值,其中<angle>的單位為弧度。(9)求整函數(shù)(fix<number>)該函數(shù)返回小于或等于<number>的最大整數(shù)。23(1)等于函數(shù)(=原子1原子2原子3…)原子:數(shù)或字符串;所有原子都相等,函數(shù)返回T,否則返回NIL;例如:(if(=xyz)(fx1))(2)不等于函數(shù)(/=原子1原子2…)所有原子都不相等,函數(shù)返回T,否則返回NIL;例如:(if(/=xyz)(fx2))4.3.4邏輯運算函數(shù)244.3.4邏輯運算函數(shù)(3)小于函數(shù)

(<原子1原子2原子3…)如果原子1<原子2<原子3…,函數(shù)返回T,否則返回NIL;例如:(if(<dcl_id0)(exit))(4)大于函數(shù)(>原子1原子2原子3…)如果原子1>原子2>原子3…,函數(shù)返回T,否則返回NIL;254.3.4邏輯運算函數(shù)(5)表達式相等測試函數(shù)

(eq

式1式2)若表達式1與表達式2完全相同,函數(shù)返回T,否則返回NIL;(6)表達式值相等測試函數(shù)

(equal式1式2)若表達式1的函數(shù)值與表達式2的函數(shù)值完全相同,函數(shù)返回T,否則返回NIL;如:a=3b=6c=16;d=3e=6f=16(setqs1(+(abc)))

(setqs2(+(def)))(eqs1s2)(equals1s2)→

返回NIL→返回T.264.3.5表處理函數(shù)

(1)取表中第一個元素

(car<表>)該函數(shù)返回<表>中的第一個元素。(2)取子表(cdr<表>)該函數(shù)返回<表>中去掉第一個頂層元素后剩下的元素組成的表。(3)取表中第n個函數(shù)(nth<n><表>)該函數(shù)返回<表>中第n個元素。

n為元素序號,從0開始計數(shù)。例如:(nth0‘(abcdef))→a

(nth3‘(abcdef))→d274.3.5表處理函數(shù)

(4)構(gòu)建表函數(shù)(list<expr1><expr2><expr3>…)該函數(shù)返回所有表達式<expr1><expr2><expr3>…的值構(gòu)成的表。例如:(setqx58y62)

(listxy)

(list(+x100)(+y100)157)

(5862)→(158162157)

284.3.5表處理函數(shù)(5)取表中最后一個元素

(last<表>)該函數(shù)返回<表>中的最后一個元素。(6)測表長度函數(shù)(length<表>)該函數(shù)返回<表>的長度,即表中元素的個數(shù)。例:(length‘(abc))→3(length‘(a(bc)))→229執(zhí)行GET族輸入函數(shù)時,計算機將暫停下來,等待接受來自鍵盤、數(shù)字化儀或鼠標(biāo)器的輸入。

(1)整型數(shù)輸入函數(shù)(GETINT[提示])執(zhí)行該函數(shù)時,將等待用戶輸入一個整型數(shù),并返回該整型數(shù)。例如:(setqz(getint“請輸入齒數(shù)Z=”))

屏幕顯示:請輸入齒數(shù)Z=20↙4.3.6GET族輸入函數(shù)304.3.6GET族輸入函數(shù)

(2)實型數(shù)輸入函數(shù)(GETREAL[提示])執(zhí)行該函數(shù)時,將等待用戶輸入一個實數(shù),并返回該數(shù)對應(yīng)的實型數(shù)。例如:(setqM(GETREAL“請輸入模數(shù)M=”))屏幕顯示:請輸入模數(shù)M=2.5↙314.3.6GET族輸入函數(shù)

(3)點輸入函數(shù)(GETPOINT[基點][提示])執(zhí)行該函數(shù)時,將等待用戶輸入一個點。輸入方法:鍵盤或用光標(biāo)在屏幕上拾取一點。1)(GETPOINT[提示])例如:(setqP1(GETPOINT“請輸入P1點坐標(biāo)

=”))屏幕顯示:請輸入P1點坐標(biāo)

=100,100↙

或在屏幕上拾取一點,賦值給P1324.3.6GET族輸入函數(shù)2)(GETPOINT基點[提示])例如:(setqP2(GETPOINTP1“請輸入第二點坐標(biāo)P2=”))

屏幕顯示:請輸入第二點坐標(biāo)P2=50,50↙

或在屏幕上拾取一點,賦值給P2;此時,在屏幕從基點P1點向P2點(或光標(biāo)處)出現(xiàn)一條可拖動的直線。334.3.6GET族輸入函數(shù)(4)角度輸入函數(shù)(GETANGLE[基點][提示])執(zhí)行該函數(shù)時,將等待用戶輸入一個角度值,并返回以弧度表示的該角度值。角度的確定原則:以ANGBASE變量的當(dāng)前角度值為零度基準(zhǔn)線,按輸入角度逆時針方向測量。344.3.6GET族輸入函數(shù)

1)(GETANGLE[提示])

①等待用戶輸入一個角度并將該角度以弧度返回,角度按逆時針方向測量繪制。45°

例如:設(shè)ANGBASE變量的當(dāng)前角度值為零度。(setqA(GETANGLE“請輸入角度A=”))屏幕顯示:請輸入角度A=45↙

,賦值給A354.3.6GET族輸入函數(shù)②等待用戶在屏幕上指定兩點的方式輸入一個角度例如:設(shè)ANGBASE變量的當(dāng)前角度值為零度。(setqA(GETANGLE“請輸入角度A=”))屏幕顯示:請輸入角度A=P1,P2↙A°P1P2364.3.6GET族輸入函數(shù)2)(GETANGLE基點<提示>)

等待用戶在屏幕上指定第二點的方式輸入一個角度例如:(setqANGBASE90)

(setqP2(GETPOINTP1“請輸入第二點坐標(biāo)P2=”))α

P1P2屏幕顯示:請輸入第二點坐標(biāo)P2=50,50↙

或在屏幕上拾取一點,同上獲取一個角度。374.3.6GET族輸入函數(shù)

(5)字符串輸入函數(shù)(GETSTRING[T][提示])執(zhí)行該函數(shù)時,將等待用戶輸入一個字符串,并返回該字符串1)(GETSTRINGT[提示])

T表示:輸入的字符串中可以有空格,用回車鍵終止字符串的輸入。2)(GETSTRING[提示])

表示:輸入字符串時,用空格鍵或回車鍵終止字符串的輸入。384.3.6GET族輸入函數(shù)例如:要求輸入?yún)?shù):“Thisisabook”,并賦值給變量S1。①(setqs1(GETSTRINGT“請輸入?yún)?shù):”))屏幕顯示:請輸入?yún)?shù):Thisisabook↙→S1=“Thisisabook”②(setqs1(GETSTRING“請輸入?yún)?shù):”))屏幕顯示:請輸入?yún)?shù):This□→S1=“This”394.3.6GET族輸入函數(shù)(6)距離輸入函數(shù)

(GETDIST[基點][提示])執(zhí)行該函數(shù)時,將等待用戶輸入一個距離值。輸入方法有兩種:①等待用戶輸入一個距離值例:(setqL1(GETDIST“請輸入L1的長度=”))屏幕顯示:請輸入L1的長度=153↙

1)(GETDIST[提示])404.3.6GET族輸入函數(shù)

②等待用戶在屏幕上指定兩點的方式輸入一個距離值例如:(setqL1(GETDIST“請輸入L1的長度=”))屏幕顯示:請輸入L1的長度=用戶在屏幕上用光指定兩點P1,P2,返回兩點間的距離414.3.6GET族輸入函數(shù)2)(GETDIST基點[提示])

已知第一點坐標(biāo),輸入第二點坐標(biāo),求兩點間的距離例如:(setqL1(GETDISTP1“請輸入第二點坐標(biāo)P2=”))

屏幕顯示:請輸入第二點坐標(biāo)P2=83,92↙計算機將返回P1,P2兩點間的距離,并賦值給L1424.3.6GET族輸入函數(shù)位值的作用:控制允許輸入的方式,取值范圍1~127;位置含義1不允許空輸入2不接受零值4不接受負(fù)值8不檢查屏幕限定范圍16未使用32用虛線畫拖動線和矩形框64忽視三維點的z坐標(biāo)(7)輸入控制函數(shù)

(INITGET[位值][關(guān)鍵字列表])表中的位值可以組合相加得到一個值,該值可同時起幾種控制作用。

該函數(shù)為其后使用的GET族函數(shù)建立各種控制選項。434.3.6GET族輸入函數(shù)關(guān)鍵字列表的作用:定義一個關(guān)鍵字表,用于對其后GET族函數(shù)的輸入值進行檢查,判斷用戶的輸入是否與表中規(guī)定的輸入類型相符。若不相符,AUTOCAD將要求用戶重新輸入關(guān)鍵字列表的兩種形式:1)“關(guān)鍵字1關(guān)鍵字2關(guān)鍵字3…,大寫的縮寫字母1大寫的縮寫字母2大寫的縮寫字母3…”

輸入時只輸入相應(yīng)得大寫的縮寫字母。444.3.6GET族輸入函數(shù)例如:

(initget7“RadiusDiameter

,RD”)(setqW(GETSTRING“\n請選擇:直徑(D)/半徑(R)"))(If(=W“Diameter”)(SETQD(GETREAL“請輸入直徑”

))(SETQR(GETREAL“請輸入半徑”

))

)454.3.6GET族輸入函數(shù)2)列表:“關(guān)鍵字1關(guān)鍵字2…”關(guān)鍵字中保留的字母用大寫,其余的用小寫。例1:(initget7“LtypeColor”)(setqW(GETSTRING“\n請輸入:線形(L)/顏色(C)"))46(defun

gety()(initget1“PiTwo-pi,PT”)(setqx(getreal“Pi/Two-pi/<number>:”))

(cond((eqx“Pi”)(setqypi))((eqx“Two-pi”)(setqy(*pi2)))(setqyx))(printy))例2:若x=“Pi”,則y=3.14159

若x=“Two-pi”,則y=6.28318

其余y=x474.3.6GET族輸入函數(shù)(8)關(guān)鍵字輸入函數(shù)

(getkword[提示])

該函數(shù)要求用戶輸入一個關(guān)鍵字。在調(diào)用本函數(shù)之前需先用INITGET函數(shù)設(shè)置一個關(guān)鍵字表。例1:(initget1“YesNo”)(setqW(getkword“Areyousure?(Yes/No)”)輸入Y

或N484.3.6GET族輸入函數(shù)例2:

(initget7"68101215161820")(setqM(getkword“\n請選擇螺栓直徑M”))494.3.7計算函數(shù)1求方位角函數(shù)

(angle點1點2)該函數(shù)返回兩點連線的方位角。從當(dāng)前作圖平面的X軸正向開始,按逆時針方向計算該角度。例如:(angle‘(1.01.0)‘(1.04.0))→1.5707→3.141593(angle‘(5.01.33)‘(2.41.33))504.3.7計算函數(shù)2求兩點間距離函數(shù)

(distance點1點2)該函數(shù)返回兩個三維點之間的距離

(distance‘(1.02.53.0)‘(7.02.53.0))

→6.000000514.3.7計算函數(shù)3已知一點求另一點坐標(biāo)的函數(shù)(polar已知點方位角度距離)該函數(shù)可以根據(jù)一個已知點求出另一個點。角度是另一點所在方位角;例如:若P1=(26150562),求距P1點L,方位角30°的點坐標(biāo);(SETQP2(polarP130L))524.3.7計算函數(shù)求交點函數(shù)

(inters點1點2點3點4[方式])該函數(shù)返回兩條線的交點。點1與點2:為第一條線的兩個端點;點3與點4:

為第二條線的兩個端點;

相交方式:若方式為“NIL”,則交點可以在兩條線段的延長線上;若無方式,則交點只在兩條線段內(nèi);534.3.8字符串處理函數(shù)字符串長度函數(shù)(strlen

字符串1字符串2…)該函數(shù)返回字符串<string>的長度,即字符串中所含字符的個數(shù)。例如:(strlen“about”)→5;(strlen“a”“b”“t”)→3

544.3.8字符串處理函數(shù)(2)字符串連接函數(shù)(strcat

字符串1字符串2…)該函數(shù)返回由字符串<字符串1><字符串2>…構(gòu)成的長字符串。例如:(strcat“M”“50”)(strcat“%%C”“50”)→“M50”(strcat“R”“50”)→“R50”→“φ50”554.3.8字符串處理函數(shù)(3)求子字符串函數(shù):(substr<字符串><起點n>[長度m])該函數(shù)返回從字符串第<n>字符位置開始,連續(xù)讀取<m>個字符組成一個新字符串。例如:(substr“abcdefg”43)→“def”→“bcdefg”(substr“abcdefg”2)564.3.8字符串處理函數(shù)(4)整型數(shù)轉(zhuǎn)換為數(shù)字型字符串函數(shù)

(itoa

整型數(shù))該函數(shù)將整型數(shù)轉(zhuǎn)換為一個<數(shù)字型字符串>

例如:(itoa65)→“65”→R65(strcat“R”

(itoa65))574.3.8字符串處理函數(shù)(5)數(shù)字型字符串轉(zhuǎn)換為整型數(shù)函數(shù)

(atoi<數(shù)字型字符串>)該函數(shù)將<數(shù)字型字符串>轉(zhuǎn)換為一個整型數(shù)。例如:(atoi“5785”)→5785(atoi“5785.863”)→5785584.3.8字符串處理函數(shù)(6)數(shù)字型字符串轉(zhuǎn)換為實型數(shù)(atof<數(shù)字型字符串>)

該函數(shù)將<數(shù)字型字符串>轉(zhuǎn)換為一個實型數(shù)。例如:

(atof“5785.863”)→5785.863

(atof“5785”)→5785.0594.3.8字符串處理函數(shù)(7)整型變實型函數(shù)

(float整型數(shù))該函數(shù)將“整型數(shù)”轉(zhuǎn)換為一個實型數(shù)。例如:(float6)→6.0(8)實型變整型函數(shù)

(fix實型數(shù))該函數(shù)將“實型數(shù)”轉(zhuǎn)換為一個整型數(shù)。例如:(fix5.6)→5604.3.8字符串處理函數(shù)(9)角度單位制轉(zhuǎn)換函數(shù)(angtos

角方式精度)

該函數(shù)將“角”(單位為弧度)轉(zhuǎn)換為其他單位制,并以字符串的方式返回角度。方式:0→轉(zhuǎn)換為度;1→轉(zhuǎn)換為度/分/秒

2→轉(zhuǎn)換為梯度;3→轉(zhuǎn)換為弧度;精度:小數(shù)的位數(shù);例如:(angtos0.392802)

(angtos0.392811)→22.50°→22°30′0″614.3.8字符串處理函數(shù)(10)實型數(shù)計數(shù)制轉(zhuǎn)換函數(shù)

(rtos

實數(shù)方式精度)該函數(shù)對“實數(shù)”按要求的“方式”和給定的“精度”進行計數(shù)制的轉(zhuǎn)換,并以字符串的方式返回。方式:1→科學(xué)計數(shù)法;2→十進制;

3→工程制(英寸與小數(shù)英寸);

4→建筑制(英寸與分?jǐn)?shù)英寸);624.3.8字符串處理函數(shù)例如:(rtos18.5013)(rtos18.500000022)(strcat“%%C”(rtos18.500000022)

)→“φ18.50”→“1.850E+01”→“18.50”634.3.9條件分支函數(shù)

(1)條件函數(shù)

(if<條件><表達式1>[表達式2])

該函數(shù)根據(jù)“條件”的真或假來執(zhí)行后面的表達式。若測試條件為真(T),則執(zhí)行“表達式1”,否則,就執(zhí)行“表達式2”。(setqx(getreal“請輸入x=”))

(if(>=x0)(setqfx(+x5))(setqfx(-x6)))

(printfx)例如:f(x)=x-6x<0x+5x≥0644.3.9條件分支函數(shù)(2)分支函數(shù)

(cond

(<條件1><式1式2…>)(<條件2><式1式2…>)

……

(<條件N><式1式2…>)

)

該函數(shù)將依次檢查每一個<條件>的值,若查到某個<條件>的值為真(T),則執(zhí)行與該<條件>相關(guān)的那些表達式。此時函數(shù)不再對剩余的其它分支進行測試。654.3.9條件分支函數(shù)例如:f(x)=x+2

x>0x2+3x+5x<09

x=0(setqx(getreal“請輸入x=”))

(cond((>x0)(setqfx(+x2))((<x0)(setqfx(+(exptx2)(*x3)5))((=x0)(setqfx9)))(prompt“f(x)=”)(printfx)664.3.10循環(huán)函數(shù)

(1)重復(fù)函數(shù)

(repeat<次數(shù)><表達式1><表達式2><表達式3>…)

該函數(shù)安照給定的“次數(shù)”,重復(fù)執(zhí)行后面的所有表達式,并返回最后一次循環(huán)的最后一個表達式的值。例如:求

(defunsum(/ns)

(setqn1s0)

(reapt100(setqs(+sn))(setqn(1+n))))674.3.10循環(huán)函數(shù)

(2)循環(huán)函數(shù)

(while<條件><表達式1><表達式2><表達式3>…)

該函數(shù)先對測試<條件>求值,若為真(T),則執(zhí)行后面所有的表達式,然后再次對測試<條件>求值。重復(fù)上述過程,一直循環(huán)到測試<條件>的值為nil為止。While返回最后一次循環(huán)時的最后一個表達式的值。684.3.10循環(huán)函數(shù)例如:求

(defunsum(/ns)

(setqn1s0)

(WHILE(<=N100)(setqs(+sn))(setqn(1+n)))

(PRINTS)

)694.3.10循環(huán)函數(shù)(3)求多個表達式值的函數(shù)

(prong<表達式1><表達式2><表達式3>…)該函數(shù)是用于只能有一個表達式的地方。如:(if<條件><表達式1>[表達式2])

其中,式1和式2只能有一個表達式。704.3.10循環(huán)函數(shù)(If(>D50)(PRONG(SETQA20)(SETQB30)(SETQC(+AB))

(PRINTC))(PRONG(SETQA35)(SETQB42)(SETQC(+(*A2)B)

(PRINTC)))例如:若D>50:

A=20,B=30,C=A+B;若D<50:A=35,B=42,C=2A+B;71

AutoLISP提供的特殊函數(shù)Defun

→用來定義用戶函數(shù),它的調(diào)用格式為:4.4.1自定義函數(shù)4.4

AUTOCAD命令的定義與調(diào)用方法(defun

函數(shù)名變量表表達式1

表達式2….)724.4.1自定義函數(shù)

(3)表達式部分:是用戶所定義的函數(shù)的內(nèi)容,用于完成所需的功能。(1)函數(shù)名:用戶自定義的函數(shù)名,可被其它程序或函數(shù)調(diào)用。(2)變量表:是函數(shù)的參數(shù)表,一般格式為:(<形參1><形參2>…./<局部變量1><局部變量2>….)形參:在函數(shù)調(diào)用時必須用實參代替;局部變量:僅用于函數(shù)內(nèi)部,不參與函數(shù)傳遞。734.4.1自定義函數(shù)(defunsum(n/s)

(setqi1s0)

(WHILE(<=in)(setqs(+si))(setqi(1+i))))

調(diào)用格式:(sum90)例如:求74

AutoLISP提供了一個在AutoLISP程序中調(diào)用AutoCAD標(biāo)準(zhǔn)命令的Command函數(shù)。該函數(shù)的調(diào)用格式為:

(Command<AutoCAD標(biāo)準(zhǔn)命令><參數(shù)1><參數(shù)2><參數(shù)3>……)4.4.2調(diào)用AutoCAD標(biāo)準(zhǔn)命令的函數(shù)754.4.2調(diào)用AutoCAD標(biāo)準(zhǔn)命令的函數(shù)

(command“circle”‘(2016)5)例1:

從點(5,4)到點(20,15)畫一條直線。(command“l(fā)ine”“5,4”“20,15”“”)或(command“l(fā)ine”‘(54)‘(2015)“”)例2:過中心(20,16)畫半徑為5的圓。76格式:

(defunC:命令名(/<局部變量1><局部變量2>……)表達式……)用該方法定義的命令,在AutoCAD環(huán)境下可以利用Load命令被加載到內(nèi)存中,可以向AutoCAD的命令一樣使用。調(diào)用格式:

命令名4.4.3定義AutoCAD命令的函數(shù)774.4.3定義AutoCAD命令的函數(shù)例如:已知一點坐標(biāo)與邊長。定義畫一個正方形的命令。(defun

C:square(/pt1pt2pt3pt4)(setqpt1(getpoit“輸入左下角坐標(biāo):”))(setq

len(getdist“輸入邊長:”))(setqpt2(polarpt10.0len))(setqpt3(polarpt2(/pi2)len))(setqpt4(polarpt3pilen))(initget1)

(Initget7)784.4.3定義AutoCAD命令的函數(shù)(command“PLINE”pt1pt2pt3pt4“c”))調(diào)用格式:

command:square794.5應(yīng)用AutoLisp語言進行數(shù)據(jù)文件操作及實體訪問4.5.1文件操作函數(shù)804.4.1文件操作函數(shù)

(1)打開文件函數(shù)

(open<文件名><讀/寫標(biāo)志>)

該函數(shù)打開或建立一個文件,函數(shù)返回文件描述符。注意:文件名中要包含文件的路徑,并用“/”或“\\”代替“\”。文件名:字符;讀寫標(biāo)志:讀文件“r”、寫文件“w”814.4.1文件操作函數(shù)例1:文件filename.dat存放在D:\TEMP\CAD\中,以讀的方式打開文件:(setq

fp

(open“D:/TEMP/CAD/filename.dat”“r”))或:(setq

fp

(open“D:\\TEMP\\CAD\\filename.dat”“r”))824.4.1文件操作函數(shù)例2:在D:\TEMP\CAD\中建立文件filename.dat,以讀的方式打開文件:(2)關(guān)閉文件(close<文件描述符>)

該函數(shù)關(guān)閉由<文件描述符>所指定的文件,并返回nil

例如:(closefp)(setq

fp

(open“D:/TEMP/CAD/filename.dat”“w”))834.4.1文件操作函數(shù)(3)讀行函數(shù)(read-line[文件描述符])①(read-line文件描述符)該函數(shù)從<文件描述符>表示的文件中的當(dāng)前指針位置處讀入一行數(shù)據(jù),并返回由這些數(shù)據(jù)構(gòu)成的字符串,然后把文件指針移到下一行的首部。844.4.1文件操作函數(shù)例如:文件內(nèi)容(506070)

30.54565.6②(read-line)

該函數(shù)等待用戶從鍵盤輸入一行數(shù)據(jù);(read-linef)→(read-linef)→“(506070)”“30.54565.6”854.4.1

溫馨提示

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

評論

0/150

提交評論