|
|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、 引言
2 _' A- ]" k2 Z+ j, Z 在众多的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交互绘图结合,快速绘制三维螺纹和弹簧。
4 ^7 l3 M$ N0 G s7 \0 W9 H6 b 2、 问题的提出
+ F1 k9 i- C. _" I/ [; G 笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。7 j0 ]& p o1 C
3、 圆柱螺旋线的绘制 c6 y5 |% S m `' a
3.1 圆柱螺旋线数学模型: _7 {* p0 b4 `+ i. E' ]! h
* 圆柱螺旋线的形成
' y0 b( n. P1 Q# a 圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。
: ]. C T3 B& w, d' U * 数学模型
+ D/ o. S' w7 c6 v7 s 当圆柱螺旋线的轴线与坐标系的Z轴重合时, 3 a( ?' f. L2 e
圆柱螺旋线上动点M(x,y,z)的参数方程如下: " ^# P N" }( `# d |. R8 O$ \ K
x=rcosα
( q: g1 a4 b* d. S. a2 d y=rsinα, l3 {0 r3 T* w" D6 B' ^% a* ^
z=±t1*α/(2π) * ] V! }1 }$ ~, e, s3 {
在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。
9 z1 E. _+ r# H0 J4 @9 @ 3.2 程序框图2 W! D; p% Z! W; t' l: {# Y
开始
& z/ l0 s/ i5 m9 M* _/ N8 E+ L, Z) n& z7 w6 I: U* d
参数r、t1、k赋值
6 N1 \+ T0 W$ Y. b5 y) f
: l% o; q7 U, ]; S0 t 给出基点坐标
) v' j0 J) U6 o/ E8 O4 z+ c9 S0 A$ W0 u4 G* b% P/ y
计算x, y, z各点坐标
; R4 V1 E/ E6 n5 g+ W8 F1 ?, }7 Z; U9 f% X
绘制螺旋线/ x2 w* x D' \1 z2 }; k0 h
- y% z. H& o" D% y- N2 B- K; k+ s 结 束
$ l& M9 [$ z3 j, I6 d" P X3 k; Y4 e6 n8 p
3.3 程序代码9 O" D1 _: D- C
打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。
$ ~' d9 k5 x+ f' r5 v* l! l3 ~2 h 绘制圆柱螺旋线的AutoLISP程序代码如下:; g( {3 z# f% r3 w/ V5 A
. P# ~, E( T) l& L% c& F
; This program is using for drawing a helix
7 o @3 E4 Z4 @% j( ~5 h! [$ E, B( m: H/ f% C2 ^2 i4 m
(setq b1 (getpoint "请输入基点:"))
! j# W% K% n# N [! K! e! }: w! I4 u# g0 k7 t/ m
(setq r (getreal "半径 r=:"))
" c0 D( ~% \, O4 ~: O& H8 X1 p5 l- ] F1 W7 s. K8 R
(setq t1 (getreal "节距 t1=:"))) P$ x3 r! H5 {2 W2 {$ S
( S' Y" ~( \8 O% f$ n% P
(setq k (getint "段数 k=:"))
; d) T a C7 P4 [$ T# ]. [; ?6 o& H
(setq n (getint "圈数 n=:"))
/ D) e2 x, Y1 l F- O+ y' V& Z9 W& P; E4 I5 c
(setq ta (/ (* 2 3.14159) k))7 p$ D4 ]+ E/ ]0 _5 M: ~
7 g0 K8 ?" k; C+ e' N
(setq j1 (/ t1 k))# e; X: y+ p- v" F1 C/ [+ e& `/ c
; @5 V5 K" z, A1 g8 [
(setq a 0)
7 a& F3 u1 o. u0 L4 ^) u+ c$ g
" c# r. L1 o" b+ f% Z4 E (setq jj 0)
( ]0 Y& f9 m6 }! T8 r7 P3 s- c" E8 Q- y0 `6 Q+ G
(setq ii 0)2 C& r; W) |, _9 g2 G
. r) t2 O, [0 Q% S5 W* g( j+ f
(command "ucs" "o" b1)
. A, m& A. J* ?3 p+ k# e
9 `& e. n Y/ \% q (command "3dpoly" (list r 0 0))
) _6 g9 B% d A8 L! w! B7 R `) D/ s4 p1 D7 B% D$ a
(repeat n$ A3 F: R% d& n- z( Y4 c
' m3 q/ \# Y' B( c# c) w6 S (repeat k
; E; @- W0 m% m! A
, c& {$ h1 x ^7 x+ [& i+ p (setq jj (+ jj 1)), \5 a( ]( @ p8 A1 P% X
7 ?- h6 p8 A Q: @ G/ v2 \# w- H
(setq a (+ ta a))
8 S+ H9 S# x7 O( t' j K% N' ^( I5 J7 G4 I% D2 X# X4 u" [
(setq x (* r (cos a)))
, c$ p1 M; F, e
. _2 b/ F( b7 ^8 n (setq y (* r (sin a)))4 W. x2 _8 r6 v5 v* A$ z
3 L- i0 d) w! K4 a' ~
(setq z (* j1 jj))
# U5 l" b8 J1 S, m0 ?) u0 _* E+ M4 r5 U
(setq p2 (list x y z))
) U2 Z8 Y U: Z& R1 u ?6 q" m0 z: b) \& x: I, n( y9 T Z
(command p2)
- f7 N0 R$ a/ m# k$ a
4 @, `. F4 s v% B )
) I/ k7 Y% v7 `# {" D$ ?2 W& B8 Y- [ S
(setq ii (+ ii 1))
* Y* |6 T; e# u
+ e( w, `5 R! y5 [! n% x6 Q (setq z (* t1 ii))( i+ h _6 D0 a M/ D
8 g; ]! s; b1 t! J( {- D" B* S )
3 B5 j" m- V! ]/ N& s. P/ ?- R0 R3 @7 S3 I c# ~7 c4 _
(command "" ) o, c" v% }: ^0 z
1 |$ q3 B/ G& h6 ] ~
段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。2 O$ M# Q" k. K' U0 c7 a' ?. F
在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。 [% F" Y: ~# |# S7 ?
3.4 程序运行结果. ~1 V1 D5 {2 e, U6 a9 N. ]
1 b" [! g, o0 }& x6 E' \
加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。- Q- }/ I5 D9 e/ h6 b
4、 应用 5 i% v' o/ U* `% @9 X
* 绘制弹簧3 t' y; r9 B6 R7 U+ V4 f7 n
在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。8 E- t/ q8 \: q) d5 ~' p' }
我们绘制的弹簧参数如下:7 R; B4 |6 Q4 P- I! G# B" a9 Z2 X
外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。2 [) |" ^) j* I$ f
* 绘制螺纹
! } W8 _# q0 e' g 如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。1 ^9 n! e8 h3 V- L. j( A
5、 结论
7 ~, W$ T' _6 ~8 M7 C& z% | (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。: J) B+ b' X3 G7 d: O
(2)以前AutoLISP应用程序要另找文本编辑器编写源代码,然后回到AutoCAD中加载运行,不便于程序的调试。用Visual LISP 集成开发环境,我们可以在一个单独的环境中执行文本编辑、程序调试、与AutoCAD及其他应用程序的交互等操作,极大地方便了AutoCAD的二次开发,满足技术人员AutoCAD的二次开发需要。 |
|