|
|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、 引言
& Z: ]- D6 @5 A% 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交互绘图结合,快速绘制三维螺纹和弹簧。
% Q" e& N2 x, Q( B/ I 2、 问题的提出
1 g, r2 D* e" Y6 j, s' J) s6 c 笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。9 K6 [2 m3 R2 m" G& {" ^
3、 圆柱螺旋线的绘制& T4 x4 _2 s+ j8 w! h9 I
3.1 圆柱螺旋线数学模型- f" B$ _9 ^ Y" c. u1 b) q
* 圆柱螺旋线的形成# J& l8 [0 v* @2 q# M) Q- R
圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。/ r7 @+ p4 C7 ^0 L6 n7 L
* 数学模型
. _1 e4 ^, _& x# C4 D 当圆柱螺旋线的轴线与坐标系的Z轴重合时, ! M: z7 A0 ]6 G% {% n; V
圆柱螺旋线上动点M(x,y,z)的参数方程如下: 9 K8 j4 d. m) V( J4 n* N
x=rcosα 6 p& |. u7 o+ u; y# V3 w+ @
y=rsinα% ^5 E9 V9 S a& P6 s" n
z=±t1*α/(2π)
" R: f4 J& ?( z9 x, T1 N* K 在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。
2 K' Z8 w) {4 W3 | 3.2 程序框图
3 |3 o2 X7 m) F, E* O 开始 L& E j) H3 B6 b) c: E$ n
% M+ c4 |8 w# ^
参数r、t1、k赋值 j0 U# N# U: q( i
9 \, l2 E& U2 r. l9 f5 Y
给出基点坐标
, C+ d/ Z1 j" a. P' ?/ n" v) u. {+ z/ K* ~, n3 V" `! f
计算x, y, z各点坐标
2 C; ^0 D8 O0 o' \8 B& C
+ ?7 o! a$ @9 u7 { 绘制螺旋线
8 _, T `$ b3 `: B/ y* I
; d0 h( J: \9 L0 y# F 结 束
# H" S/ I8 }, I' ^! @* j% N1 e" z! g6 q# U( I
3.3 程序代码! D2 j- L' Y4 o9 B
打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。 x3 F2 |& u' b3 n G
绘制圆柱螺旋线的AutoLISP程序代码如下:. I3 ~% {# [, M
- O6 \% O7 e# D' g; ~, g5 w ; This program is using for drawing a helix! \- c# i, q4 E8 h0 a2 b4 \
6 n7 n5 G* {, w) {% n# x6 _
(setq b1 (getpoint "请输入基点:")) * f, }5 D: u; q# ?. `( s4 k
9 x3 l C7 f9 h( ?! P
(setq r (getreal "半径 r=:"))
" O- w2 g' O6 S& d; y, R0 u- d0 i5 r, q, e0 J4 y
(setq t1 (getreal "节距 t1=:"))0 x* G5 s/ f" f
$ N& {+ M: z% a# L3 Q* M: [! q# K: }& K. ~
(setq k (getint "段数 k=:"))
' L3 \2 T2 L* u4 o) P9 N6 V7 h; g5 T( ^7 _6 D" T, `
(setq n (getint "圈数 n=:")) 6 J7 Y$ ]- ?1 u4 E7 J0 m
- A2 n, i7 ~0 A P) D$ y! z: | ^ (setq ta (/ (* 2 3.14159) k))
2 ~6 t b+ h2 B" M2 ]& p! E/ |& V& b! ]0 r- O6 Y
(setq j1 (/ t1 k))
6 M( ?* q5 S+ J+ ?. |' O7 b& o/ _) S {% `4 L! I
(setq a 0)
9 c8 {* t* I$ C5 n2 \2 L( z, q1 J9 w, S( d& v
(setq jj 0)* ~2 `7 a; @6 u T) w8 \- u3 f
& w" ~5 F+ e M7 s
(setq ii 0)
4 e$ r9 ` i9 W" ~
9 s/ S: o3 g& m; A2 n (command "ucs" "o" b1)
/ a& ], [/ e9 E0 v% x
( f1 r& t" E E& G (command "3dpoly" (list r 0 0))9 u5 g% ]/ k* n$ C
) _, E+ C3 E. B; e- H& y0 I& W
(repeat n- z6 z) Y# G1 B7 @. ~& F; m
$ J# e/ [0 i4 n2 G, g6 g (repeat k
! ~0 D, }% n; x$ s* c5 l" {# U! c2 K2 s
(setq jj (+ jj 1))
+ c' ?4 r$ E+ i: \: t+ {" G9 s% W/ b: F% z X% M" ^ h! r" n
(setq a (+ ta a))3 e) a2 q2 A8 t- `) q0 V( K
- E( ]9 b+ h( s+ ]/ S (setq x (* r (cos a)))
! H6 f" T, D% @
) L. x+ X6 |( B (setq y (* r (sin a)))# \: ]" C& L1 h5 ]3 ^# z
j4 B; V) D R: E" X3 B7 J! c" Q
(setq z (* j1 jj))
- {% S; H8 T5 [- o$ m% M6 [) h
* M# p$ d* i$ x. i (setq p2 (list x y z))
L, a: z9 w$ t t# [
5 l) `1 @& X1 J( T" v (command p2)& ]; J: V I0 l: p& l r5 B
# S' x6 k2 I' D )
: ` S8 d1 O$ x5 t) g( R
' D1 {/ s6 a/ K% f (setq ii (+ ii 1))* d2 t* n2 k6 O, v" |) w; V7 h
: W+ ]% C5 ? ~
(setq z (* t1 ii))
# c( R+ L5 C% t; H6 N5 p1 T( D# i& j7 i# F! ]
)
% s* q) I2 @% @* t; G4 g( _9 d) J+ B2 t/ S, U0 `
(command "" )5 s0 n" z+ g8 i. f1 p
1 O+ ~4 U9 _9 p7 k( |0 u7 Q 段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。4 F) u! S& u0 V {: O
在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。
; H1 M8 B8 I8 o 3.4 程序运行结果) y3 X) \, T C
, N. \' f+ Y- Z. Y) K" n, l. Y4 r
加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。: x @6 y2 ?/ C( D- }" B6 t* `
4、 应用
& L: t/ i4 y8 R+ X2 V * 绘制弹簧
, u, P0 D5 |' ~. x( q 在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。
6 }; k" J1 h" s. J) d 我们绘制的弹簧参数如下:
* `4 Q# R) J1 n1 t 外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。# F/ Z* u# e8 e# k% S, s/ i' y( _
* 绘制螺纹
H: N7 F8 [' S 如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。+ W( W! b2 M+ _
5、 结论
6 d$ s4 u2 q' a) |7 Z2 B (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。
$ B: E- [ m3 c (2)以前AutoLISP应用程序要另找文本编辑器编写源代码,然后回到AutoCAD中加载运行,不便于程序的调试。用Visual LISP 集成开发环境,我们可以在一个单独的环境中执行文本编辑、程序调试、与AutoCAD及其他应用程序的交互等操作,极大地方便了AutoCAD的二次开发,满足技术人员AutoCAD的二次开发需要。 |
|