QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
1、 引言( A$ m" C0 X( ?% H
  在众多的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交互绘图结合,快速绘制三维螺纹和弹簧。
1 Q: J4 r/ }# O, f# c& h* B  2、 问题的提出, ~8 W  y% ]; I
  笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。- k3 h; i; n, {& Q: x4 I. ^' G
  3、 圆柱螺旋线的绘制4 q8 `' ?! P6 \9 |( j
  3.1 圆柱螺旋线数学模型
- [/ _! p7 p& e# B  * 圆柱螺旋线的形成
: @3 o1 [  Q! A  n& L: o8 M4 {  圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。, S8 M7 W% e  F; D6 a
  * 数学模型 . h: s- o9 \. [1 t' e' w
  当圆柱螺旋线的轴线与坐标系的Z轴重合时,    ; K1 }; N/ |* g) P
  圆柱螺旋线上动点M(x,y,z)的参数方程如下:   ! B: U' Q0 K: ~& W& J: d, G
  x=rcosα                  # ^  o! T3 x, a9 k0 |) }
  y=rsinα
! j$ |, O' [( t' |  z=±t1*α/(2π)           
+ x# A# u9 U( I4 C  在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。6 z$ z- ]3 H# ]/ h5 V' p
  3.2 程序框图+ x8 X& {  Q0 T9 R. b! q* h: x
  开始
5 j, V9 x$ v8 |; _
/ {3 y  I. l7 m  参数r、t1、k赋值     $ u4 e7 l7 [* R" {$ f
% T6 l! ]8 t7 k- A0 G
  给出基点坐标
* Y6 d4 R" d, c4 C) b
: n+ Y9 t9 y+ _& s% ^  计算x, y, z各点坐标9 g0 K0 c+ \  Z

% s8 I# a1 n, ]. Q  绘制螺旋线) f) `+ b6 T2 z. W- m; M% T2 W% q
8 Q6 O7 I% P% c3 T/ h- b2 h: r
  结 束
/ @: y4 U0 s0 N0 q2 d( C9 A3 s- B1 Z2 w
  3.3 程序代码
" M* N4 \: \, U8 e" z  打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。   
* R" T% Z% ]( [6 c4 w  绘制圆柱螺旋线的AutoLISP程序代码如下:) n* T5 R  T  D- |+ k
. t5 T/ H; R' p( v/ j% X- q- |
  ; This program is using for drawing a helix* Q% i, ]' U' \/ T+ L6 c
! Y: L+ H* I# O
  (setq b1 (getpoint "请输入基点:"))   7 f+ }4 n8 J4 y

) k. ^2 ?6 A3 u/ ?: z- |  (setq r (getreal "半径 r=:"))& F) ?# E" ?! ^/ N& {$ J2 W/ c
3 _$ o' Q1 G9 b- k. b
  (setq t1 (getreal "节距 t1=:"))
% r2 @, n- o; w
7 G$ v! f' R9 k1 j/ [5 E  (setq k (getint "段数 k=:"))3 b- C* ?' o' m/ |
* i) k2 _" ]* _" d
  (setq n (getint "圈数 n=:")) 
; h( a' i; [# r% l
- X0 v) K7 p" x/ C  (setq ta (/ (* 2 3.14159) k))9 x, x- g& @+ j! Y. ]4 H4 y" u
1 l9 A, W$ v% B9 ~, J
  (setq j1 (/ t1 k)), ^5 F# V3 c! U8 [4 p
+ Q/ m1 T# l5 d! |" j4 ]
  (setq a 0)
7 _/ w+ O7 s2 U: y: y5 }# ]* X, D2 ?; x4 Z- W
  (setq jj 0)
/ l2 L, Y  r: z3 h! Y3 ~; z. \) X9 ]6 k, L% `
  (setq ii 0)8 i! H" \& a" d( `( X  j  ^3 f

; D4 B! |. H6 b/ Z. i  (command "ucs" "o" b1)
9 B& Z/ c% L! D
4 S! `. f/ s5 T& Q+ w  (command "3dpoly" (list r 0 0))
; v& e" H3 b2 \- k  G2 {! E+ x  |. ]8 v/ I9 i* n* B
  (repeat n  x- D% w' F2 D8 D
6 B" L, M5 {9 i7 Y& _
  (repeat k
" w$ R/ `( q$ z5 p
: H" D* f. A1 ~/ |; o  (setq jj (+ jj 1))' R! e5 C5 W& Z3 R

# f2 e% O$ y; l/ Q2 S  (setq a (+ ta a))
$ J% |- m2 Q: I" f0 ^! [% X: n/ p% Z% j% ?/ S2 ~
  (setq x (* r (cos a)))7 }4 @7 {$ T: v4 S, b( w  X
( R- G. R9 `4 J3 Y: B/ i7 i0 l6 {
  (setq y (* r (sin a)))
  q% L2 K+ v' n5 u# T  T! ?
9 X+ a1 C% }2 ]' \" l  (setq z (* j1 jj))
% R8 z4 r+ l4 X0 B1 J; ^, g/ M% W( I7 Y( m- ~) c# M3 I
  (setq p2 (list x y z)): I4 m7 R! p3 B$ P& u) {% F  B

4 j& {' U6 j' l4 K, Q% N4 q  (command p2)
' f3 a4 c/ I# F3 k+ K+ o
- F, F/ D7 W5 I( S1 h3 z. c  )* b  [! a. B# o' |, p. s- s& J

; S. p% \+ x+ [. M  y% ]  (setq ii (+ ii 1))
& g8 K) Z- P0 J: j
% h# l, |9 C4 p+ E  (setq z (* t1 ii))
/ S+ `% D2 ^5 j
9 \* s& \9 M  \5 l  )/ J( C& D+ J$ |, P! w; w$ {, q
" }: H4 f/ J  A' X: k
  (command "" )
# `9 u% ]" Q9 c; Z& i4 m) [2 z+ r- Z. }  j$ e/ u# h
  段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。
0 P# M3 @# K8 m8 C/ _  在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。4 h) e4 V% e: g# K6 D6 |) T
  3.4 程序运行结果8 v: v1 i8 `* O! f' M

+ f4 o& y' n' w5 O! `  加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。
8 I- p. C- H3 d- ^# s$ n! w8 p1 d  4、 应用
0 |# {5 @0 t% o( P8 u) J/ s( w% X  * 绘制弹簧8 N' j3 O5 B, S( u; a
  在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。+ L) S* p/ A; a5 x4 y: y
  我们绘制的弹簧参数如下:
) ^2 e1 l$ @2 A- R6 O( X  外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。) o$ @' B9 B5 i0 ?8 S
  * 绘制螺纹
' o+ S5 J/ \1 T# }* q  Y3 R  如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。1 b3 C$ [6 d  b0 A4 L0 W3 B
  5、 结论' J7 k& {2 L7 ]" t. ]
  (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。( H* g0 J( ^6 d
  (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 )

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