|
|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、 引言
; R8 X9 C# 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交互绘图结合,快速绘制三维螺纹和弹簧。7 T- }* m* ]" b5 @/ A
2、 问题的提出
( |1 R7 N9 n, D9 [5 n$ i& P 笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。1 m7 h+ @0 i V- d; t* w) m
3、 圆柱螺旋线的绘制 U. g' s6 @! ~3 Q" j8 [$ v, _8 d
3.1 圆柱螺旋线数学模型6 \$ m4 T# i) G- W* g% p
* 圆柱螺旋线的形成
& q* T! O& w3 F" F5 } 圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。# ~6 x9 i8 L) E$ I; g) I. U. z5 }
* 数学模型 0 C% u6 x9 L1 ?) R6 `2 @
当圆柱螺旋线的轴线与坐标系的Z轴重合时,
) ?0 R* l2 B2 E& I! N 圆柱螺旋线上动点M(x,y,z)的参数方程如下: # I! {/ c, a. N9 T
x=rcosα
o6 W! c6 D, E. x7 o# u y=rsinα
. v m% x }: Z, V' ^ z=±t1*α/(2π) / u- O/ y2 p6 G( V* C& T# j
在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。
1 F/ _* N) w* Q# ^ 3.2 程序框图! N. W2 t9 h. x( E5 E8 \" I
开始
9 ^. n6 |. K* T6 J- b( n$ H; C: r; d) P' {: W
参数r、t1、k赋值 8 A+ j. R) K) z( r
& E0 L' g2 `1 E' h9 t3 R2 Q! `
给出基点坐标
' @1 l/ `9 Q# P. g1 Q5 I t1 i
2 e X' r: q- C* D0 O* ?6 X% R 计算x, y, z各点坐标5 S, S$ v" o& E, b& h$ o
- B. C! ]3 h3 i2 F, d }7 U
绘制螺旋线
. a7 P- a$ k; h9 H$ t# {4 J7 v3 [; I( C8 ]7 @
结 束
4 w: z, S( ~* y9 l% j) g0 q: u' V0 N2 i( |/ i0 j6 n
3.3 程序代码7 k+ Y. `5 X. x* N+ e" ] v3 ~3 T
打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。 # B7 P. _: s( y0 l v0 c
绘制圆柱螺旋线的AutoLISP程序代码如下:
5 D- m" Q0 J9 f9 E
5 a3 v8 N- n' M5 j ; This program is using for drawing a helix, _" C3 h5 H+ U- d
' h/ H5 y- ?+ X3 T! d0 W2 k (setq b1 (getpoint "请输入基点:"))
& |- ]8 @# D9 f& c/ m9 v
3 {% |5 w2 o: q+ j: j0 H Z (setq r (getreal "半径 r=:"))4 p. V A0 t8 _8 k& W2 z2 i0 y
: t$ ~ b8 f. a+ H
(setq t1 (getreal "节距 t1=:"))+ O3 ^+ u$ S/ I- }) H, r8 O. c
% f$ s' J8 }! ^. n8 Z3 v, d (setq k (getint "段数 k=:"))5 D+ C' ^) V- k+ Q7 e& A% p4 e
3 D% K2 ~5 E2 N1 ^" `! C (setq n (getint "圈数 n=:"))
7 D$ O5 N, W- F$ E$ L" ]& a8 o. ~$ t* l4 S* a5 K/ e& n
(setq ta (/ (* 2 3.14159) k))/ ~+ d# d# w4 M/ D/ X8 V
1 [$ Z: S8 T9 m9 T% {) w/ C
(setq j1 (/ t1 k))5 e* B7 { N" K5 N' b. F3 W, ~5 A
9 ~) F: s. B; T# w7 W
(setq a 0), W* k) t4 @8 S3 U& |* Y" I
/ Z% d- x4 D3 I/ M, x/ B (setq jj 0)
6 k7 n& Q P+ k( Q8 p4 S! s7 ~# B3 T T
(setq ii 0)9 Y% U* b/ `: G
. M$ D' o) z4 w2 L (command "ucs" "o" b1)/ V3 d( K y* h' g
5 p3 P. ~: }# N: d: j H% y/ A (command "3dpoly" (list r 0 0))4 n/ D0 ]" T# g3 c3 G, Y* o
# d/ C; D: s% S* d- a
(repeat n
' R8 s* Z* g, M9 u
' B: W( C% B2 L: v* f; M1 p (repeat k
) X, s: m; j, j. ]; a7 ^/ F, ^
) w' _4 ?0 D0 T9 c5 G+ e7 P (setq jj (+ jj 1))! z) d; L" D- \ Y- Q# u
5 i5 s3 {3 T- ]" I9 Q, j (setq a (+ ta a))
; M# {6 M+ ~& {3 _) y: J
- s* i: Y. @' }8 ?# m& P; V (setq x (* r (cos a)))" O. a0 T- N8 J% E3 T
/ u( u6 h6 E0 f; H; L& r (setq y (* r (sin a))): h/ z8 ]( r+ ~: h( u
" {3 a% L5 w) N2 f& ~0 j (setq z (* j1 jj))! m! ]0 R# |& |' @8 P/ j6 z
2 ]7 e& P! x, D' x
(setq p2 (list x y z))
! r) X' P: \: V A# d: N) u0 K' ]$ ~+ P4 e8 K
(command p2)/ F' ]% L# X+ X y
- i: p9 W/ w9 w. i# `# b `* @ )( E; \" D) C: v1 m2 y! p
+ P% z0 ^4 h" ]& [- T) F2 e. j2 F- } (setq ii (+ ii 1))
, S; J) W2 E; J# |0 {3 F+ ^) P {: O' J" {! Y
(setq z (* t1 ii))
( E# R' z6 `/ s7 ~
; S" ?6 k' {7 p0 r$ j+ g' h )
: l. ^- a9 Y* F$ X* p% b
& Q7 ]. e3 q( T) n (command "" )0 b$ M4 t \- x% M$ Z: e
5 d( m/ Z0 H% e: \+ W5 s
段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。
& `! t+ w9 G( G- f) U6 K 在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。' }# L% \, ?7 f6 x1 R* e( Z
3.4 程序运行结果
2 P i9 `% I+ x* i% I
+ |% U+ X+ k: U4 J( M 加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。) i1 T; o ~. N1 y
4、 应用
+ R6 P! \9 l3 S( u0 u5 o * 绘制弹簧" x3 {% Z) \4 x* u5 U
在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。
2 Q0 t5 @" y% s8 Z) i 我们绘制的弹簧参数如下:' V7 s( Z. s7 N% M' n0 a
外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。
9 J/ z7 C( @ ~ * 绘制螺纹
. c) J2 Q F* E v 如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。9 V) K4 [. L2 R" n1 L4 l
5、 结论
/ V- c' A" Q5 N! b* i) q) X# t; m (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。
9 U, x U8 X9 ^% i (2)以前AutoLISP应用程序要另找文本编辑器编写源代码,然后回到AutoCAD中加载运行,不便于程序的调试。用Visual LISP 集成开发环境,我们可以在一个单独的环境中执行文本编辑、程序调试、与AutoCAD及其他应用程序的交互等操作,极大地方便了AutoCAD的二次开发,满足技术人员AutoCAD的二次开发需要。 |
|