日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pline加点lisp_用Autolisp 在AutoCAD中实现多种曲线的绘制

發布時間:2023/12/10 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pline加点lisp_用Autolisp 在AutoCAD中实现多种曲线的绘制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用Autolisp 在AutoCAD中實現多種曲線的繪制

一、引言:

AutoCAD自1982年由Autodesk公司推出以來,經歷了20年的發展更新,目前,已深入到包括機械、建筑、服裝、航天航空、地質氣象等等的眾多領域中。AutoCAD已成為眾多工程設計人員的首選設計軟件,其格式也逐漸成為各CAD系統間的交換標準。

AutoCAD之所以有如此廣泛的應用,除了其功能強大、易學易用外,還在于它是一個開放的交互軟件,自85年推出的2.17版中,AutoCAD就內嵌了Autolisp語言,方便用戶對其進行二次開發。自此,便有無數的工程技術人員成為Autodesk公司的編外程序員。隨著AutoCAD版本的不斷升級,它所支持的開發環境也不斷增加,如:ADS、ARX、Diesel、DCL、

VBA等等。但由于方便和易學易用,Autolisp始終是技術人員在開發AutoCAD時運用最多的編程語言。同時也有更多的工程技術人員投入到Autolisp的學習之中來。但是,畢竟Autolisp也是一種編程語言,學習起來遠不如學習AutoCAD的操作來得簡單。故也有部分技術人員在學習過程中有危難情緒,針對這一情況,本人在此通過一種方法、三個例子來闡述Autolisp編程的一般過程,希望能對Autolisp初學者有所幫助。

二、Autolisp的二次開發:

(一)

問題提出:

盡管AutoCAD在各個領域中有著廣泛的應用,但總不會面面俱到,在機械行業中,經常要畫一些復雜曲線,如:三角函數曲線、漸開線、螺旋線等等。這些曲線在AutoCAD中沒有專門的命令,難以用一般的方法繪制,盡管機械制圖國家標準中有用圓弧近似替代漸開線和螺旋線的畫法,但它們一不準確,不能通過裝配干涉,二不方便,需要取很多位置點才能畫出。而用Autolisp編程繪制,卻能快速準確的得到所需圖形。

(二)

曲線繪制:

1、

獲取曲線的數學模型:

正弦曲線:x = a

y = sin a

漸開線:x = br * (cos a + a sin a)

y = br * (sin a + a cos a)

圓柱螺旋線:

x = r cos a

y = r sin a

z = s * a /

(2π)

(s取正值為右旋、取負值為左旋)

2、

設計程序框圖:

3、

程序代碼如下:

;畫正弦曲:x=a , y=sin a ;

(defun

c:zxqx(/ da bp Ai lpt bp1 bp2)

(initget 1)

(setq bp (getpoint

"\n 起始點?:"))

(initget 7)

(setq da (getangle

"\n 角度增量?:"))

(setq Ai 0 Ae (* 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)

(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 起始點?:"))

(initget 7)

(setq br (getreal

"\n 基圓半徑?:"))

(initget 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 (- (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"

"f")

(command ^c)

(setvar "cmdecho"

1)

)

;螺旋線畫法:x=r*cos(2pi/k) , y=r*sin(2pi/k) , z=(+/-)s/k

.

;

s:導程(+=右旋,-=左旋),k:每圈等分數。

(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 螺旋線半徑:"))

(initget 3)

(setq s (getreal "\n

導程:(+/右旋,-/左旋)"))

(initget 7)

(setq n (getreal "\n

圈數:"))

(initget 6)

(setq k (getint "\n

每圈等分數<36>:(宜取36的整倍數)"))

(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))

(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 "cmdecho"

1)

)

4、幾點說明:

(1)、以上三個程序編程思路是一樣的,若需要繪制其它曲線,只要將其數學模型適當變換后代入程序中,即可實現所需功能。

(2)、該漸開線只能繪基圓上正東方向象限點上的漸開線,如要獲取其他方向上的漸開線,可以在AutoCAD中修改獲得。

(3)、繪制螺旋線的程序較2001年第6期上郭克希副教授的程序有所改進,原程序因為圈數n作為循環記數,只能是整數,使螺旋線圈數只能為整數,而該程序中圈數n可以為實數。

(4)、建議將lpt等參數設為局部變量,以減少內存占用率。

(5)、最后一個程序繪制螺旋線后未用f擬合曲線,是因為3dpoly繪制的曲線擬合后就不能作為實體的拉伸路徑了。

5、

編入菜單:

(1)、編入下拉菜單:在acad.mnu文件中的

***POP7

**DRAW后的

ID_Pline

[&Polyline]^C^C_pline 下面加入以下語句即可

ID_jkx

[&Jkx]^C^C_jkx

ID_yzlxx

[y&Zlxx]^C^C_yzlxx

ID_3dpoly

[&3D

Polyline]^C^C_3dpoly

(2)、編入工具條:可直接在工具條上右鍵進行定制,在此不做贅述。

三、應用:

總結

以上是生活随笔為你收集整理的pline加点lisp_用Autolisp 在AutoCAD中实现多种曲线的绘制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。