QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
1、 引言  b8 M. e5 N1 {( R: {9 H0 \
  在众多的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交互绘图结合,快速绘制三维螺纹和弹簧。6 o6 D$ F* i( a
  2、 问题的提出
* g; y6 z5 ?0 ?( U' h: b  笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。
! F- A5 ~' [0 C1 ]# E  3、 圆柱螺旋线的绘制& P; X. u: S4 M7 A6 M
  3.1 圆柱螺旋线数学模型
$ K. W& O# ~* ^; Q$ k5 Z% z  * 圆柱螺旋线的形成
& m( C( H3 q/ a* T9 }9 e$ L' }  圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。
: y7 c0 S4 @2 Z& J; T  * 数学模型
' u, Z' c/ ~; \: ~. h% A6 ^  当圆柱螺旋线的轴线与坐标系的Z轴重合时,    
6 c0 J4 N# s- q/ Q9 w+ ]% T2 A  圆柱螺旋线上动点M(x,y,z)的参数方程如下:   
( n6 {% N: Z7 D* _# Z  x=rcosα                  0 N% L& f2 w$ r
  y=rsinα
! v& u% K0 F! S! r# }2 k( d  z=±t1*α/(2π)           
& j, P0 Q+ A7 w% w4 W# b  在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。$ r3 `. g- ^, w; O
  3.2 程序框图
3 ]2 t8 Q( ?- ?% _  开始 6 L5 a/ H/ [5 G5 \; [& s
" k  y' W+ G5 h: B2 o3 d2 y
  参数r、t1、k赋值     ; M# _' V4 Y- k; z0 P: I1 L
# p3 K: K8 w% L# x
  给出基点坐标
# m* u/ \) T+ I$ e% G) i* V0 x2 f
2 f, z# A/ }4 Q0 u- f2 \  计算x, y, z各点坐标
3 D. a. b- B7 a& G. r  U" b7 ]7 S6 ~" x, o- w  I
  绘制螺旋线
& B  P' e& _% @% M) V3 ]
+ Q1 c  r3 G; {$ ^& E  结 束
+ G2 q: T! m) u9 C  l5 G8 \* T$ Y1 V$ @0 d: M' T
  3.3 程序代码' m; P* L0 Y) r7 \# [
  打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。   
2 R' N. |6 H' w' @  绘制圆柱螺旋线的AutoLISP程序代码如下:
6 D0 n5 M6 s0 p4 D) `/ \& a) H3 N5 q- L6 ^7 e* y7 X+ F
  ; This program is using for drawing a helix
) |6 [% F- p# c, E) P  Y2 v- D, T- V/ K( _8 i( Q/ h9 `
  (setq b1 (getpoint "请输入基点:"))   
1 ~7 q$ g; O. p! D. r, ^$ s
( h4 q5 z0 `& l4 Q) o8 L; L9 @! y6 o  (setq r (getreal "半径 r=:")). G& B. w+ {" v9 ~/ Z  S' z

% Z, z3 ~3 \& j+ A7 _( c  (setq t1 (getreal "节距 t1=:"))) A( P1 U2 A3 B: F( K' ^

) G# J0 F: B* N- J; {4 o3 m. ]! b, M  (setq k (getint "段数 k=:")). H% s. k5 B/ x: o8 l! C9 W
0 A4 @8 U: q0 e  ^3 f+ X. s1 g4 g
  (setq n (getint "圈数 n=:")) $ ?% C. s$ U9 b5 G' r

  P# W. |6 L0 P- `# K# b  (setq ta (/ (* 2 3.14159) k))
) {2 Q( o9 p4 v2 S1 T3 k0 i
- w9 g( {6 [; f  (setq j1 (/ t1 k)): |2 m( Z# Z2 ?, \+ G2 @
# L# Y8 |* l/ s( G3 X& F' ?$ p
  (setq a 0)
/ ]6 t# Z, P% S$ K$ A9 o' X$ d
! Q# |# o5 W! }9 x( U. H  (setq jj 0)
3 ~9 v) Q: F( _" J
' b0 [& m( z) P1 x  (setq ii 0)
4 H6 S! X5 z" c2 L
5 f: t1 h3 @; ?7 _* [  (command "ucs" "o" b1)
- T) n+ y. ]! ~. t% Z- V) W' v( x3 t' \: e
  (command "3dpoly" (list r 0 0))% b, W0 P5 V: _

: K, n# S+ z* h  |  (repeat n- W1 H9 i) X0 X  N- P

9 q& M9 R0 i- C( u: [  (repeat k
/ C# ^# `- b5 o% {5 h& e- [
: l+ L. G; |3 S$ L" y2 X  (setq jj (+ jj 1))
+ X+ [, J  f" y& k0 w' T/ w( w
, Q; v3 |4 g# ^7 ?  (setq a (+ ta a))  I9 @( k8 J) g  ?' x
" E8 _$ V4 c+ p" g
  (setq x (* r (cos a)))
/ F# }/ Y( s: b; w& t* Q& K! Z/ _* }: a2 m& u# K5 w# ]$ ~& c
  (setq y (* r (sin a)))
2 L2 J7 _4 ~% L5 v) ]& @* m. m% ?9 s( l1 W4 C
  (setq z (* j1 jj))
3 m6 q% ?$ L* \- ~; Z1 a; ^
2 B) ^3 m; }5 k( k9 m& Y/ B  (setq p2 (list x y z))  @# }% A3 X; v/ T
" I, w+ s) b7 L$ l. b
  (command p2)0 i/ n: P/ k! C/ X% W! @
8 |" Z" h& ~: J4 M; Y3 p
  )# K, _" S3 H  H) P/ N

0 t( d: K& a9 }+ z2 y, A  (setq ii (+ ii 1))
3 S+ W0 g1 a, }! k2 _
# l" n- w6 P+ c6 m0 j6 I% L  (setq z (* t1 ii))
1 F$ A% k! X. H5 O) N1 A8 I4 X' ]3 H' j  ~, t* l0 l
  )+ y7 K$ W$ u. K, `% ?  g
% }: ?6 X, i1 G# z) r
  (command "" )( u( E2 B6 G# C9 ~. Z* L
8 O" o' t( D0 a# K7 _/ G
  段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。8 q6 b7 r$ Y, z8 ?
  在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。
2 Q8 Z4 l: i8 {& O3 r0 {0 D0 N+ E  3.4 程序运行结果2 p0 C6 m8 @: Y+ @6 m  T" c2 [
- [0 ]+ l& U1 ?6 e* _( G
  加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。
" D4 A1 Y- T; i: K/ [2 Y  4、 应用
+ i, x6 d7 p2 P! S5 V* F& [/ ]  * 绘制弹簧
. ^% W9 m" I* O0 p  在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。
3 M  D1 D. P, q4 M6 `) m  我们绘制的弹簧参数如下:  l+ o. a% C; J3 d8 Y$ M: a
  外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。
  }) p- X4 y( e. Q  * 绘制螺纹' v2 _/ M  m; S) ^
  如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。8 I2 ?7 \! d# |0 \$ Z
  5、 结论
9 D4 q* ^# ]4 m" e7 t  (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。
: W% j0 L( N% F  ^+ z. p, 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 )

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