QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
6天前
查看: 3137|回复: 1
收起左侧

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

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

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

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

x
1、 引言0 F& T( F4 F( 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交互绘图结合,快速绘制三维螺纹和弹簧。
5 L5 h# B+ ]9 m8 m  2、 问题的提出
* X( e' @3 Z- q' n+ R2 I  笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。
8 A# H9 t6 }4 z1 \. M  3、 圆柱螺旋线的绘制1 d4 D# E: s- `1 l
  3.1 圆柱螺旋线数学模型
/ C/ n' R/ t  h- L8 k" K5 v) e* |  * 圆柱螺旋线的形成" g5 V8 C0 _- c4 m
  圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。$ ^' T" s. G" q- u6 r) z: F& n3 F8 D' ^
  * 数学模型
3 O/ R( V" ^1 `# U* z' I# ]; p; Q  当圆柱螺旋线的轴线与坐标系的Z轴重合时,    1 H( o1 e- e- z: k3 D6 u
  圆柱螺旋线上动点M(x,y,z)的参数方程如下:   7 P$ l5 M4 u3 I0 I5 j
  x=rcosα                 
$ h$ C' F* T3 x  y=rsinα
0 y+ k9 J+ |( ^& O4 J4 u  z=±t1*α/(2π)           ( K( x+ j  c4 v+ I- l# N3 C, J5 G
  在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。
1 D! Q# p5 w+ J  `  3.2 程序框图& k- y6 F' A" q2 W) w$ i1 M$ n
  开始 ; q" s& P0 |8 X

1 {1 d0 N, _# [! D$ V  参数r、t1、k赋值    
. W7 ?/ D: f9 q+ l3 o2 x; a9 M! H) V' x' c
  给出基点坐标
# b* |8 J1 ?% D$ s$ c
3 O$ ~  U4 Y* a7 q  计算x, y, z各点坐标
" n2 |# }0 @# S3 [2 Q* e
$ @6 e# Y  ]' j1 t: t  绘制螺旋线! j1 V% Y7 }. w3 s8 u7 z; D7 x9 h

! u% o- O3 m) H) \6 L# R% X) o( S1 s  结 束
) A, g4 u2 @9 _
3 t  v- Y3 b( o: F  3.3 程序代码9 z( S5 B0 @4 M: r! i- d
  打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。   
0 L6 k6 s' I3 e  ^( V2 X  绘制圆柱螺旋线的AutoLISP程序代码如下:7 g) u& ~) r  ?+ e
8 M- j3 T- o. |  S% E
  ; This program is using for drawing a helix
  h+ K3 W+ Q, Z
% L' k) ~% |! D, p. F, ^5 a  (setq b1 (getpoint "请输入基点:"))   / v. z# r1 n) Z% j, N

$ A" i9 E& r* l( \. `8 D, |  r  (setq r (getreal "半径 r=:"))
+ N8 |; L8 _) C. y1 l9 c0 @0 @2 w- K. r3 ?: w% {/ q+ u5 j( C& A
  (setq t1 (getreal "节距 t1=:"))9 _( G6 Z5 ?2 q5 U  ~; J- K& G4 m

- @" J1 \  |* v- I" d  (setq k (getint "段数 k=:"))
7 q  o$ k- ^" g$ [" j* R
+ @$ r! d  j6 J. N& ]  (setq n (getint "圈数 n=:")) ! ~* Y1 ]/ ?( P

; q; S4 p8 e: J8 M; H& h  (setq ta (/ (* 2 3.14159) k))0 A2 A1 k& E( t. W- l

$ v, Q$ M* \+ S9 a/ V  (setq j1 (/ t1 k))
9 m. y0 q) _& N: ]
3 T+ I) [8 m7 n  (setq a 0)' U3 z6 F( b/ A. ?0 j
1 D! a5 z9 m/ q: E7 i" k( V% u/ V
  (setq jj 0)- K6 w( e  m1 F6 }- U1 N; P" Q

- p. k- ~+ d' a  (setq ii 0)
& \7 o5 `1 _1 f' L
* c4 J8 p4 G8 W4 X" y0 y# s  (command "ucs" "o" b1)1 }0 z( g8 r: Y! E- P0 T0 t
% t" @+ ]* k0 U( q
  (command "3dpoly" (list r 0 0))
$ \: a; |! g) E! ~
7 ]8 b! Z9 D0 s: q  (repeat n! B! y4 \; j  H0 D

, M4 u3 [4 u- m9 [$ _; o8 h  (repeat k
" S4 L6 H( [* M/ v* {$ W6 D
8 e/ r+ B( i" W# P. k, P  (setq jj (+ jj 1))3 A  G* o" z7 `, Q5 e

) {1 \; [! E9 u% F% ]7 h2 J# f# b7 r  (setq a (+ ta a))5 I9 I) y2 v  v% l. C# l- |

$ J2 J3 F4 K: e: k3 B, s/ r7 w; B  (setq x (* r (cos a)))6 {$ K0 ]7 J# }) q. d/ d
1 [' \; I% m; B. Z. Y6 O
  (setq y (* r (sin a)))
! H. h! A- t- r6 b5 y
% [: L; m! s* ^+ D- P  (setq z (* j1 jj))
- I, S6 J6 `8 B: i: p+ |9 j3 H2 j* L/ C, H8 W
  (setq p2 (list x y z))
! S6 D+ j! [3 M+ ?' T( y8 ~* [0 ?/ |# D# z/ L
  (command p2)
  h) A) s, r1 l- e5 |  _6 m* i! [
  )) O, u0 p$ |1 p% Q
2 ~" F/ I% T8 A. _2 y( A" o: n  C4 T
  (setq ii (+ ii 1))
' y% f) m" ~9 G+ P6 y& h4 P. Q
7 A9 A# K  x: t; T/ c9 Q; n  (setq z (* t1 ii))
( D. q( M" o1 L& p
) T9 e  b# o# K  g% h1 A  ). v9 ]! T2 U5 c1 `9 {! Q
  X' j9 q3 E' T% O! K6 {1 m
  (command "" )
4 u8 B! @- I  Z1 s2 c, b" x7 i: @* n7 Q- x" L3 L# X
  段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。, t  S! }6 H2 J1 c6 C% ^% ^; x
  在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。/ B* y6 a2 A% z9 l) h
  3.4 程序运行结果
$ J( a/ u+ V; r1 P; |
. s7 n! C/ u, ~' T' S  加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。
# g( b# }* h# R$ G. h4 l, j& ~5 |8 I  4、 应用 1 s" f: Z0 Z" [! C4 U' J5 U# ^! r
  * 绘制弹簧. h1 l9 T% E, B: N! f
  在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。
- z8 B2 C" X! i- o# h  我们绘制的弹簧参数如下:
3 j* y' P+ x' t; ~4 @5 s" H  外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。0 m+ T$ x  R, B( y
  * 绘制螺纹
! C0 k: x- L( y4 G  如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。, N# w/ n* U3 C1 N9 F
  5、 结论
- @5 B! D2 k2 Y4 y  (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。' z) ?3 q: o, k, C8 y2 E' ^
  (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 )

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