QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 3143|回复: 1
收起左侧

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

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

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

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

x
1、 引言
2 _' A- ]" k2 Z+ j, Z  在众多的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交互绘图结合,快速绘制三维螺纹和弹簧。
4 ^7 l3 M$ N0 G  s7 \0 W9 H6 b  2、 问题的提出
+ F1 k9 i- C. _" I/ [; G  笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。7 j0 ]& p  o1 C
  3、 圆柱螺旋线的绘制  c6 y5 |% S  m  `' a
  3.1 圆柱螺旋线数学模型: _7 {* p0 b4 `+ i. E' ]! h
  * 圆柱螺旋线的形成
' y0 b( n. P1 Q# a  圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。
: ]. C  T3 B& w, d' U  * 数学模型
+ D/ o. S' w7 c6 v7 s  当圆柱螺旋线的轴线与坐标系的Z轴重合时,    3 a( ?' f. L2 e
  圆柱螺旋线上动点M(x,y,z)的参数方程如下:   " ^# P  N" }( `# d  |. R8 O$ \  K
  x=rcosα                 
( q: g1 a4 b* d. S. a2 d  y=rsinα, l3 {0 r3 T* w" D6 B' ^% a* ^
  z=±t1*α/(2π)           * ]  V! }1 }$ ~, e, s3 {
  在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。
9 z1 E. _+ r# H0 J4 @9 @  3.2 程序框图2 W! D; p% Z! W; t' l: {# Y
  开始
& z/ l0 s/ i5 m9 M* _/ N8 E+ L, Z) n& z7 w6 I: U* d
  参数r、t1、k赋值    
6 N1 \+ T0 W$ Y. b5 y) f
: l% o; q7 U, ]; S0 t  给出基点坐标
) v' j0 J) U6 o/ E8 O4 z+ c9 S0 A$ W0 u4 G* b% P/ y
  计算x, y, z各点坐标
; R4 V1 E/ E6 n5 g+ W8 F1 ?, }7 Z; U9 f% X
  绘制螺旋线/ x2 w* x  D' \1 z2 }; k0 h

- y% z. H& o" D% y- N2 B- K; k+ s  结 束
$ l& M9 [$ z3 j, I6 d" P  X3 k; Y4 e6 n8 p
  3.3 程序代码9 O" D1 _: D- C
  打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。   
$ ~' d9 k5 x+ f' r5 v* l! l3 ~2 h  绘制圆柱螺旋线的AutoLISP程序代码如下:; g( {3 z# f% r3 w/ V5 A
. P# ~, E( T) l& L% c& F
  ; This program is using for drawing a helix
7 o  @3 E4 Z4 @% j( ~5 h! [$ E, B( m: H/ f% C2 ^2 i4 m
  (setq b1 (getpoint "请输入基点:"))   
! j# W% K% n# N  [! K! e! }: w! I4 u# g0 k7 t/ m
  (setq r (getreal "半径 r=:"))
" c0 D( ~% \, O4 ~: O& H8 X1 p5 l- ]  F1 W7 s. K8 R
  (setq t1 (getreal "节距 t1=:"))) P$ x3 r! H5 {2 W2 {$ S
( S' Y" ~( \8 O% f$ n% P
  (setq k (getint "段数 k=:"))
; d) T  a  C7 P4 [$ T# ]. [; ?6 o& H
  (setq n (getint "圈数 n=:")) 
/ D) e2 x, Y1 l  F- O+ y' V& Z9 W& P; E4 I5 c
  (setq ta (/ (* 2 3.14159) k))7 p$ D4 ]+ E/ ]0 _5 M: ~
7 g0 K8 ?" k; C+ e' N
  (setq j1 (/ t1 k))# e; X: y+ p- v" F1 C/ [+ e& `/ c
; @5 V5 K" z, A1 g8 [
  (setq a 0)
7 a& F3 u1 o. u0 L4 ^) u+ c$ g
" c# r. L1 o" b+ f% Z4 E  (setq jj 0)
( ]0 Y& f9 m6 }! T8 r7 P3 s- c" E8 Q- y0 `6 Q+ G
  (setq ii 0)2 C& r; W) |, _9 g2 G
. r) t2 O, [0 Q% S5 W* g( j+ f
  (command "ucs" "o" b1)
. A, m& A. J* ?3 p+ k# e
9 `& e. n  Y/ \% q  (command "3dpoly" (list r 0 0))
) _6 g9 B% d  A8 L! w! B7 R  `) D/ s4 p1 D7 B% D$ a
  (repeat n$ A3 F: R% d& n- z( Y4 c

' m3 q/ \# Y' B( c# c) w6 S  (repeat k
; E; @- W0 m% m! A
, c& {$ h1 x  ^7 x+ [& i+ p  (setq jj (+ jj 1)), \5 a( ]( @  p8 A1 P% X
7 ?- h6 p8 A  Q: @  G/ v2 \# w- H
  (setq a (+ ta a))
8 S+ H9 S# x7 O( t' j  K% N' ^( I5 J7 G4 I% D2 X# X4 u" [
  (setq x (* r (cos a)))
, c$ p1 M; F, e
. _2 b/ F( b7 ^8 n  (setq y (* r (sin a)))4 W. x2 _8 r6 v5 v* A$ z
3 L- i0 d) w! K4 a' ~
  (setq z (* j1 jj))
# U5 l" b8 J1 S, m0 ?) u0 _* E+ M4 r5 U
  (setq p2 (list x y z))
) U2 Z8 Y  U: Z& R1 u  ?6 q" m0 z: b) \& x: I, n( y9 T  Z
  (command p2)
- f7 N0 R$ a/ m# k$ a
4 @, `. F4 s  v% B  )
) I/ k7 Y% v7 `# {" D$ ?2 W& B8 Y- [  S
  (setq ii (+ ii 1))
* Y* |6 T; e# u
+ e( w, `5 R! y5 [! n% x6 Q  (setq z (* t1 ii))( i+ h  _6 D0 a  M/ D

8 g; ]! s; b1 t! J( {- D" B* S  )
3 B5 j" m- V! ]/ N& s. P/ ?- R0 R3 @7 S3 I  c# ~7 c4 _
  (command "" )  o, c" v% }: ^0 z
1 |$ q3 B/ G& h6 ]  ~
  段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。2 O$ M# Q" k. K' U0 c7 a' ?. F
  在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。  [% F" Y: ~# |# S7 ?
  3.4 程序运行结果. ~1 V1 D5 {2 e, U6 a9 N. ]
1 b" [! g, o0 }& x6 E' \
  加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。- Q- }/ I5 D9 e/ h6 b
  4、 应用 5 i% v' o/ U* `% @9 X
  * 绘制弹簧3 t' y; r9 B6 R7 U+ V4 f7 n
  在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。8 E- t/ q8 \: q) d5 ~' p' }
  我们绘制的弹簧参数如下:7 R; B4 |6 Q4 P- I! G# B" a9 Z2 X
  外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。2 [) |" ^) j* I$ f
  * 绘制螺纹
! }  W8 _# q0 e' g  如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。1 ^9 n! e8 h3 V- L. j( A
  5、 结论
7 ~, W$ T' _6 ~8 M7 C& z% |  (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。: J) B+ b' X3 G7 d: O
  (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 )

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