QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
1、 引言
% E8 h: A' e  e1 j* m+ I# n  在众多的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交互绘图结合,快速绘制三维螺纹和弹簧。
- S$ f7 f- c0 l/ ]$ N2 P  2、 问题的提出
2 n& `2 S2 z( f6 W" t0 q5 L2 A2 u  笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。( {( `  N, }# K. v4 O
  3、 圆柱螺旋线的绘制
& A! c, k5 p6 T1 v  3.1 圆柱螺旋线数学模型, v! Q5 _, n; }9 W9 Y( T
  * 圆柱螺旋线的形成
- y, ?- _6 W, X  圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。
( a' S% [* G7 q* n  * 数学模型 ) Z4 v1 o3 N4 C5 @# V. \9 G
  当圆柱螺旋线的轴线与坐标系的Z轴重合时,    
# I& W# K- h0 K4 d  圆柱螺旋线上动点M(x,y,z)的参数方程如下:   # k  O- g2 r/ b1 o, V
  x=rcosα                  5 \9 k: M0 N$ [  P- d
  y=rsinα
0 Y7 k! }) h3 d  z=±t1*α/(2π)           
% |* q2 @8 X% l4 F+ s  在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。
; Z- X2 ]$ `! }2 w+ b  3.2 程序框图6 q' Y, s, W) X! [
  开始 7 {9 _% e4 A* ?! i# C
% p; Z- c" J" S0 w
  参数r、t1、k赋值       s) x0 d; A. f9 f4 W: q. b. f

3 G* Q2 i! u& o  给出基点坐标. U0 c4 o! W) o: ]
4 i! a( c4 O4 Z0 f1 W4 ?, I, n
  计算x, y, z各点坐标6 C3 @/ b* w4 r4 Z

( d% u2 w# F0 b, P" k  绘制螺旋线
4 q. z. K" r( H7 w+ t, b! b6 {2 G5 o- F  H
  结 束9 |. B& o  I, `, J5 p) s" t# ~- R

/ k* |; D7 g5 m$ J8 L  3.3 程序代码
- L! T6 D0 A( g: I+ c* Q+ r, t  打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。   
+ g+ z% }; ~) C$ {1 T  绘制圆柱螺旋线的AutoLISP程序代码如下:/ @% A. d2 Q: h) F* t

/ X; d7 |; x( d" y1 S* ]+ O, g  ; This program is using for drawing a helix
( ~/ W& m( V0 C( B7 R0 A% [4 S) t( e2 z0 ?; P1 Z/ M( r( s
  (setq b1 (getpoint "请输入基点:"))   
- y- F. Z& n7 W9 C% f3 [, G
0 y( ?6 j; W& V3 ]( n7 c4 v- U  (setq r (getreal "半径 r=:"))
2 X- m( w. s% D  q/ H4 a0 \' d1 G' _/ j9 ~3 `
  (setq t1 (getreal "节距 t1=:"))  w( G- q! \) y

/ D2 O$ f4 s( V( X5 h* `  (setq k (getint "段数 k=:"))+ a  d6 Z. C6 B+ c3 d4 Q/ d5 H
1 ~6 m* l/ P# a# q
  (setq n (getint "圈数 n=:")) 
1 [1 h+ ^- ?6 h4 w, {* ~% c( u5 S8 b- f6 o$ X  \- z
  (setq ta (/ (* 2 3.14159) k))4 x, K; u: m# {/ I* s

6 m3 W/ R& X* X: l! ^4 G6 u9 _8 z  (setq j1 (/ t1 k))* H8 F8 K  @) E# I; E$ q) }

4 t, S7 ?" s' e7 N  (setq a 0)( q( \, m# W. T2 {

. H2 Z! u  B+ W: m- K, V( f  (setq jj 0)
3 B5 H+ Z/ r# \8 F7 B4 ]
7 b' J6 _, Z# j7 L" S8 E9 g* ]3 D: Q  (setq ii 0)5 ?4 P$ `" l& T' O2 V4 F0 ?# n

$ T% u5 ]" g1 j" L  (command "ucs" "o" b1)
. |# d( d- N, w# o
) G. z" [7 G; r" I! \1 A  (command "3dpoly" (list r 0 0))
/ @  I* M* [/ R5 d$ C. J
7 @$ x( \6 f! y+ z0 ?* m  (repeat n* W8 ^' h" T. |3 {5 N6 D
& S( \; |3 u0 S2 U4 F
  (repeat k
+ u2 n& y; {/ e7 M) j" M; N7 t
0 B+ K$ G2 u& k; x; L2 B* h  (setq jj (+ jj 1))
7 n* [- d7 n# t. N" }3 p: s4 J
; @4 H1 J+ M' ?  (setq a (+ ta a)); R+ x: q5 E5 C0 Z8 B0 t) t: x

* N4 J0 O4 o2 l  (setq x (* r (cos a)))/ G; U9 y: f" d( u' m0 P

2 ?' @* i, ]5 W3 K# j  (setq y (* r (sin a)))) |0 h; P- K- O5 q' N
9 [2 ~' d% Q/ I* ?5 Y
  (setq z (* j1 jj))
) l4 u9 X# v& }* a4 Q& {
1 b. S+ e' c2 h. F: H& k/ M- F  (setq p2 (list x y z))
/ L: B: ?! B9 u6 a
6 u/ G& C. e# P  f. q  (command p2)3 V4 m0 R: u8 B
+ c; s  W% S' N7 f
  )
/ a2 [; f* P* g& {7 p% M! k, A' h7 W. E9 e( }% h# V/ I/ U
  (setq ii (+ ii 1)): Y) f8 t+ q3 m0 q- d; e% ]
( D1 S$ U- l- x6 t. E7 n# T5 z
  (setq z (* t1 ii))
( T4 a  _0 l/ I' ~. O0 Y. g
$ S- }7 K: I$ U  )0 O( z; A6 |0 b! q1 E5 H
4 q5 ^1 K( I: k! }- U8 I, z" W% e9 K
  (command "" )0 k" w) G8 |: |$ }& |( r/ R6 M

2 L  h5 a& K. h; K+ ]  段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。* m) y& d/ A2 R3 K9 R
  在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。
* h0 z! [1 m. b+ z  3.4 程序运行结果
! w3 O* u5 v; h" h/ h0 q( R% t9 u, W3 X2 z) c! A1 N2 W
  加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。) B! M3 g; U, q  W" f  @
  4、 应用
0 Q5 c* ~. {2 u! U& @3 I  * 绘制弹簧
- F8 Q+ V9 X" @" u+ B; L7 ]  在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。7 A* b2 U  \3 G2 i8 z* B4 N
  我们绘制的弹簧参数如下:4 b; b- c# I0 d$ C
  外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。7 x& u, m& `# h9 K  q
  * 绘制螺纹
* g$ d( k- ^3 J4 c: U) r  如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。  Y/ s% N% S/ _: i
  5、 结论
  \6 G6 k# \9 N: M5 C5 g  (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。
1 P  L$ p3 g' X* h7 \' _. g# Y  (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 )

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