|
|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、 引言
7 C7 {' Z7 G& K4 q 在众多的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交互绘图结合,快速绘制三维螺纹和弹簧。
) e r* K- o* F1 j 2、 问题的提出
A* V( t! N: N# K8 T1 \ 笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。) ^" a K2 Z7 U
3、 圆柱螺旋线的绘制, W, X* L/ x$ O% t X' X
3.1 圆柱螺旋线数学模型# L+ T! T7 p7 S2 e1 k! |0 p6 m
* 圆柱螺旋线的形成* ]/ z' I1 j+ J
圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。
* R# r. a2 ^/ _8 \6 K4 P0 | * 数学模型
( |- b8 v8 _1 O; @ 当圆柱螺旋线的轴线与坐标系的Z轴重合时,
! ]" s9 \3 Q1 ?( u1 u/ A4 W 圆柱螺旋线上动点M(x,y,z)的参数方程如下:
3 G6 s1 [8 {/ l6 k+ u d x=rcosα ; X( M' I2 u, S9 Z8 t- w
y=rsinα' g% B4 a) {% i$ ?
z=±t1*α/(2π) ! Y" d; i" l2 R2 C7 t. |1 w& A
在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。1 s7 o4 |- ?) r( y
3.2 程序框图- G( q* l! F) i
开始
- S. D2 H$ h' s
) ~; L2 B/ }* U. ]8 _1 [0 | 参数r、t1、k赋值
- ?$ b" [1 | T3 ~& s/ b
8 y7 H" j! [( B 给出基点坐标
, y7 e) |1 I: }. Z0 _
5 J" a, x8 b4 t6 f3 M% C& | 计算x, y, z各点坐标
+ l9 Q1 U" R) L- a1 J# J# V& u8 w2 d2 Z1 p) \+ P; \- t
绘制螺旋线
" e6 B7 t: U! o3 [% j' A$ B. u8 k' n: L+ ^, k
结 束 V f& ~: S& E2 n5 j
& p. }/ A A! J; h; e$ _; K0 p6 i
3.3 程序代码
6 v r) ^% p, b; n. K9 G 打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。
- w, y( X5 N3 M: |1 D 绘制圆柱螺旋线的AutoLISP程序代码如下:
: w/ H* D2 Q; }1 W1 ~0 w0 t4 l7 C6 G- G2 y- T" E9 { @; p
; This program is using for drawing a helix
/ l2 c9 Z9 v0 z' F/ L" @+ H6 |# ^' N$ C% t+ n
(setq b1 (getpoint "请输入基点:"))
& g6 }- e3 Z% g+ x C, m4 _5 Y7 d# V5 v6 c8 \/ D3 t0 C4 B. U
(setq r (getreal "半径 r=:"))5 q7 A- m2 ~1 ^0 h( _% S. y
5 p4 C& V! I8 S" B9 @, F7 W9 { m
(setq t1 (getreal "节距 t1=:"))+ h; p, v: f; X4 l* }5 s7 N
' Z6 t/ |( P% o
(setq k (getint "段数 k=:"))" d2 g5 h6 c0 P* Q& R2 ^
: t0 d) [1 I: N! j0 B (setq n (getint "圈数 n=:"))
- J# f# l: r. V) ^1 B1 h! E" v+ L2 d+ j8 ~, L+ E& m
(setq ta (/ (* 2 3.14159) k))! Z4 E/ s5 ~5 W
3 N! l, Y, ~) ^* j) ~& _
(setq j1 (/ t1 k)), Z) \ ~( h& b/ d4 D' g) X. c& T
/ f3 M& k: j) F' ~ (setq a 0)" H2 Q* G1 L& x6 f
- x8 l' T( T. |+ H r Q' |* n
(setq jj 0)0 U* x& i3 O0 a5 O% v0 b: k
# y g1 A- _+ c3 z! x' w- ] (setq ii 0)
. ?1 B/ I% h% X; e4 a( M0 B4 U# B3 d* d. q* @
(command "ucs" "o" b1)0 @. }, S- }2 v
4 a3 n- b6 q+ v+ b' F1 D (command "3dpoly" (list r 0 0))8 I3 _4 _: q7 o0 Z8 L( R$ m5 r. S/ j
, e+ ^+ N; [! @7 \, C2 Q+ O
(repeat n
' |' _ _' U9 h& E) i' `- w
8 O, V3 Q& _& V6 a; \ (repeat k9 ~4 ]$ U& k- m' L5 M' ^
7 _7 q% Y5 z* s( M: M (setq jj (+ jj 1))
$ Y$ m4 j9 I4 ^7 d
0 a- V( a& @. J7 [; Q (setq a (+ ta a))
0 R4 [5 f- Z/ S- I% Q
\' ^; h8 i0 z+ R5 {6 g (setq x (* r (cos a)))
3 G3 W: i0 O F) p' |. X* F' c# _4 }$ o
(setq y (* r (sin a)))% }; E; p0 ~( Z# @% Q2 }5 \, y
5 g( j/ y+ n3 z$ v! {
(setq z (* j1 jj)), K) v8 a K% L% r
: {4 R& ~- \4 v (setq p2 (list x y z))
$ I3 O0 C6 n) G1 N# \ S/ n! l" D$ x6 S& b! u2 v
(command p2)
c6 B6 Z) w6 s( Y2 k9 S
3 |; ~2 s! j. L ), ?+ ~2 {, u1 K; x ^- d' }
. n# o0 ]- z( r9 ]+ a
(setq ii (+ ii 1))- f' F& A6 g' a0 l. @* H
( D j' g# a( Z/ p* Z (setq z (* t1 ii))0 C6 @, D$ [! |' d+ \+ ?, S
5 v* R1 \5 c/ b3 A* I- ] )* I: h6 j# p# H, t/ [
) M: Q2 K7 x' O x7 c# O& M (command "" )
* ?0 m& ~" R, }+ w0 @. u K/ ]1 R+ K3 c. ]6 K: A: h u
段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。
# I) ^6 Y$ {& Y$ `" J( t+ E1 `# z 在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。) Q* \( ~1 |9 R4 A
3.4 程序运行结果
9 G. E: m3 G& P! X. @. z
# ^- Q! v% t& G8 l+ \ 加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。
" P& I2 A* g9 R( U. u' x0 ? 4、 应用 : t4 l4 z$ A3 b: ~0 f
* 绘制弹簧
& R1 I3 \( ?6 J* o 在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。8 W0 u" d; }$ X0 H9 q$ o6 J+ k
我们绘制的弹簧参数如下:- A; t+ U0 ]) P9 b9 G/ K5 p3 i3 I; M
外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。9 c& p2 ]* R, l- }. _
* 绘制螺纹
% @9 c" s" y! N 如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。+ S% ]- l( w. N- e" Y
5、 结论; J/ G9 G* H U2 t( A* u
(1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。0 ]0 X$ z6 } m0 y7 z' n0 s
(2)以前AutoLISP应用程序要另找文本编辑器编写源代码,然后回到AutoCAD中加载运行,不便于程序的调试。用Visual LISP 集成开发环境,我们可以在一个单独的环境中执行文本编辑、程序调试、与AutoCAD及其他应用程序的交互等操作,极大地方便了AutoCAD的二次开发,满足技术人员AutoCAD的二次开发需要。 |
|