|
|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、 引言8 w9 A( N5 x! r7 s+ G# c! m$ s
在众多的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交互绘图结合,快速绘制三维螺纹和弹簧。8 i, X% o5 r; P1 s7 O5 I
2、 问题的提出
9 V( z' Z/ L8 j& [* ]6 o 笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。3 \& |3 l+ j( C4 A$ D
3、 圆柱螺旋线的绘制
$ z8 s% s7 M6 V$ P 3.1 圆柱螺旋线数学模型 x, _! `+ D0 I4 a- `
* 圆柱螺旋线的形成
; Q- j. ?) H6 ~4 U" E 圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。" k. |, j1 S, T& o! r ^
* 数学模型 / U6 q& q# }& M& e" m3 ~
当圆柱螺旋线的轴线与坐标系的Z轴重合时,
( Q; N0 }8 f" n5 i9 T- b4 I" A 圆柱螺旋线上动点M(x,y,z)的参数方程如下:
% t! [/ V" W Y x=rcosα
* Q2 E) R# M2 j# J" }6 G y=rsinα
4 U( {% e; M/ t: d9 O f0 \ z=±t1*α/(2π) ( k$ w' J4 `; c3 v
在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。
! S! n3 i% m; D0 c% `# C& \0 G! \$ X 3.2 程序框图
) d5 W9 |* r7 r2 p) Q, x 开始
( a2 B+ L4 [5 C0 w
, o6 e7 R; l6 ]5 V/ f 参数r、t1、k赋值 4 j; t# h, j3 k# d1 d: F# P
/ L ]9 ~% O+ b( t1 F# c- h
给出基点坐标
' A- r% z. ?7 G: U! w7 n
4 T+ `# g2 ?- Q9 y8 M9 _: z8 u# ]$ C 计算x, y, z各点坐标
, ^- e: B& k i/ u+ U& n) y$ p! u9 j- T* D4 H$ v
绘制螺旋线
+ a; i5 `1 p/ E D: M+ o9 F
- P/ h6 U+ v- _8 m6 I% H 结 束 r1 E0 P8 s: y1 a9 U0 ?
3 c9 {' ?9 n8 T$ x3 r
3.3 程序代码( U6 s6 }+ r. d9 t6 ~" a
打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。
9 E# \2 `8 U9 E$ m* ~/ S/ [& A 绘制圆柱螺旋线的AutoLISP程序代码如下:3 K. d; g* g) u: f& }. S8 S
4 `6 a" T+ o! l- d0 z6 c9 M ; This program is using for drawing a helix0 n( {& Z3 P7 C4 M2 U
) ]6 b- p4 V2 N9 C, E/ X( b/ Z (setq b1 (getpoint "请输入基点:")) ) b0 I! X( e: u5 `' I! K" K
; \! O! H$ q+ E- V+ b (setq r (getreal "半径 r=:"))$ L; K5 N+ }) S7 v. H4 R
+ Y9 Y6 e O" t. ~! x (setq t1 (getreal "节距 t1=:"))
5 j8 m' T* e6 ^; d" ^. Y' a# A, H2 g# x7 ^, ]
(setq k (getint "段数 k=:"))% T5 s$ Y7 h* u* o9 h8 z0 W& c: ^
! \ b1 z( U1 W4 | (setq n (getint "圈数 n=:"))
- y% L6 ^. ]3 c; n. |# B& ^8 L0 e# J% X E5 s5 h8 U
(setq ta (/ (* 2 3.14159) k))5 p7 h' G" I' }* d" L
* c/ H- ?& S% E* ?8 N (setq j1 (/ t1 k))
" m9 ]* l4 o. _- p( u+ y! I" g! c) m! t* b8 t( R
(setq a 0)' [: o3 F% q. n% S: H/ @# H
* d* z7 s5 ~( G! ^, J$ H; S (setq jj 0); b& j/ R% V# r! L" k4 z" v8 |3 o
; `. O/ P, v7 @' B0 h" K
(setq ii 0)+ ]& A8 b8 b& B5 {( w1 j* d% P
+ a) I( L& f/ q) {2 V" P (command "ucs" "o" b1)) w" J q# C' H, O( G% z
7 |5 x& R; I& G8 T' U (command "3dpoly" (list r 0 0))
; t$ u3 P) z& z7 G3 P
9 l7 Z! D- o6 {, Q E) }- G (repeat n: c1 K6 P9 H6 }. F/ U: n2 A
/ Y' J9 U$ h8 B9 ^- U) p
(repeat k
* e$ ] K* b. G% J+ _
+ R: Z* ^, C! O2 s (setq jj (+ jj 1))- x! l5 b; J; J8 }# ]
) C& v( z# a, I2 T
(setq a (+ ta a))
) g2 h2 d6 e0 U3 `, X- \0 m, D* B L: H" {* l: N5 z6 c6 `! b$ r7 N
(setq x (* r (cos a)))
9 {$ H" ]1 m1 W) w
: j- i9 {0 Z' Q, @ (setq y (* r (sin a)))& K. Q* M4 u5 u0 n. `+ D
; @& X4 a# y+ t A$ @1 m5 n7 f
(setq z (* j1 jj))
: i3 m0 I8 N, R1 L- Q9 H7 W' s1 {' x% m& l8 }& {3 v
(setq p2 (list x y z)). h" B! }; B( l# l
6 F: V) f4 U9 L+ t+ ] (command p2)
) E6 H6 @" q( t1 i
; p' x1 }9 I; t M# U )
, w8 p- h+ v/ R* v1 P2 Q2 ~* f& {$ r# H; o
(setq ii (+ ii 1)). d6 {) |( A4 S6 O/ B
, a2 j7 `) @3 s* x b: w7 l8 s
(setq z (* t1 ii))* ~( _' T6 C; T% v: H6 U* H
0 D: S' y! m( } )
1 t, P. g b8 G3 V/ {
0 n5 ? Q7 h% Z (command "" )- [! [* c2 o: y( S+ a5 l7 m, J5 q
" v3 w F: b( _; h" j' b
段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。- d( v8 }$ I- y H- Z3 i$ F; E$ \
在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。
% S6 y: u1 V. y2 s/ `; f/ A 3.4 程序运行结果
7 [5 V4 T- s$ ~# r: m; m: r! W% G" e( w p7 C, x
加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。
* v3 ~2 @( A2 J. t 4、 应用
" L) t) ]* I# L0 m4 X * 绘制弹簧 ?/ ^% R" g, ], g7 u3 i; A3 `2 Y" B3 M
在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。2 l4 V) F0 p3 P$ M2 [; D( b
我们绘制的弹簧参数如下:! {) x( J& f" H; L: O
外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。
$ y* t: x4 u. H2 ~+ h * 绘制螺纹# i0 y: q# Z5 v2 t# e, b
如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。$ J4 I$ [. u; C, M
5、 结论
) F! Q$ E) K7 H) B( d (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。
" _& ?0 y, r- R8 z- a9 `7 K (2)以前AutoLISP应用程序要另找文本编辑器编写源代码,然后回到AutoCAD中加载运行,不便于程序的调试。用Visual LISP 集成开发环境,我们可以在一个单独的环境中执行文本编辑、程序调试、与AutoCAD及其他应用程序的交互等操作,极大地方便了AutoCAD的二次开发,满足技术人员AutoCAD的二次开发需要。 |
|