QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
10天前
查看: 3093|回复: 1
收起左侧

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

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

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

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

x
1、 引言+ x, ^. E- H8 }( z, F4 r
  在众多的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交互绘图结合,快速绘制三维螺纹和弹簧。
7 N- T! d+ R2 A4 {  2、 问题的提出5 X3 [4 k8 f; h8 L5 b; \1 [
  笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。6 d; \7 _0 C. O" g
  3、 圆柱螺旋线的绘制
' |% d6 C. N" Y8 b! L6 @/ i  3.1 圆柱螺旋线数学模型
: W) |2 C5 f; l- [2 z0 u( z  * 圆柱螺旋线的形成
1 E' Z2 P- _  w0 P  |; L. l  圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。! o0 B( B: ?# E. L
  * 数学模型
" I0 m0 k" ^/ p# o: o- ?  当圆柱螺旋线的轴线与坐标系的Z轴重合时,    4 x( H. U0 D- G  N
  圆柱螺旋线上动点M(x,y,z)的参数方程如下:   . e0 J9 Y7 M2 ?! ^
  x=rcosα                 
: i2 O" Z8 a1 v% _, p- U& u- J5 |  y=rsinα; |; L1 Y  V. M* x
  z=±t1*α/(2π)           
1 B: d+ `2 T1 o  在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。+ O4 l" N. R4 N- b
  3.2 程序框图1 _. g4 V9 @0 Q" w, M
  开始 ! B8 H- _) m9 q" K

1 e$ {% @: I9 l4 I+ ~! i5 [  参数r、t1、k赋值    
) O1 H* }; k- U
; H- N' h4 f- G2 m  给出基点坐标
# a' j2 T- n6 U/ s3 U
7 N1 }. O! U( Z2 e/ F  计算x, y, z各点坐标
5 ]; s* @  h+ `5 E& P
3 `' U, G& u1 I$ E) Q  绘制螺旋线, W) u! Q& R) M( F! J" P

0 W- L, I7 `# U  结 束
/ Z$ t' x0 |; l- D* p
8 w/ n. J6 Q- s$ ^1 i& h) R  3.3 程序代码
2 x+ A) Q1 U7 e  打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。   
" J0 S4 p# b& K  绘制圆柱螺旋线的AutoLISP程序代码如下:
. S4 e/ L* S* t2 W8 H" G( v/ q# O, H" N. \1 R' L1 ~
  ; This program is using for drawing a helix
4 P2 V/ C: W6 J8 k+ K3 K
8 ~6 {+ Y' W& |& Q- S& }2 {* I( H  (setq b1 (getpoint "请输入基点:"))   
' p, k; v% b! r, M% _/ w+ ?' X& \
7 V/ R0 L8 L& c7 n" B# y$ E' B  (setq r (getreal "半径 r=:"))
  [; l7 y8 x& |9 i9 h; S9 d1 I+ N* a" C" A0 {
  (setq t1 (getreal "节距 t1=:"))+ ?" o" e# j. g

. Q9 I6 t3 q: A  (setq k (getint "段数 k=:"))* {; Y7 T. ~, Q( G5 R

$ i! G( h1 y" K4 Z: m2 Z  (setq n (getint "圈数 n=:")) 
. Q* `# Y: D& K/ L  W- U
- a! y- n. h# g7 ^& L  (setq ta (/ (* 2 3.14159) k))
7 u! H! T2 y" A, K$ I( a
% l( n8 R/ z' c  y# Q5 X  (setq j1 (/ t1 k))* P$ F6 q1 i4 e! w  q
* n0 j- M& Y/ C
  (setq a 0)
4 q) g. v2 a7 ~) l( i4 c1 v
0 b! R% y) n: P% a2 l: W  (setq jj 0)
! C4 I! x. U* w  }$ O6 K$ z" |2 q, d' z; y; C! S" h: {
  (setq ii 0)7 Z/ B* J2 L9 K' U( _3 C/ D6 V
: o5 z! d$ X6 B, w' U: j0 h
  (command "ucs" "o" b1)
. v9 g3 M% e2 \5 h4 o( N4 y/ U& w  o5 j/ R+ v  @
  (command "3dpoly" (list r 0 0))" i1 P& a6 b+ v- t. [7 h" q
. z* B* R" T- W9 g& N! k2 ~1 E
  (repeat n
2 ?, z4 F0 O/ T/ w$ G
& N( K% m$ }1 N6 o( R8 z( `7 o  (repeat k
( s  m4 l6 L) L! v1 V. J% w- e# T- K) m5 [
  (setq jj (+ jj 1))
! c) }, j2 L4 i- W. Z
  e# W3 e$ y+ Y* V5 K" @: v  (setq a (+ ta a))0 Y2 G& W3 {& g& X& t, Z, x' ?9 s: h

; }+ d2 g$ W6 z- d/ y, g5 k  (setq x (* r (cos a)))) d2 P( j( l' n+ m

1 q+ k7 p9 N7 O* z+ `5 K  (setq y (* r (sin a)))! r2 L! ?4 b- U6 i) P
1 h: \' a( I1 f
  (setq z (* j1 jj)); o8 O; q( s- C8 e- o) z

& x2 W' g7 Z7 Q0 A; k# ~  (setq p2 (list x y z))
* l, t/ V8 J. @# p$ z/ t, Q" e( m- G+ H  f; |' R) C5 V
  (command p2): I& U9 E, T( V! a" o) g2 s- F1 Y$ O
* D8 ^& ~; Q+ b5 d% C7 H- @
  )2 T) C: i/ e! d# A3 I4 ~7 [
4 o5 {; \" p' v  }) L! A
  (setq ii (+ ii 1))
" H+ p* V+ N$ d# ^0 Q, g! ]* y1 h9 e; x( H
  (setq z (* t1 ii))5 X" b% I8 F+ Y/ R
: e8 }$ r$ u- D6 S& r6 Z9 M& J
  )) ~8 t8 j) _( o9 \, c# z8 y
6 _; J9 s* _0 {
  (command "" )2 l( \! Z" S4 B( i2 j% l" W8 S' U
4 ]1 i& i9 S3 a# f5 x) o+ v" F
  段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。; t2 P0 x* T* {# ?
  在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。
4 i: A! X( |; r2 g8 z  3.4 程序运行结果
; V1 b/ p0 U% O1 f2 \% ~( e3 W' @/ h0 u" c) R
  加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。& f1 F: U1 R$ ?( F5 [5 n
  4、 应用 : D4 M7 p0 f2 d. G3 Y4 u
  * 绘制弹簧, F6 X9 m6 p1 N: G5 A0 m1 L% V: K
  在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。$ {) o4 p$ z/ N4 Y: y
  我们绘制的弹簧参数如下:: Q# {) S3 B+ U3 o: r+ r
  外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。
' s( u" T: U' e8 x' t- P4 o( _! j: ?1 h3 O  * 绘制螺纹
2 ^8 @" O: i7 C: E( M. a  如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。/ w9 `5 ]7 B) ]
  5、 结论
: F7 t8 e( S* w  (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。* S; O- E4 U' E* W& v0 l
  (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 )

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