|
|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、 引言1 t. }3 ^5 a5 O" B- l
在众多的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交互绘图结合,快速绘制三维螺纹和弹簧。
2 V. ?+ Z6 L9 [; C" ~ 2、 问题的提出
% M" z7 z8 G) X' X0 _. \ 笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。6 U$ U& Q3 F& |3 g# n- S
3、 圆柱螺旋线的绘制* I: d; c. x/ n* c
3.1 圆柱螺旋线数学模型
' K, b V) ~8 [8 u1 @) p5 N( z7 z0 h * 圆柱螺旋线的形成: o8 U2 m- c/ t Q8 X+ [% |- S; L
圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。
' |! O0 M# s% H3 {6 ` * 数学模型
) Z( f" S X: A& A7 X: @ 当圆柱螺旋线的轴线与坐标系的Z轴重合时, ( {8 H' ?$ L |
圆柱螺旋线上动点M(x,y,z)的参数方程如下:
' }! ~8 T. R8 M$ @9 i# K6 t x=rcosα / Q0 E# ]* w) v# x
y=rsinα Q- L; ~, d Y' w
z=±t1*α/(2π)
' k4 v1 l h/ [# Y' K3 ~/ H' c; i 在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。! r) f( `/ S$ a2 {0 ~" z
3.2 程序框图
* i* m/ V W" U 开始 6 }: t/ N4 N9 a3 A' T( v" _
' n7 g0 D3 z p: ?2 k 参数r、t1、k赋值
' N. J1 ~7 a# K0 Z, o r! L$ `5 }7 o
给出基点坐标
( [, f& D5 m h$ C
# K5 {, j; a/ v! a" a 计算x, y, z各点坐标+ ], ~. |" i" o" B! r! E
$ w. {5 i% L8 ^6 g4 ^3 d6 D
绘制螺旋线
4 K6 i- B/ N9 I
3 D5 j& p3 D9 G 结 束2 n; [# F# C# \
, ^ ?, z8 o& {- d
3.3 程序代码. T7 I2 A3 F9 j
打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。
% M" `: s. \7 t' Q1 O: i: P8 J- p 绘制圆柱螺旋线的AutoLISP程序代码如下:
" [- K: I% I7 ?+ e7 _/ Y
/ L4 y: A! r" H S- Q2 @# f1 k# b ; This program is using for drawing a helix6 S2 ]' }9 v) B+ q, w6 ]+ S
' b" t0 r5 e) x& t& x) P7 l/ I
(setq b1 (getpoint "请输入基点:")) & ^' z) g/ b# Y# j- U4 D7 _7 z# N
. c1 J+ Y0 D! t3 j/ \( O
(setq r (getreal "半径 r=:"))
6 }! o" h. ?# f/ E' t2 B C$ i
1 o, w# H% R, p0 ?. y4 @: I, R p (setq t1 (getreal "节距 t1=:"))
8 H% {8 C# H4 a1 j( e" V* |4 ?
(setq k (getint "段数 k=:"))0 P2 ^) ]" g' g/ H0 g* b
2 r! C4 E" _. u (setq n (getint "圈数 n=:")) 0 k9 C# Q; |' C& o4 C
+ _! Q- `* ]% N5 r9 p$ M (setq ta (/ (* 2 3.14159) k))
7 s" q* c6 d( w" Q2 L' t5 b2 m; J5 }6 i4 R8 Y* A
(setq j1 (/ t1 k))
/ H& y2 w' k3 [1 [5 T
! ^ `: Q$ g) h* c; |$ M4 t (setq a 0)
2 u. Z' g. e5 |& ]6 F
5 G3 _' p0 f: X( v* G1 ^% T (setq jj 0)
7 ?2 Q+ b6 U$ l. P# v4 ?
( Y+ k9 m9 @0 c. f+ [ (setq ii 0)! Y. v1 s1 J# I4 @
' U( ?6 _& {/ R( I& k4 @* \ (command "ucs" "o" b1)6 W/ r: l* j; C3 W+ t3 J
+ Q/ `. x5 O( |6 r+ e* u$ j. X
(command "3dpoly" (list r 0 0))
# M4 e% K' f( y$ Y3 p/ }/ r0 u. j2 v$ B7 [ _
(repeat n3 j- J- \8 b) k
7 j5 R" `, f, Q* E* o (repeat k
1 e2 h3 O* W7 q- A; V1 L3 D Z" B- N! y0 R9 m/ A. f# b/ R
(setq jj (+ jj 1))3 [, k u. F$ t7 S% }
2 y; Y: I+ A& q8 U: q* q; w
(setq a (+ ta a))( n2 n( S, N; V. {, r- y p9 G8 E1 i9 N
$ S3 N9 c6 \/ H7 H% g t (setq x (* r (cos a)))
. h# Z# m+ @( `/ d, ?8 w- w! A# E! J7 n0 j) p5 l
(setq y (* r (sin a)))- r9 q' H" F# c
7 A9 Y' i+ Z/ D1 {
(setq z (* j1 jj))% A" U8 @, { h2 A" @
& N, U" U5 H( ~, P
(setq p2 (list x y z))* ^; Z/ j/ o& r
" H4 A! ^5 c3 e0 R8 d+ h (command p2): ^, d, I/ T6 X1 h4 O' }* X
8 R2 |, e0 t: @- ~
)5 u; B- E/ I7 `* m$ f
, o4 S/ e$ w$ ~# L (setq ii (+ ii 1))" L4 q$ Q/ k+ t! I' [8 ?
) I v9 h3 f8 x% O ~
(setq z (* t1 ii))) E m7 I: C4 E# g! U7 Q( z
k/ P% J1 |# W/ `* b! i! @5 ` )
( L) |+ T* B, P2 Q7 m0 P
9 r+ Q* r8 a. ^ (command "" )/ |0 ]- @% G1 d
) a& R: M/ h S& R7 Q( M3 d 段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。9 h, _7 U2 Y* V6 [
在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。
) v2 j: q# E0 V/ r: M" z, m7 ? 3.4 程序运行结果
. {# `+ D8 Y0 F, ~( j; O
4 v6 E _2 I% D( V* ` 加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。
7 T7 ]7 C) F) |, R! S" ` 4、 应用
9 Y2 I1 a! f2 V- [ * 绘制弹簧6 V6 w B, f& G5 y: d- X: a# r
在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。/ g* e3 H# F9 H
我们绘制的弹簧参数如下:
0 Q3 w; o b) y9 y. ^! T) U1 M 外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。
" b+ g- }" V: {! ^5 L1 O * 绘制螺纹
+ o! P3 ]; W% }/ Y! a# { 如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。
7 g: q1 I2 D$ x 5、 结论
4 \# c: t h. s6 W0 D1 V% ?$ | (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。
, E! u6 t$ ^1 N (2)以前AutoLISP应用程序要另找文本编辑器编写源代码,然后回到AutoCAD中加载运行,不便于程序的调试。用Visual LISP 集成开发环境,我们可以在一个单独的环境中执行文本编辑、程序调试、与AutoCAD及其他应用程序的交互等操作,极大地方便了AutoCAD的二次开发,满足技术人员AutoCAD的二次开发需要。 |
|