用Autolisp 在AutoCAD中實(shí)現(xiàn)多種曲線的繪制_第1頁(yè)
用Autolisp 在AutoCAD中實(shí)現(xiàn)多種曲線的繪制_第2頁(yè)
用Autolisp 在AutoCAD中實(shí)現(xiàn)多種曲線的繪制_第3頁(yè)
用Autolisp 在AutoCAD中實(shí)現(xiàn)多種曲線的繪制_第4頁(yè)
用Autolisp 在AutoCAD中實(shí)現(xiàn)多種曲線的繪制_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

1、用Autolisp 在AutoCAD中實(shí)現(xiàn)多種曲線的繪制一、 引言:AutoCAD自1982年由Autodesk公司推出以來(lái),經(jīng)歷了20年的發(fā)展更新,目前,已深入到包括機(jī)械、建筑、服裝、航天航空、地質(zhì)氣象等等的眾多領(lǐng)域中。AutoCAD已成為眾多工程設(shè)計(jì)人員的首選設(shè)計(jì)軟件,其格式也逐漸成為各CAD系統(tǒng)間的交換標(biāo)準(zhǔn)。AutoCAD之所以有如此廣泛的應(yīng)用,除了其功能強(qiáng)大、易學(xué)易用外,還在于它是一個(gè)開放的交互軟件,自85年推出的2.17版中,AutoCAD就內(nèi)嵌了Autolisp語(yǔ)言,方便用戶對(duì)其進(jìn)行二次開發(fā)。自此,便有無(wú)數(shù)的工程技術(shù)人員成為Autodesk公司的編外程序員。隨著AutoCAD版本的

2、不斷升級(jí),它所支持的開發(fā)環(huán)境也不斷增加,如:ADS、ARX、Diesel、DCL、 VBA等等。但由于方便和易學(xué)易用,Autolisp始終是技術(shù)人員在開發(fā)AutoCAD時(shí)運(yùn)用最多的編程語(yǔ)言。同時(shí)也有更多的工程技術(shù)人員投入到Autolisp的學(xué)習(xí)之中來(lái)。但是,畢竟Autolisp也是一種編程語(yǔ)言,學(xué)習(xí)起來(lái)遠(yuǎn)不如學(xué)習(xí)AutoCAD的操作來(lái)得簡(jiǎn)單。故也有部分技術(shù)人員在學(xué)習(xí)過(guò)程中有危難情緒,針對(duì)這一情況,本人在此通過(guò)一種方法、三個(gè)例子來(lái)闡述Autolisp編程的一般過(guò)程,希望能對(duì)Autolisp初學(xué)者有所幫助。二、 Autolisp的二次開發(fā):(一) 問(wèn)題提出:盡管AutoCAD在各個(gè)領(lǐng)域中有著廣泛的

3、應(yīng)用,但總不會(huì)面面俱到,在機(jī)械行業(yè)中,經(jīng)常要畫一些復(fù)雜曲線,如:三角函數(shù)曲線、漸開線、螺旋線等等。這些曲線在AutoCAD中沒有專門的命令,難以用一般的方法繪制,盡管機(jī)械制圖國(guó)家標(biāo)準(zhǔn)中有用圓弧近似替代漸開線和螺旋線的畫法,但它們一不準(zhǔn)確,不能通過(guò)裝配干涉,二不方便,需要取很多位置點(diǎn)才能畫出。而用Autolisp編程繪制,卻能快速準(zhǔn)確的得到所需圖形。(二) 曲線繪制:1、 獲取曲線的數(shù)學(xué)模型:正弦曲線: x = ay = sin a 漸開線: x = br * (cos a + a sin a)y = br * (sin a + a cos a) 圓柱螺旋線: x = r cos ay = r

4、sin az = s * a / (2) (s取正值為右旋、取負(fù)值為左旋)2、 設(shè)計(jì)程序框圖:結(jié)束從點(diǎn)表中逐個(gè)取出點(diǎn)的坐標(biāo),畫出曲線圖。獲取所需參數(shù)計(jì)算x、y、z得到各點(diǎn)的坐標(biāo),并將點(diǎn)坐標(biāo)置入點(diǎn)表中。獲取畫圖基準(zhǔn)點(diǎn)開始3、 程序代碼如下:;畫正弦曲:x=a , y=sin a ;(defun c:zxqx(/ da bp Ai lpt bp1 bp2) (initget 1) (setq bp (getpoint "n 起始點(diǎn)?:") (initget 7) (setq da (getangle "n 角度增量?:") (setq Ai 0 Ae (*

5、pi 2.0) bp1 (car bp) bp2 (car (cdr bp) (while (< Ai Ae) (setq lpt (append lpt (list (list (+ bp1 Ai) (+ bp2 (sin Ai) (setq Ai (+ Ai da) ) (setq lpt (append lpt (list (list (+ bp1 Ae) (+ bp2 (sin Ae) (setvar "cmdecho" 0) (command "pline") (foreach pt lpt (command pt) (command c

6、) (command "pedit" "l" "f") (command c) (setvar "cmdecho" 1) );漸開線畫法x=br*(cos(a)+a*sin(a) y=br*(sin(a)-a*cos(a);(defun c:jkx(/ ti lpt ae pt bp1 bp2) (initget 1) (setq bp (getpoint "n 起始點(diǎn)?:") (initget 7) (setq br (getreal "n 基圓半徑?:") (initge

7、t 5) (setq ai (getangle "n 起始角度?:") (initget 7) (setq ae (getangle "n 終止角度?:") (initget 7) (setq da (getangle "n 角度增量?:") (setq bp1 (car bp) bp2 (car (cdr bp) (while (< ai ae) (setq lpt (append lpt (list (list (+ bp1 (* br (+ (cos ai) (* ai (sin ai) (+ bp2 (* br (- (

8、sin ai) (* ai (cos ai) (setq ai (+ ai da) ) (setq lpt (append lpt (list (list (+ bp1 (* br (+ (cos ae) (* ae (sin ae) (+ bp2 (* br (- (sin ae) (* ae (cos ae) (setvar "cmdecho" 0) (command "pline") (foreach pt lpt (command pt) (command c) (command "pedit" "l" &

9、quot;f") (command c) (setvar "cmdecho" 1) );螺旋線畫法:x=r*cos(2pi/k) , y=r*sin(2pi/k) , z=(+/-)s/k .; s:導(dǎo)程(+=右旋,-=左旋),k:每圈等分?jǐn)?shù)。(defun c:yzlxx(/ bp r a s k n bp1 bp2 bp3 dmax di da pt lpt) (initget 17) (setq bp (getpoint "n 螺旋線中心:") (initget 7) (setq r (getdist bp "n 螺旋線半徑:&q

10、uot;) (initget 3) (setq s (getreal "n 導(dǎo)程:(+/右旋,-/左旋)") (initget 7) (setq n (getreal "n 圈數(shù):") (initget 6) (setq k (getint "n 每圈等分?jǐn)?shù)<36>:(宜取36的整倍數(shù))") (if (not k) (setq k 36) (setq bp1 (car bp) bp2 (cadr bp) bp3 (caddr bp) (setq dmax (fix(* k n) (setq da (/(* 2 pi) k)

11、 (setq a 0) (setq di 0) (while (<= di dmax) (setq lpt (append lpt (list (list (+ bp1 (* r (cos a) (+ bp2 (* r (sin a) (+ bp3 (* (/ s k) di) (setq di (+ di 1) (setq a (+ da a) ) (setvar "cmdecho" 0) (command "3dpoly") (foreach pt lpt (command pt) (command c) (setvar "cmdec

12、ho" 1) )4、幾點(diǎn)說(shuō)明:(1)、以上三個(gè)程序編程思路是一樣的,若需要繪制其它曲線,只要將其數(shù)學(xué)模型適當(dāng)變換后代入程序中,即可實(shí)現(xiàn)所需功能。(2)、該漸開線只能繪基圓上正東方向象限點(diǎn)上的漸開線,如要獲取其他方向上的漸開線,可以在AutoCAD中修改獲得。(3)、繪制螺旋線的程序較2001年第6期上郭克希副教授的程序有所改進(jìn),原程序因?yàn)槿?shù)n作為循環(huán)記數(shù),只能是整數(shù),使螺旋線圈數(shù)只能為整數(shù),而該程序中圈數(shù)n可以為實(shí)數(shù)。(4)、建議將lpt等參數(shù)設(shè)為局部變量,以減少內(nèi)存占用率。(5)、最后一個(gè)程序繪制螺旋線后未用f擬合曲線,是因?yàn)?dpoly繪制的曲線擬合后就不能作為實(shí)體的拉伸路徑了。5、 編入菜單: (1)、編入下拉菜單:在acad.mnu文件中的*POP7*DRAW后的ID_Pline &PolylineCC_pline 下面加入以下語(yǔ)句即可ID_jkx &JkxCC_jkx ID_yzlxx y&ZlxxCC_yzlxx ID_3dpoly &3D PolylineCC_3dpoly (2)、編入工具條:可直接在工具條上右鍵進(jìn)行定制,在此不做贅述。三、應(yīng)用:齒輪、彈簧等。四、 結(jié)論: Autolisp是一種內(nèi)嵌式表處理語(yǔ)言,可以廣泛應(yīng)用在AutoCAD各個(gè)版本中,AutoCAD200

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論