QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
1、 引言: f/ w  \8 p- E, A+ }7 ^
  在众多的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交互绘图结合,快速绘制三维螺纹和弹簧。' I7 ?$ j. C7 E6 }2 N. p3 F
  2、 问题的提出
3 O; @7 M; n3 U: t5 E9 }  笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。- g' {# a% d5 S+ Z( |
  3、 圆柱螺旋线的绘制- h2 I; s; k, ]7 E# s5 w
  3.1 圆柱螺旋线数学模型
0 j# y& I" p6 s; J+ E  * 圆柱螺旋线的形成
) Y' T4 L/ V6 i; u! ]; P  圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。2 z0 l& K# L0 ~7 y! H
  * 数学模型
/ f6 y+ }  E4 I- h4 X6 {$ y; r$ }  当圆柱螺旋线的轴线与坐标系的Z轴重合时,    2 O; A0 D, r/ L. o5 k9 A/ g' {
  圆柱螺旋线上动点M(x,y,z)的参数方程如下:   8 h; s2 V0 T& E: }# I% M
  x=rcosα                 
7 q. Q, q$ ]9 l  l' g  y=rsinα, `. M( K2 O4 x  x) p( `% ~& f
  z=±t1*α/(2π)           . |" \+ b0 ?9 b. }
  在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。$ X7 y) B0 O3 O+ i1 a
  3.2 程序框图
% ~) P* {/ E" h# ?2 J  开始
5 K  }+ N" t; g- x, G. n, W+ G' b& }, K# C+ b. Y$ ]; N3 r
  参数r、t1、k赋值    
! ~- z0 j$ j& m+ }
/ d2 ?# ~3 ?/ i- Z  给出基点坐标
+ C% A. I; |, {( ^* c* a  t0 S2 f9 `% F" a
  计算x, y, z各点坐标
- t. v& z) E9 F+ w# Q+ r* D# |) J/ Q( A: g9 ?' |( C
  绘制螺旋线
5 d8 X2 R5 S4 J8 q( L5 [
& X  [0 E; d" I/ h2 N+ u  结 束7 F9 c7 u4 c+ d2 J6 d" K; X" u
- W# [: R4 u4 r7 v- ]1 E
  3.3 程序代码  I" ?+ z. r1 Y- ]
  打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。    3 p0 m2 {; h$ \8 w2 v% v
  绘制圆柱螺旋线的AutoLISP程序代码如下:
: }8 c$ e  d1 j/ G
6 W- _5 G& y+ {- |9 P* ]  ; This program is using for drawing a helix
4 |$ ^" b* I$ B! H+ w: ]$ r& u; p) g3 H' k
  (setq b1 (getpoint "请输入基点:"))   1 D/ l. z8 F# t# D" h, b8 M
9 y! D* d' e9 [% K
  (setq r (getreal "半径 r=:"))
8 a9 N% d/ P; F6 V" b: m" k$ f3 r( Y& C
  (setq t1 (getreal "节距 t1=:")), i  T. d6 a' l

- L$ Q; E' \- _3 ~3 E( A  (setq k (getint "段数 k=:"))
# l' H9 J3 e0 z& ]
5 I) ]; j+ X) _! q  (setq n (getint "圈数 n=:")) 
, z8 ?# v5 Z/ o5 E  J2 X" j. ?8 C' M2 D
  (setq ta (/ (* 2 3.14159) k))
0 U! y8 y0 z. I0 k' L8 q: u$ p3 u5 g: x1 X7 v) Q
  (setq j1 (/ t1 k))1 m5 q* R/ }+ q% ^4 l# M
' {7 ], S, |) ?4 ]/ w' E2 u; `
  (setq a 0)4 g2 a2 {. b2 V, X, k3 t
3 R& z" c6 Y  {3 C+ \
  (setq jj 0)  ^% o7 W5 E' i5 Y3 V/ K1 Z
0 f5 `2 \: A' o
  (setq ii 0)
3 `* g- C8 K/ d+ |. ~0 Q( w; n. s0 s- \% W) w8 {( W7 d# W
  (command "ucs" "o" b1)5 k# B3 B, x" a" Y1 Z# ]+ W) x
! E4 o: i  M# K. u2 z0 E7 [0 e
  (command "3dpoly" (list r 0 0))2 \! y2 ~8 h9 j1 R' D
: _' _6 F' O& C6 ?, M* o" ?# ^  V
  (repeat n1 S- c3 f5 P1 }2 v, f) z

5 c6 p8 v* r6 r& P  (repeat k
; ^- _2 Y4 D: B; h& r% b2 d) n8 y( M0 a$ ^# o( Y
  (setq jj (+ jj 1))9 C  i# |0 F) |9 S( F5 H

4 q$ U' D# t4 U  (setq a (+ ta a))
6 G9 D( s) n( {4 D5 T$ n5 B8 R, ~2 u1 |1 Q4 c: C- \
  (setq x (* r (cos a)))
' Y; l0 E) |2 U" E' w/ h2 n
4 k3 J% |* i5 l) q  S9 d7 P  (setq y (* r (sin a)))0 W5 y0 ?' `# C- }+ ^& X
: q* }9 }) q3 P2 L1 [  k
  (setq z (* j1 jj))
5 Z% |3 A  l: E7 E
# L' s: b* G; |, S; N0 {' t  (setq p2 (list x y z))
: T* H9 Q0 f' u" `3 A, P0 f; G, E4 u# G2 [- v0 X" Z9 f5 U
  (command p2)
! k8 W! [1 D3 W, T) N3 W7 \) q, Z" ^2 {) p
  )
  H! C! g* k& a1 D$ A2 P  x
! b9 p. n* O, C3 @# F4 b6 m" z  (setq ii (+ ii 1)); p! V8 g! D. [# L, _1 }4 j% X
% o4 Q: ]  t' b4 k% ?
  (setq z (* t1 ii))
& w# H5 }/ h6 \: @
& K( T5 n6 j8 i: x  ), R+ l% S% Y2 P" c5 K' Q
& m: D' Z9 E6 Q8 c2 v0 D) g3 w
  (command "" )
- w  i- K; S! Z2 Y2 V4 i& }8 Y
* F$ Q. E. U3 Z7 [: }  段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。
) S" c, z$ K; E$ v% x; W  在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。4 b7 ~* |/ l( I  P7 u% f6 ?1 `
  3.4 程序运行结果
- ^# j! c  Q6 q
4 D9 v4 w& W# Z$ ?1 y  加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。
! A( d3 P& [9 E+ Y5 g. k& w  4、 应用
& q8 ~, ~: N- H) a4 A0 K" _* d" ]  * 绘制弹簧
2 J( e9 N" a; \) U  在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。$ E( R, X4 a  e; W1 K
  我们绘制的弹簧参数如下:  y9 G: _; C( z) B
  外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。/ a: I0 v: z* ~; U, K8 g" w) g
  * 绘制螺纹% ]" E; V2 m5 e9 U; B4 N/ V
  如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。
5 H' E  q, g! u1 M+ x& @2 B  5、 结论; v: E8 Q6 y. s
  (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。8 \! P, \( |6 J: ]
  (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 )

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