QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
1、 引言
: m. X  ~. X/ Z. U) a% d8 _3 f  在众多的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交互绘图结合,快速绘制三维螺纹和弹簧。/ f" Z7 h6 J) C
  2、 问题的提出
* `4 u" q. h' l4 Y/ R& B. Y  笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。
9 `% y$ A! x2 j( l. t: k. Z  3、 圆柱螺旋线的绘制5 i" g5 j* S- l& v. z  R* E
  3.1 圆柱螺旋线数学模型3 A/ }9 d7 B; y" Q! a1 q1 q
  * 圆柱螺旋线的形成, d5 b) n! b& ?
  圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。  L% B9 P: i" \8 S6 b
  * 数学模型 ! s0 F& o3 w1 k; B
  当圆柱螺旋线的轴线与坐标系的Z轴重合时,    $ O6 M4 C3 Y$ Z" L8 H! r9 m
  圆柱螺旋线上动点M(x,y,z)的参数方程如下:   
+ p, ~8 P* n6 Y  x=rcosα                  " d6 m7 H/ @% C' T
  y=rsinα; q8 ?. H( U4 S% n" j& Z- G2 a
  z=±t1*α/(2π)           2 ]( A$ t! C" r8 u+ L
  在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。
/ n, i% z9 E/ G; t  3.2 程序框图
3 k% @# {! D0 v9 A  `2 }5 Q% V& z  开始 * g5 f) N5 B5 V# \

2 i: M$ Z* E8 Y0 D7 N" t/ p) ]  参数r、t1、k赋值    
* m, H1 T! z  A
4 K: l! X+ r+ d7 y2 D2 s  给出基点坐标
( u- y7 V6 s, W6 g! t
$ G) |. {3 H  M  计算x, y, z各点坐标
9 Y% e" w& {( `+ X  ^& e
  Z  J; e8 ?+ }& [' s) g/ {  c  绘制螺旋线
: D7 R4 t, _1 n4 a9 K( A* C0 T& |9 S5 I
  结 束
% Q2 z: e0 a7 K) g" W3 g) y# `5 G" k" J8 C, r$ m
  3.3 程序代码
( @) P. z+ \8 ^* t  打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。   
7 S5 q9 l4 d! k$ S% N* h3 q  绘制圆柱螺旋线的AutoLISP程序代码如下:
+ T2 o7 l7 \( ?% }1 B. K. ~8 h+ K! G
  ; This program is using for drawing a helix
8 g  j$ d: D: Z2 T3 y, f
1 ]& n! ~" \1 q! E' I  (setq b1 (getpoint "请输入基点:"))   
2 o$ w( ^! S( O( s
8 V, q4 B) [5 a2 e! i# t2 ]  (setq r (getreal "半径 r=:"))# ^! A: \( |* |5 H+ d% w; b# J

$ o9 m/ ]1 f/ C0 Q3 W( L; q# U  (setq t1 (getreal "节距 t1=:"))
9 U- Y' s8 [9 x, a
4 S0 c$ ]' a# n1 Q  (setq k (getint "段数 k=:"))' B: m$ G+ g; a, J+ i
' z& Q6 y2 i# \7 |, N+ e8 n1 \2 Z, o. X
  (setq n (getint "圈数 n=:")) + r2 Q+ L+ u6 E/ D; w. U: r& ?

7 x! u8 d) u% z1 L: F; a1 y  (setq ta (/ (* 2 3.14159) k))
& |' f' u: k) u9 W/ C
9 o" \. a* X# _  K  (setq j1 (/ t1 k)); m8 c! G( O* L2 w4 b4 Q5 G
2 d8 E$ y) @5 r& O' Q
  (setq a 0)/ z  d1 k$ f1 Y( r' D

4 A4 @) ^+ C, w- }( J  (setq jj 0)
$ I8 J5 k: C( G
# t9 H8 y( L& O  (setq ii 0)
& b6 P% }) {4 N& e$ ~
2 _3 N1 R2 M& ^  (command "ucs" "o" b1)3 ~  \) N2 C  M* P& K. ]# {

5 l2 Y' ~/ @6 A, ]  (command "3dpoly" (list r 0 0))
) w; M& n1 o& \- N1 G& f
9 g' H) D: _" V* y' y  (repeat n
# i. J! a) M/ n3 M, T( [& B+ D# d" ?% d9 Y9 `  u
  (repeat k, r% M, l4 `' Q# s( P" Y  T7 P

9 e0 F" y8 W& L' g' i  v; `. C7 T  (setq jj (+ jj 1))9 e# `" e4 P2 o0 {3 t6 w

3 B# q3 D7 \/ \2 o/ I4 \; Q  (setq a (+ ta a))
2 h6 O7 r+ L  S2 f* Y3 r
! \+ x: j+ X( K. O5 u6 J3 {  (setq x (* r (cos a)))
6 Z5 b" \1 s# M( G, q  X
7 O4 N- t" A- z9 P( k! @  (setq y (* r (sin a)))
) C( n; c8 s) T+ R, w
6 v7 i& R1 X5 K  (setq z (* j1 jj))6 h% ~7 Q! R/ o! n
. j5 ?, M" v2 J, [
  (setq p2 (list x y z))
# N6 }3 I) n; v# e7 m5 N7 V) A* p8 l; g( E: d
  (command p2)
+ w& R9 w2 `6 n" _% Q  N1 l( T9 O% W" i6 H
  )
; z7 z; Y* u7 Z* l8 A, }. k, f
' Y/ l. ^& O* h9 ?  S  (setq ii (+ ii 1))4 q& i5 b2 {8 z$ V) q; C

* \! K) {" \! }  (setq z (* t1 ii))% X& d' z* G8 X, Y: L2 I
  n7 e. P: T  ]+ e' t  N$ ?
  )
( [! A( S7 Y- A
& C2 s8 r* f6 i1 ~4 K% c  (command "" ): r) q: g( d# K9 _! D' G# U

% N' S. u: ~2 q+ L; e- _9 b  段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。
! x9 `/ ?6 N) \! U0 z% t" L2 L, g) O  在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。8 {. k' ^: P8 Z% c
  3.4 程序运行结果
. W4 E* Z3 D8 m8 E' X4 L- Y. G. g: `3 f
  加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。
% W1 g9 x. j' t' ]% c/ m5 T; M* v- e, c  4、 应用
0 Z9 K8 ]4 E9 U7 D+ ^/ K2 a% J  * 绘制弹簧7 d5 `; K* ]% G
  在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。: E/ M) A$ G$ u9 l) Z: C. g
  我们绘制的弹簧参数如下:0 l* v1 F5 i+ X& x; I: @8 |
  外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。6 `: Z) i5 v5 Q0 V' x7 u
  * 绘制螺纹- q$ D3 C) [( t4 y/ X
  如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。& z% |- O9 c) c2 Z& |5 ^6 T9 u. y( Y; k
  5、 结论) i8 y: k: X  Q  P
  (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。
) W* d" v+ ~  e, W! 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 )

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