QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
1、 引言+ h: r& M/ F) A) ?
  在众多的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 Y! Q4 e9 j* I) E* u
  2、 问题的提出& l0 H% _- w# y4 j, k# f
  笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。
  k1 U% [3 z/ j4 C% p  3、 圆柱螺旋线的绘制
$ g) P2 O& {! m; G  3.1 圆柱螺旋线数学模型* U+ J( K" G: d6 L2 G, x# |
  * 圆柱螺旋线的形成
( Y3 S" t- k# q, \. y! \  圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。
8 @5 V3 |; y5 r% s- s. `  * 数学模型   X6 z+ J8 R* L, e& \7 \
  当圆柱螺旋线的轴线与坐标系的Z轴重合时,    
* |4 A6 C/ c  m) K$ j; Z  圆柱螺旋线上动点M(x,y,z)的参数方程如下:   
8 ~  o  d* U0 B# a" |  x=rcosα                 
# E( ?6 |# ^  d3 y  L6 o; i  y=rsinα
) l4 ]7 c- c% e' Z  z=±t1*α/(2π)           
2 n) Y$ a9 D# q* s# q  在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。
! E4 r% i; ]# j* v: v& _  3.2 程序框图3 h; o/ A8 {) `# u: E
  开始 - ]7 t) _+ v( o% u# @4 Q
$ C- U! m- A' E3 C
  参数r、t1、k赋值       K, P$ k0 o- P0 K3 g

/ M  [5 K( W/ y+ X4 f4 b8 i  给出基点坐标
; S! W8 a$ e) W& `* {; x$ \1 w2 R$ q  N, }0 _( K
  计算x, y, z各点坐标
/ G2 L; ^  `6 F! k  m: H- U, a* G! i8 }) N6 X5 l- Y8 l5 l
  绘制螺旋线* i9 b: c  I- j

( C* b4 Y2 \. o+ a4 r' n  结 束
4 t9 F0 x* B# k( J2 s1 h; R
3 c8 K5 A! A3 T7 M  3.3 程序代码
& N/ c7 Z) x1 E" W; d1 W: t  打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。    0 Z1 x$ ]. K; D
  绘制圆柱螺旋线的AutoLISP程序代码如下:3 y; i, ^& A: q) f& ^

5 Q" [) b0 G: {9 P4 i3 O  ; This program is using for drawing a helix. s; J1 V2 _. ^8 ^) a! ^

( [7 T7 n2 v0 x) h) j  (setq b1 (getpoint "请输入基点:"))   ; M8 M. `& J( A( e+ C

& k8 @# f* M" h# E9 l* W( a  (setq r (getreal "半径 r=:"))7 q4 n2 ]! z7 {5 w4 _: |

% Z5 J/ ]" m5 e4 D, @  (setq t1 (getreal "节距 t1=:"))+ U, }& }9 L: s% r
/ V+ Z9 x4 @3 Z# v& t  f
  (setq k (getint "段数 k=:"))2 A( E9 E1 _5 `3 e/ y
7 M: M4 j2 k+ m2 L2 p
  (setq n (getint "圈数 n=:")) % [: `3 a; J2 R, L* Z. j
8 `% v1 [" ^) m; R, J
  (setq ta (/ (* 2 3.14159) k))
% j  _7 f8 t* k& ^& p7 L7 J5 }$ C0 s1 U
& W$ K( X% B/ M, z) Z  ?9 X  (setq j1 (/ t1 k))5 m- m6 i+ g, ]
1 g$ S6 |( A  \4 a9 v% P% V+ X
  (setq a 0); b$ ~1 G6 e' U  I( {* q
0 r' l6 v6 i, ]3 P
  (setq jj 0)
8 k+ \3 ?6 k( U  c( q( V$ V
3 X2 F! y1 g3 r1 T' x  (setq ii 0)# C& w, O- R* ~9 |; c9 X, t8 Y2 T
+ q: Y& l' D1 b+ V
  (command "ucs" "o" b1)
$ v' S( p. x3 S$ e# ~/ P! H
  F9 a  C  }% h! y3 ]  (command "3dpoly" (list r 0 0))' @* \6 z/ p& D" E: I
0 D! B2 Y& L+ z: E
  (repeat n$ [* a/ o0 |% k2 p

7 D  m# ^/ C7 U* l& w4 L  (repeat k
' V2 e  x/ X" y9 g+ j. [8 S# s' x, a% [9 t7 H
  (setq jj (+ jj 1))4 t/ T  z4 w3 L9 I# V  E( F
/ I  F* Z5 ~7 _! t0 F. v( ?
  (setq a (+ ta a))" t8 ^4 \2 ?4 m
3 Y, T$ C( p6 g" `
  (setq x (* r (cos a)))
8 ?& K: y4 Q) m  x% b  }
9 j: [2 s& K: q7 r( j* z  (setq y (* r (sin a)))' `6 i7 J& y" Y7 `. W

# R5 r0 u/ |7 J8 s1 {: g  (setq z (* j1 jj))" o0 C/ W) |& \5 h9 W
  h  g  H1 R5 @5 ~# J8 F
  (setq p2 (list x y z))! L7 N. R+ s, _
) D5 M) s/ W, C8 T8 G0 [! T! g
  (command p2)" b. p: w1 @. V$ a. a7 l/ t  ~# {7 l
3 q$ ^  t( k) L7 v) \
  )
3 u( |; N) p3 b+ o" e$ g5 N9 c8 U2 O2 t! i& F9 ]! n
  (setq ii (+ ii 1))
4 h* S$ |7 L' G* |& {
: `$ ]; z/ P  z2 k9 t- d  (setq z (* t1 ii))& Q+ l" ~% |% j' l/ i
3 ?9 c$ T4 L$ O1 E5 {5 W
  )
5 E/ J  A  J- @! _/ Q) Q% v( o! S  V- e9 Y  c. [
  (command "" )
* c/ T& {. |7 |
  [4 e" D+ V3 H& L, B  段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。
$ n2 G/ S5 p& @! g& c  在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。
: v* K- k5 s3 V# s+ d  3.4 程序运行结果" K' ^! G& ]8 O) U& }

) g2 P5 J% W" Y& U" I* b6 T  加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。
8 r+ Y9 u& X# J* O( m  4、 应用   m& i1 s" I/ s) s7 h0 b& D
  * 绘制弹簧
9 [7 Z8 ?0 N; n+ E  在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。0 G' O! e( v) n5 z  _
  我们绘制的弹簧参数如下:8 d) B9 _2 U; U
  外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。& I3 e$ `  k* ^2 V  k) U4 ~' i
  * 绘制螺纹: }' F# D. L/ J% U! H% o5 X4 a) M; [
  如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。2 T: {+ c0 G$ f* n
  5、 结论2 O: z2 o% |  P. j7 ^9 z
  (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。
7 K% S# m- t! R* b9 i  u8 s3 R  (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 )

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