|
|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、 引言
7 O6 W; s+ f. z! R 在众多的AutoCAD开发工具中,AutoLISP是使用最简单、应用最广泛、使用者最多的一种开发工具。但是,AutoLISP只是一种解释型语言,且不能加密。为了解决这个问题,Autodesk公司在AutoCAD R14中推出了Visual LISP的测试版,随后在AutoCAD 2000中推出了Visual LISP的正式版本。Visual LISP完全兼容以前的AutoLISP,同时应用了AutoCAD的另一个开发工具-----ObjectARX面向对象技术和ActiveX技术,使Visual LISP开发的应用程序功能更强大,运行速度更快,从而真正成为一个能开发商业软件的开发平台。本文作者采用AutoCAD 2000 中的Visual LISP进行了三维圆柱螺旋线程序开发,并与AutoCAD 2000交互绘图结合,快速绘制三维螺纹和弹簧。
i) e- O% z H 2、 问题的提出
4 X4 ~' w0 m; N/ Y4 }& @ 笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。9 p' w" D6 O* b) z+ [$ X1 A
3、 圆柱螺旋线的绘制
7 D4 r( L8 `0 I! ~8 _( n 3.1 圆柱螺旋线数学模型8 Y$ e: U- ~' u/ P6 f
* 圆柱螺旋线的形成
' Y/ W( u+ ~$ Q, f$ K" l 圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。
3 Q' ~: V, s0 { * 数学模型
( _* p; A+ }- D# D D6 T0 ~ 当圆柱螺旋线的轴线与坐标系的Z轴重合时,
* o# y! x0 E8 W6 h; K 圆柱螺旋线上动点M(x,y,z)的参数方程如下: 9 H" d0 J7 V' C \ R) R
x=rcosα
& V% Z- h ~8 a# |% o! r! M y=rsinα
( j# ]7 p% V% }- C& f z=±t1*α/(2π) ; n9 n0 {2 B, ? S/ u' y; q2 K$ h. V
在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。! t5 A% Y ]0 T
3.2 程序框图
+ | D2 ?& m1 G% R; r; z2 E! V0 a 开始 5 g% I f9 z2 u: B
% B# i: |3 Q& `0 ~; u% f8 d 参数r、t1、k赋值
/ {" E; i/ S: X- o+ |
8 }% e2 Y/ f9 U/ t7 J+ x 给出基点坐标
( f9 R" [1 _- M
; ^3 C9 w, s% Z$ ?9 d 计算x, y, z各点坐标5 ^) V, H* f$ |- u7 ?" R( w, z Q
) q/ C/ ~7 m e" p% ?0 z
绘制螺旋线
5 u; x6 w" V0 x' @) `/ N2 ^9 L. D8 C {
6 N4 B/ l/ B$ [ 结 束7 p% M' p3 i3 i
v. Q$ W e: L% k$ T
3.3 程序代码/ S" s2 d2 O4 n
打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。 7 X7 p4 @5 k r8 I( r6 a
绘制圆柱螺旋线的AutoLISP程序代码如下:
9 x8 F y" \5 j& D' ~) a
" I) S' V4 F, i ; This program is using for drawing a helix0 M \3 i. N+ D. B, @
0 H/ Y& ?8 P8 J' A3 c( \; \
(setq b1 (getpoint "请输入基点:")) 1 D6 P$ d0 z1 c7 K7 J# d
" Y2 c) k( Y' r, [4 e" p# q3 @5 q, k3 K
(setq r (getreal "半径 r=:")), y: w; ]8 L4 x T$ a' w2 F. L
9 ]. b" p# P+ x- u (setq t1 (getreal "节距 t1=:"))8 W/ L: B; s4 a1 N. ]
3 F: \- k- {5 O+ a4 g3 l (setq k (getint "段数 k=:"))( \ h; \$ O2 e- A
& J8 k+ F5 z/ I- e8 v/ _! Y/ |/ E (setq n (getint "圈数 n=:"))
( d0 F1 p* ]: }/ {! {6 c! y7 x' ^0 }+ W6 y c1 L
(setq ta (/ (* 2 3.14159) k))2 |9 K3 G2 N, n* @ I& i, ?
' K8 c1 Z8 T& Q8 g) c
(setq j1 (/ t1 k))
8 @& ~2 K; u$ B! Z# o/ u; R
. C' E2 y: B( W' g" I1 ]" S (setq a 0)
4 y4 S' l& M; [- O. d* m: q, {5 E% l G/ J
(setq jj 0)6 R0 w0 L+ i2 ^. J; I8 O
% J7 \5 ^' V% i1 S7 Q: Q
(setq ii 0)
; v. J& L8 d/ m1 m, U% k
6 J& u8 Q8 }- N5 j o' |) V (command "ucs" "o" b1)
: k* b! x! C( C4 B; m" l! u1 W! a' J ~& A' [
(command "3dpoly" (list r 0 0))
v1 d5 ~3 b) F$ E0 o+ X$ \* d% i8 i
(repeat n
6 Y- _5 o+ q8 o- c. L' j, u) C# c
1 q X/ G( {0 W7 q( [* c' p (repeat k
$ k& ?8 n9 ]' D/ N3 Q! k; @, ]( `$ K( A& }5 Q0 v! B
(setq jj (+ jj 1))( w& h0 D) z( L, E# Q8 v! s
* B8 ?- H) i! G2 y
(setq a (+ ta a))
* `+ M, U& l/ D7 q3 v6 D" S1 j7 g! D1 W; h
(setq x (* r (cos a)))
6 D7 C* v& H; ?8 C' Z3 R
) ^0 g. i& m) m" p7 c4 V( F, B (setq y (* r (sin a)))
& D0 J7 t8 @% l* i! \( y: O7 `9 Z/ B# V: ^/ P: X w6 {
(setq z (* j1 jj))- e. N9 ]; z- g
5 Z( O5 M, @9 D( q Y0 ^1 r7 B (setq p2 (list x y z))
: Y. T7 s! P5 Z2 `. ?0 v# u y: ~. J$ h1 ]3 v) I# z
(command p2)
8 o" }7 h2 |' B( I
Z* E# I! N/ h )) [! d2 w) z) B7 b6 Y U
1 t, A4 Z2 ]; v (setq ii (+ ii 1))
' j2 E7 t+ `; F, @2 N: j0 D* Y
# s9 P5 h: q+ i (setq z (* t1 ii))6 Q8 b9 n+ c- U" R. ?. D5 t; E
: c% p4 m: e% q- [- Q8 w1 H: Z
)
3 P n+ O9 h, Y5 |8 D8 I e8 K( M
(command "" ); L. N9 [" ~6 S" T6 _
0 m/ \6 S {& Q1 Q. p6 @! z8 l
段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。2 H q. F! b" r: E0 U. a
在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。
1 s* o8 L4 y; M! y2 V5 E 3.4 程序运行结果
1 O& h1 u: x2 W) c
9 x6 }# U8 U4 w4 g! a9 ~ 加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。* J2 I' S% s k9 Z
4、 应用 " {( a9 x y2 O6 I6 u6 q
* 绘制弹簧/ V' }0 @ z' r# }: u n
在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。
4 G! F- y; i+ f 我们绘制的弹簧参数如下:% _( O+ S$ n3 @/ B$ ]
外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。7 ]! p' Z: Y, u! W
* 绘制螺纹- Q) c% ^9 q8 O- M, L9 j$ J
如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。
% X; n( M5 Y& m7 z4 v9 G 5、 结论1 q ^3 z8 e2 s+ }( z
(1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。
+ _/ b, N; `8 a' O2 ~) {; p (2)以前AutoLISP应用程序要另找文本编辑器编写源代码,然后回到AutoCAD中加载运行,不便于程序的调试。用Visual LISP 集成开发环境,我们可以在一个单独的环境中执行文本编辑、程序调试、与AutoCAD及其他应用程序的交互等操作,极大地方便了AutoCAD的二次开发,满足技术人员AutoCAD的二次开发需要。 |
|