|
|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、 引言
+ H' e4 K0 r+ H9 s; Z+ `5 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交互绘图结合,快速绘制三维螺纹和弹簧。
$ m" L+ L0 j2 X: I 2、 问题的提出6 C8 c `9 |* P3 g) E; I6 \: m
笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。
- @% j0 c) U0 W 3、 圆柱螺旋线的绘制" V4 u% L. G) C, E3 b
3.1 圆柱螺旋线数学模型
7 g, p0 X, x& v4 d7 K6 L * 圆柱螺旋线的形成
, c/ k8 g( b$ | 圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。& K3 b6 }, G; b. W O3 @
* 数学模型 1 S8 ?3 r$ Q9 T; j% d
当圆柱螺旋线的轴线与坐标系的Z轴重合时, * ^ c1 ]/ l6 m+ X: Z3 q% X! q. r7 F
圆柱螺旋线上动点M(x,y,z)的参数方程如下: 7 g+ s; J* s }1 i
x=rcosα
! D& O1 v- J; J8 {2 R3 T; { F y=rsinα
- Z x& _5 X$ g1 J# x; j7 s$ X4 c8 b z=±t1*α/(2π)
, h% B7 C( f" x$ N# \ 在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。
9 Y& [% [( V: w 3.2 程序框图+ Z% F* O0 S _
开始 & \8 p# \) g0 D- V
6 u* u V+ f9 e/ n6 w4 U 参数r、t1、k赋值 8 C4 H$ ?; S3 _2 Z! g* X. \: z# A
3 r* K9 u6 n, R# i: |, C/ M/ E2 n
给出基点坐标* @, P+ B3 T5 S
/ ?3 w7 x% s" R
计算x, y, z各点坐标$ O- E: p' D$ \
. y- ?1 V, m' o7 t
绘制螺旋线
3 T8 ~; [$ L( C( i- b# ~
: J; L: S. ]/ s& ~ 结 束1 {1 J' `2 w; |% R1 z2 W
) q5 |* y5 J1 p2 G- a 3.3 程序代码, R% W+ z0 S0 v! i& H& r
打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。
- R$ l1 N8 D$ S7 u- i- k 绘制圆柱螺旋线的AutoLISP程序代码如下:
4 E2 U1 f! t$ j* ~( Z5 M4 N* ?3 O7 J _& Q7 {7 T7 z
; This program is using for drawing a helix
3 C- i% R8 z( l# F. a. C) D/ _) p
1 ?) _, L6 I' C% ?6 E+ T5 \ (setq b1 (getpoint "请输入基点:"))
& }& s. t) a8 ]1 z f, N( \( l7 i. U6 S7 S% @
(setq r (getreal "半径 r=:"))
! C' w' u8 _# q1 r( e4 R7 e+ }, K3 ^
(setq t1 (getreal "节距 t1=:"))0 y6 _/ b% H6 Q$ m3 _5 S) y
. M7 m2 {6 W% l' @5 ]; L L (setq k (getint "段数 k=:"))
$ u0 e: k; ^2 n" N9 _$ T
1 h5 u7 ]4 b% b# C$ H# \" U (setq n (getint "圈数 n=:"))
u4 v2 U4 Y; U0 ~1 v7 m. t: K: M3 C
3 I( N2 o" {& J. L (setq ta (/ (* 2 3.14159) k))
; o* Q- M. g; ?, U4 [; \% W7 k2 V, u0 J# s+ M7 ^3 y% o# G
(setq j1 (/ t1 k))
3 q& y' a& w1 j% [4 o6 F( ~. ?
: U) P( t! E1 j8 n# @6 s (setq a 0)8 R/ ^- f7 O( h$ k" X1 }$ Q
! V( k: {1 w0 ] (setq jj 0)
. m/ R* J4 A. R& t( X- V; w) Q/ ^7 o! ?, i7 [
(setq ii 0)$ }6 a4 w W# P, }- N9 p- H
) ^0 s* z! v/ `. P
(command "ucs" "o" b1)) y: t, K1 m9 ?0 ]. a$ {* t" ^7 p
# b/ x' F7 q0 {: `# F% [' y (command "3dpoly" (list r 0 0))
/ w9 X- _7 w* U3 ?% [4 X
. Y- Z# m& \$ O+ R H* ^5 h% O (repeat n: j2 o V! \0 y0 N' d: D
; I! q) t( R' ?, W" O4 y! K (repeat k
, t5 p- ^( z9 p& w( v% ~
3 p5 X* S) h4 Q/ Q (setq jj (+ jj 1))4 V: c; `9 `5 i, s
& ]2 c% V& R7 j- | (setq a (+ ta a))! `: z. g7 N) h" g; l% _, |6 F. U. N
4 U9 ~+ e+ E1 p" v (setq x (* r (cos a))). J0 j/ b5 D5 A$ L) n4 y! n
6 s1 e7 J! d( X5 Q
(setq y (* r (sin a))) M% Z, c7 R, B7 E9 D
% x0 F; l' p4 T% f( d# o
(setq z (* j1 jj))
3 }/ S# \. z- d) j* ^* R, q
" l$ h8 ^2 z) l, f( l# ]( M (setq p2 (list x y z)). l8 [$ x. W. T {& n8 Z2 i
8 n6 X8 y7 j$ o& ?5 s% A* `
(command p2)
/ ? }( }: U, p9 u) T
: M" K8 o4 Z+ X) q) m. {, i, i9 { )
9 o' v S& e2 z' d
+ e2 Q2 O/ S# z! X- z, b' O (setq ii (+ ii 1))/ Y8 W* P9 t: D+ W3 k6 V- ~
* v( Z' }4 d' I8 H (setq z (* t1 ii))
; ?/ {/ a0 _1 ?3 q
3 z; j$ w, G3 v; D! i7 U* t; P )
" `8 e$ z" x" Z2 @) u; j# e$ H$ e: r* f
(command "" )+ n' Z' z2 l/ B: R1 G3 f, C, u
6 w) O2 l7 ~7 S9 o" n1 w 段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。
7 T8 u0 `) m0 Z 在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。1 N% [7 r6 S7 u8 a8 m
3.4 程序运行结果
$ v3 C3 E* G4 \. z/ H
7 C4 e* C9 i4 Y6 E 加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。
* b0 Q; c h! X0 ?1 l 4、 应用 : I9 h4 a5 k& b i- A
* 绘制弹簧
! U' a1 ^" [3 t l 在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。% d) b% K5 F) i
我们绘制的弹簧参数如下:8 _8 z" R" q, j. F# \5 k& Z
外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。
4 K; b5 s+ l' P) b/ I * 绘制螺纹) m: h* a4 \% ^, q8 R# S
如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。" O8 O x" [% s5 M. }: K2 v
5、 结论
: C, \5 l. @6 e. f (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。
: X& d9 N' m6 Y4 _3 ^( A& p (2)以前AutoLISP应用程序要另找文本编辑器编写源代码,然后回到AutoCAD中加载运行,不便于程序的调试。用Visual LISP 集成开发环境,我们可以在一个单独的环境中执行文本编辑、程序调试、与AutoCAD及其他应用程序的交互等操作,极大地方便了AutoCAD的二次开发,满足技术人员AutoCAD的二次开发需要。 |
|