QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
11天前
查看: 3095|回复: 1
收起左侧

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

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

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

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

x
1、 引言
, A5 Z9 }2 Q1 Q+ ?) v  在众多的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 M0 T. M3 Z0 r0 V  2、 问题的提出
0 H3 F' w: d6 a; a1 o: y9 ~  E) g+ v  笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。
9 S% c5 h# U  G5 R3 S0 B  3、 圆柱螺旋线的绘制+ k; v' [: j7 }; h' y
  3.1 圆柱螺旋线数学模型
5 v7 e4 P# N. e7 j8 T& f( R  * 圆柱螺旋线的形成
; s) Z( ~& Y5 R% k: D5 u  圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。
9 D2 ?8 y0 ^. Y. l, n  * 数学模型
4 J2 F: Y2 z+ |0 g/ n# J6 o  当圆柱螺旋线的轴线与坐标系的Z轴重合时,    # c4 c: g% h7 t' @  c
  圆柱螺旋线上动点M(x,y,z)的参数方程如下:   
8 L) Y1 R! E; g8 F, \9 g# Y/ w  x=rcosα                  * g! c1 O9 J5 {5 k# z# ~7 t
  y=rsinα
& q; c! k9 L  X  r+ Q* `  z=±t1*α/(2π)           $ B# J( m- j% E; e# s. U
  在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。
# V2 }# {2 @  a" Z) o& k  3.2 程序框图4 S: K$ B6 V  @
  开始
; _3 g4 C; R" f5 ^
! d. A3 k. M. G( O% Z  参数r、t1、k赋值    
0 _8 e) B3 x. r* q+ }1 O4 N( A1 |! R* c# u5 L+ c
  给出基点坐标
  B# v9 b4 O9 B( Z+ i8 y" p! B5 d& q" A( [& h! e$ p# _
  计算x, y, z各点坐标
1 R7 U/ t  E1 G" U: B4 N; Z. }2 O. J& q7 s
  绘制螺旋线( @8 `0 _! L5 [1 l

7 s. v1 N& I$ }" N2 F- W: o  结 束3 t1 p2 m' W% {6 m, i( g, o1 G

, H4 S  |5 m' q( r  3.3 程序代码0 d3 ?  |/ [8 h! |: i. o
  打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。    $ }/ f$ m1 |8 c# R6 Y+ X- X* g, y
  绘制圆柱螺旋线的AutoLISP程序代码如下:, W. ~! w7 }3 }. [% b, J% F0 z. [* q
0 R8 O% j' \8 q5 u% l( D  I# \' i
  ; This program is using for drawing a helix; a2 O( Y" H7 e  W# e: `6 }
  T* ]2 o; C6 h. G; i) v
  (setq b1 (getpoint "请输入基点:"))   
+ i5 q5 y! V; T1 I( S( ]
, {- y! H7 m5 V4 Y  (setq r (getreal "半径 r=:"))
  R. t4 g, I! o) z# W3 I
+ s! \* K2 J$ u5 o  (setq t1 (getreal "节距 t1=:"))
* y4 o- q) W+ V  X4 j( u
2 n) X4 u" j# s6 v  i- z  (setq k (getint "段数 k=:"))
5 q7 o2 p" c4 U+ n% l. e  v
8 g: X& G/ E6 I* l" D# r& l) B  (setq n (getint "圈数 n=:")) 
2 U9 F: h7 v. R, L& R, S/ I/ Z# ?
  (setq ta (/ (* 2 3.14159) k))7 J4 e5 {) Q# S& D2 n

) a/ R$ x* I) t2 j; w' s  (setq j1 (/ t1 k))
  O- O  A% M6 R7 ^% W6 I4 T& a
( e( L+ O5 }& v; L7 f; Y  (setq a 0)/ d4 _, B- _. Q6 O" h+ a% v

0 Y2 f# `$ `* B4 c' J  (setq jj 0)6 e+ n& g  t. g7 B( k
; L( U2 [! J6 g0 Q7 S2 J; t( C
  (setq ii 0)& C4 h, D  w$ s3 l3 M& t

; u. @  W/ x6 A3 N' Z2 g  (command "ucs" "o" b1)" S- `7 w8 j1 j
7 [- ?3 j4 E7 \+ G( R$ m2 k
  (command "3dpoly" (list r 0 0))
+ M- `  {  Z, ^& c$ d4 P! ^  O! e4 p2 ~) d, ^  v# ?
  (repeat n, A4 `5 {/ |9 \/ f( w

6 U. U7 [3 Z" }9 S* P  (repeat k
& Q# W  {$ {) x: Q! S  u1 m7 a# [- `  Y
  (setq jj (+ jj 1))7 i; d' e  T/ Q* d' ^

7 ?5 _5 z+ B+ n1 r4 V  (setq a (+ ta a))
5 S' }8 S1 L4 F- }" e2 g
3 Z: Y  m+ e9 D" o# s+ q  (setq x (* r (cos a)))# r, m- \" W( I
' M* a" [4 I/ O% B5 X
  (setq y (* r (sin a)))
) A* ?5 X: w# |; w, c2 u+ r" ~/ |' S# I2 U% K9 N9 S7 X7 M
  (setq z (* j1 jj))
6 b: t/ v5 C1 K* |1 W6 {6 ?4 M+ F9 W
2 ?! t( f* k* P' t( d  (setq p2 (list x y z))
0 r0 F1 R9 W0 J* ]  p) h. \
7 B& e* V  ~" b2 |; {- w2 C  (command p2)
) o+ y& q) s% _+ D9 Q8 N4 X7 `9 D  P6 m& S' ?: b" j
  )
0 F+ p" Y; |, J9 G% @/ _
8 I0 U3 D" y  Z# n5 h, E1 V3 T; w  (setq ii (+ ii 1))
2 v# v3 \3 z, `
; y9 G. n; i. V1 N1 z# C) ~  (setq z (* t1 ii))& u, M) g) \  i1 w  _

7 C- s( Y3 a$ H* v# w+ y  )
7 R' E4 L2 j/ j* G
0 V3 h( N+ o! e3 b  (command "" )2 \# y% Q0 w, `, }, q; B

5 {) r* w$ v) t/ ]* I  段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。$ [0 g- M0 w0 V  W: K
  在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。+ e0 X" [" c( _) y, e
  3.4 程序运行结果% O( x; x, m1 _* N+ z8 P; ~

" l% k) @& i2 i/ o* C  加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。
9 F5 L& p* m* `6 X! I. Y  4、 应用 & q/ B* |; p& ^, t7 _) r/ V+ I
  * 绘制弹簧
' G' I3 U# O& l9 E+ q8 V) G( a+ w( I  在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。+ h  N+ k" `6 p! g7 w
  我们绘制的弹簧参数如下:9 A( ^2 @/ M9 `. L/ O: D
  外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。
" S  e3 A8 W7 p; v  * 绘制螺纹
. ^3 ?+ \$ O) N3 L% V  如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。
$ P0 s2 s# [2 [0 D# f  5、 结论$ e" w3 `: m2 g3 \; N  Z0 b" C
  (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。
' X5 A0 ^: F# F" 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 )

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