QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
10天前
查看: 3092|回复: 1
收起左侧

[分享] Visual LISP开发三维圆柱螺旋线程序

[复制链接]
发表于 2006-10-9 09:27:56 | 显示全部楼层 |阅读模式 来自: 中国江苏常州

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
1、 引言( ]' m% J/ s% X3 O& ]6 Q+ X
  在众多的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交互绘图结合,快速绘制三维螺纹和弹簧。. b: O# x& S1 M
  2、 问题的提出0 ^! q+ g6 f' D9 x6 y. x1 y
  笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。! q$ J5 t9 H9 _: L
  3、 圆柱螺旋线的绘制1 t5 p; |1 t& \! J! z: ^& p
  3.1 圆柱螺旋线数学模型5 W; ?  }5 E! t; O* d; l, M2 {
  * 圆柱螺旋线的形成2 w; A, K3 P( ^) M) i9 B
  圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。
; K% I& o$ U( y9 ^" @  * 数学模型 4 N9 _+ k" ^, T. f; y! z& ^
  当圆柱螺旋线的轴线与坐标系的Z轴重合时,    
; p( R6 t0 p4 }/ z( z  圆柱螺旋线上动点M(x,y,z)的参数方程如下:   
5 W3 b. \7 _: O' t& l0 u1 M  x=rcosα                  " H3 f& B9 l! {
  y=rsinα* K1 O' w/ @) Y2 [: m: p& r
  z=±t1*α/(2π)           1 ]% r: X# O0 u7 w8 O9 q
  在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。
1 }3 R6 w8 [; ?& ?+ a  3.2 程序框图9 q; L# w) \, ?  w6 U! T
  开始 ' e6 t/ y; G% n8 H7 {1 }9 Q& a" u
, B# \: `3 Q- C3 n3 A, `1 o" g
  参数r、t1、k赋值     " b+ ?, J! X, I% G" @

  O! h' j/ A) \" v7 t  给出基点坐标
7 b' d3 Q; R7 Z8 p6 x7 n. Q
" |, k: W8 ~2 _2 d7 d3 x" W6 I5 C  计算x, y, z各点坐标& j  G7 ?2 J# x! ^( ^! T  j
+ W. o/ ^2 y6 D4 y
  绘制螺旋线) i& q" \1 O7 i0 }3 P

% I* s+ x+ J/ J2 {: z7 @  结 束
0 Q  c, K. Q% c0 [# R
6 K# f" v  V, n# C  3.3 程序代码
$ ~/ J6 @) S- i) m' b# n8 C  打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。    / O, Y, [0 Q. q. P, Y8 F0 F7 J
  绘制圆柱螺旋线的AutoLISP程序代码如下:# B8 [( D  j6 m1 S) w' D( [' E% j9 l
  v* R% n& O! A
  ; This program is using for drawing a helix
. [8 ?) a" o4 @* y% E6 T. N7 Y% }- b- t1 x  ]1 m3 W$ k. M& n5 t
  (setq b1 (getpoint "请输入基点:"))   
% F8 p+ F/ h' h5 m0 l
) }2 g1 G* y, y7 h* G+ @  (setq r (getreal "半径 r=:"))
3 n8 {# ^( L1 G2 H, W- X2 [
6 r1 n2 R* ?7 W; q9 e  (setq t1 (getreal "节距 t1=:"))( B1 E! `5 J" R6 `4 ~, f2 O

- Z& m0 Q( C( i8 P7 B  (setq k (getint "段数 k=:"))
  C7 n( Q- D9 [; @6 Y0 s6 S& z7 Q# g# i
  (setq n (getint "圈数 n=:")) % L5 m- q' D* G7 D: m% q

2 Z, j: n- x2 m; p" g  (setq ta (/ (* 2 3.14159) k))
; B) H3 T5 }; F: T- B" i
4 ^. S2 k! I( g: Y/ q  (setq j1 (/ t1 k))2 t: |: y4 q( b* `! `3 T6 [
% x. O- y3 r/ J
  (setq a 0)) b2 a8 ^' O2 I% R4 P5 _: k
! [9 `: y& p9 R$ f' d' p$ U
  (setq jj 0)9 R7 o, l1 H: R5 E" P

7 q4 W7 U. ?. b- y: k8 f) J  (setq ii 0)
; _5 |4 P" u! ^' ]2 z- ]( u9 @1 N% S. S) S) C
  (command "ucs" "o" b1)
: q3 A) G3 m$ Z: q+ z
3 P- Z. ?7 W9 L  _' ]4 C- o, Z  (command "3dpoly" (list r 0 0))  _  u# _$ G4 t7 ?

# U8 o" J7 S5 d4 f  (repeat n
. ~' i: l3 ]: q2 N: k! O; `# b* d/ P2 h
  (repeat k
: z" e7 ~- ]9 A. A: _2 h1 S) w3 Z- }* E6 p1 e
  (setq jj (+ jj 1))) b& n8 g& P, c
$ \1 q. ~$ D5 X0 R
  (setq a (+ ta a))
: A0 s/ u' `. c- V8 Q. r3 Y/ B1 C( x* `' E; T/ A1 g  n" F
  (setq x (* r (cos a)))
# ~3 i" }1 |8 n- R
* k- b' y' V% G; M  (setq y (* r (sin a)))2 H. u. H0 ?. t) {7 n
: \  m( B  b0 r3 Q+ K, m
  (setq z (* j1 jj))% a# Y4 o8 U# b( y3 R

8 u  C$ v5 S. z( G8 i: |  (setq p2 (list x y z))( u  Y- a2 F6 x& d( W

' c, Q0 e/ N2 r* ^4 S* b! E) {  (command p2); z+ V- C1 g& i; f% C! B/ ]6 b7 `
! t* K- H# ]* T+ e, _
  )
9 @! u. V: B; B; v7 v0 [1 e! N# Q! q
  (setq ii (+ ii 1))* j4 _, Q; X% b9 m& ?) N
; I. l; ^- B* A$ v  b, J1 n+ ^
  (setq z (* t1 ii))7 w& H0 v' l7 j  p) o

+ m2 ^. O* T+ k  )
% O6 }3 W2 e8 b: a0 }. h$ N3 e$ t& f
  (command "" )
* {5 z) |2 L, A1 [1 A- I+ Z: @
  ~% _5 \- C4 J3 t  段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。
, i. t" V( [2 L* m  在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。
$ l: q: Q2 o; r6 z9 M4 x) s$ N- c  3.4 程序运行结果
2 z# J, D4 G* W7 t% i% p: U2 b5 F0 ]
  加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。
7 Q6 l0 v7 c  K0 p  4、 应用 2 a) a7 w6 v2 {/ p
  * 绘制弹簧6 n* A% W8 y& j3 @) ?9 k; X8 z
  在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。/ l  H% N& G/ h) k
  我们绘制的弹簧参数如下:4 x0 Q; F% X; i( V7 \! N' y
  外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。
. D" A% x- N5 e5 H  * 绘制螺纹
" d9 Y* H. R( @+ \  如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。
) T! M# m# H; T) H/ ]  5、 结论& d+ A# C! \) Z' ^: H5 h: N
  (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。6 L$ [5 \' y, l% |/ a
  (2)以前AutoLISP应用程序要另找文本编辑器编写源代码,然后回到AutoCAD中加载运行,不便于程序的调试。用Visual LISP 集成开发环境,我们可以在一个单独的环境中执行文本编辑、程序调试、与AutoCAD及其他应用程序的交互等操作,极大地方便了AutoCAD的二次开发,满足技术人员AutoCAD的二次开发需要。
发表于 2006-10-31 22:58:37 | 显示全部楼层 来自: 中国福建漳州
主要用来做什么呢?在哪个行业
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

快速回复 返回顶部 返回列表