|
|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、 引言
4 ^8 H5 a+ ]2 |: s1 t8 k v 在众多的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交互绘图结合,快速绘制三维螺纹和弹簧。
1 I; `6 J% H2 }* [6 r1 o" } 2、 问题的提出2 W' \2 J# K4 q9 @6 s
笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。: m: ~; k" Q/ |3 B3 H- N0 e
3、 圆柱螺旋线的绘制
" p3 N2 b1 V* g 3.1 圆柱螺旋线数学模型7 L" E. ^2 `4 O/ Y* i% v
* 圆柱螺旋线的形成
8 _0 u; x$ n9 S$ ]2 j. {# t 圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。7 N |! O% A( V2 g8 U3 W
* 数学模型
. h- e7 [ ^* Y1 N6 e a 当圆柱螺旋线的轴线与坐标系的Z轴重合时,
% ]8 B2 h( C9 b! p3 H9 ]1 E( p 圆柱螺旋线上动点M(x,y,z)的参数方程如下: * v9 }* T+ q/ _( A' g" I% Y4 J. b
x=rcosα
- [9 H; `9 ~2 H5 M* Z8 Y. S0 o y=rsinα
. Y4 n0 S5 E1 M" O, \0 c1 G8 D( | z=±t1*α/(2π) 8 B" A3 Q7 W3 P( ]2 x0 S; {
在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。
& {* r' b5 ~; i. L# l; a( o 3.2 程序框图
5 ^4 p1 K* B$ v+ J; _8 L 开始
# \7 ?) l; r8 E3 M+ ]+ r- y7 h: _6 e3 Y! W4 x
参数r、t1、k赋值
/ o. }/ ~0 }( S) v! p. s
* K# [) ^/ l V, S) n 给出基点坐标
3 ^' G x8 l/ ?, \6 T; c3 B6 l% }$ t$ X: o% \% g+ S% p
计算x, y, z各点坐标
6 z6 N2 ~ N+ Z8 K7 A$ F: ^% x
* `' ?& k W- P2 a# p 绘制螺旋线+ l0 @% S2 [7 V1 U/ L5 @% Q
5 Q+ f" g: D; C8 n7 | 结 束
4 y& o ]8 Z" N, T" e2 @% t) ] W4 |) b. R
3.3 程序代码
8 C9 A( D0 k _9 K n 打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。
" d- _1 Y1 w7 h" ^% m 绘制圆柱螺旋线的AutoLISP程序代码如下:
" A4 F' ]5 U* R) J* V/ s
' S* x4 P- E1 | ; This program is using for drawing a helix0 z. C& B; K' E5 P5 T, S" L5 v
& a, \3 T' t f7 X+ u* @ r+ s (setq b1 (getpoint "请输入基点:"))
9 ?2 s* a3 t2 \- A: Y' T Z
& Z2 F8 R/ o, f( Z4 { (setq r (getreal "半径 r=:"))7 V- R/ ]+ T9 T
8 Q2 ?# j1 ]4 R/ {: d
(setq t1 (getreal "节距 t1=:"))
! R, f9 j, s+ V! D- G
. P6 v0 n0 I7 ?3 U* c (setq k (getint "段数 k=:"))3 l& i e7 _- N# ]* m) [6 _
) Y c( Z- b% {! O (setq n (getint "圈数 n=:"))
# K4 D1 S* y* W3 e+ x( t. U* ]' s$ `. P& L5 F# H6 Y* n
(setq ta (/ (* 2 3.14159) k))
0 Q3 X. ^7 z+ v# K3 x5 S# E: o* e L; F( f h- Z
(setq j1 (/ t1 k))2 B: B( t9 s4 g/ r8 S
! H2 D6 k* \& t+ F
(setq a 0)
' Z& K) |: U2 O- {6 v7 [, x3 S+ C9 ~8 J; t- w6 E8 D1 P/ A
(setq jj 0) Y+ d0 B7 v. {0 X
. _# \* a3 H* t
(setq ii 0)
9 ]2 t7 X7 I0 l) g3 E0 V$ m* J; W0 S* `
(command "ucs" "o" b1)
) l, R( D* m. ]/ S& p% S9 Z+ h1 n% U4 ]/ Y
(command "3dpoly" (list r 0 0))
" g2 f& T! h1 j* |' ~* k0 _, T- B
/ E1 S* k' D( p, Y% D (repeat n! X6 m. G+ U# H9 o' o- D
2 e# x8 h" n3 [( ?, u (repeat k
4 d( ]! J4 n0 @; I% C* ?% [
. \: W7 C0 S5 L. [$ L (setq jj (+ jj 1))# f0 g# O' c9 q6 i' i
) n1 J8 z0 r) H- _. L' ?
(setq a (+ ta a))$ Y, p+ w7 I8 t5 [. O1 G$ k
0 n0 o+ O: V9 O6 L1 z3 B& C
(setq x (* r (cos a)))- w: u' u( y/ j7 i
0 Y& x3 T, v8 h6 V! U) K; u (setq y (* r (sin a)))
# _6 [/ v. y$ n* ^
; j, z, v( {7 `7 i& D% |: ? (setq z (* j1 jj))
6 l1 f; d: V( _! o1 _% q% P
7 M( f5 K' ]9 L; q0 W i+ M (setq p2 (list x y z))
: H7 `1 ^6 |% Y7 D% j
! _* Y9 y% s8 W8 `& W- {' t (command p2)
: s4 h% l9 B' _; x$ L+ D% |) A8 v1 T
)
7 ^3 _7 |- W7 S( R: U @7 y8 A3 G8 @. u6 Z1 o0 c8 `
(setq ii (+ ii 1))
. }9 P' k0 b$ C% W F; _
; Z7 z2 t) d8 r (setq z (* t1 ii))
9 J! i8 T R1 }
% k# o {4 J0 [/ d )
0 ~; R) U+ u( q1 a _9 i* p* {! L
3 g. U A2 e5 r4 G (command "" )* @# U# C& `9 j
( h7 K1 r% p2 g8 f0 C- {3 Z
段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。
/ {8 p( |8 i$ x* m+ P: U5 a 在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。6 |" b1 G+ S. V/ W4 `" ]' o# P4 }' Q
3.4 程序运行结果1 P8 I" O! a* Y, T7 k5 `& r: I
# y. x% |; s; {$ n( e- _; e
加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。. g& ?" m [% ^0 {0 t& N- q& x
4、 应用
& L1 j9 J- R1 x! Q% | V6 {( R * 绘制弹簧$ [( Z4 b+ u9 n, z9 f
在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。
! r ~% R, D3 P0 A2 [0 N- X8 Y 我们绘制的弹簧参数如下:* D3 y9 w& s, R
外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。
3 H9 v) V) m+ J+ J$ k * 绘制螺纹
O; s) _: O" F* T# w- ~ 如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。
$ j+ ?" a6 ~: ] 5、 结论: p7 f) ?1 a' r: v7 Q
(1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。
: H# W8 k, o! ?8 ~' r, V' k (2)以前AutoLISP应用程序要另找文本编辑器编写源代码,然后回到AutoCAD中加载运行,不便于程序的调试。用Visual LISP 集成开发环境,我们可以在一个单独的环境中执行文本编辑、程序调试、与AutoCAD及其他应用程序的交互等操作,极大地方便了AutoCAD的二次开发,满足技术人员AutoCAD的二次开发需要。 |
|