QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
1、 引言3 ~  S, x- W7 C( @  w7 n
  在众多的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交互绘图结合,快速绘制三维螺纹和弹簧。8 n3 f- g- ?0 K( i1 B
  2、 问题的提出: N5 O  j& m7 t% o% e& h' d: C
  笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。6 _! K0 E) `5 t1 `$ d. A; x
  3、 圆柱螺旋线的绘制9 k) l4 z: ]* l& I
  3.1 圆柱螺旋线数学模型6 l7 F7 S4 B7 _; n( c
  * 圆柱螺旋线的形成
& o2 g: Y8 c% D# A# u. Z/ m4 d2 P9 o  圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。; j8 \: b- i- d2 o
  * 数学模型
5 e+ U, A% S) J7 |$ |& ?+ i) A  当圆柱螺旋线的轴线与坐标系的Z轴重合时,    
9 a* y7 U! S$ R: }  圆柱螺旋线上动点M(x,y,z)的参数方程如下:   6 K' H" q) B2 s0 R. S% e3 |9 E
  x=rcosα                 
; {8 \7 \4 X9 q  y=rsinα5 G& y1 `0 v# N% \
  z=±t1*α/(2π)           
4 G3 ^' F9 F; g! @  在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。0 I: k$ z" E5 }- _6 i
  3.2 程序框图2 l1 M' _, K  X2 J9 w
  开始 + @' q- d' J4 C! X+ V5 Q
: D7 a6 D  s' [9 M9 C- }/ r' N7 d3 f
  参数r、t1、k赋值     : `# d2 T* _/ {0 B5 J
5 K& C; L% V5 v  R$ Z8 r
  给出基点坐标8 x0 r; e  D" L7 G5 K) q
+ a8 i; j3 }. A+ g! P: v
  计算x, y, z各点坐标4 K: k  W( p& F: h% h  m

$ j7 y: P9 ^$ K/ N  绘制螺旋线+ Z* c. A( X% ~. e6 N3 u

6 W7 q+ x+ U% X: ^; h  结 束
6 K$ R- [: z7 h/ P) j
: c5 f+ `" R( `  3.3 程序代码
, U( _  A( I4 [( ]/ g4 A  打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。    2 V& \% I6 u' \
  绘制圆柱螺旋线的AutoLISP程序代码如下:
3 T, A5 J  n9 E6 ^+ b% w8 G* Z2 e4 L5 C1 \
  ; This program is using for drawing a helix
! l! w, ~) k, o7 t; f! |% x
0 h$ }5 f+ k5 T  (setq b1 (getpoint "请输入基点:"))   
& k7 g' G8 f3 W
( q5 V1 n7 W/ \  ~  (setq r (getreal "半径 r=:"))( E2 v8 R5 H% O0 _  l

3 P+ ^; L* p! L+ b+ V9 q5 l  i  (setq t1 (getreal "节距 t1=:")): y& J" m+ O4 f

% G5 N3 Z5 \( J- e( |7 j  (setq k (getint "段数 k=:"))
# T, n  I" N$ b2 ]
- o- ^/ i3 y: S4 u4 f  e! ?  (setq n (getint "圈数 n=:")) 6 g; H: T5 j6 W# P
# M9 U' C& z8 E" f' u& z" Q
  (setq ta (/ (* 2 3.14159) k))
1 ^% p1 d3 z/ R, Q# I9 l3 {, a! Z2 g7 c# t' f6 e/ D8 H
  (setq j1 (/ t1 k))
2 W) n( d8 X5 [# n& O: O4 E! s
) f0 S. F, ^/ x) U  (setq a 0)
) N& F7 R; d; ^9 U
1 V' T- E0 B: l* m  (setq jj 0), k% d& Z" ?& e/ o/ o/ u, Y

4 [! K. D* B, t  (setq ii 0)
& S' p( `* L) O. d; z9 K; o4 ^# D7 y: h1 G, W3 p
  (command "ucs" "o" b1)
$ d+ I+ ]# E( s6 _; Q  W- z% O" D$ u* p7 U
  (command "3dpoly" (list r 0 0))
! n$ U  ], b+ b( f. @7 g0 h
$ t4 l9 s/ \6 Q! k  (repeat n
4 E+ e( v; G" D3 u2 f. {2 O) K" \* ^# U
  (repeat k3 G  C) ^# J3 E; Q

' c7 \9 u) w0 R2 F+ _) Y9 M* [  (setq jj (+ jj 1))/ x+ k# O( g# y+ q

6 S5 O6 a# V/ w. v4 P- P6 M) H! p  (setq a (+ ta a))
# G$ x4 K  |+ }/ D+ N- l3 U
, g6 @" S- j$ |& N! k0 P  (setq x (* r (cos a)))% {* ]4 y* }# T5 y( m. X: k
: y% y* j* Q! o: D- t
  (setq y (* r (sin a)))
# b$ p& f% {$ O$ e5 E3 g
6 _% I, V. {' A- @  (setq z (* j1 jj)). f6 h1 q) h$ c, x0 {, _+ B

/ V$ F& u6 h" _( c  (setq p2 (list x y z))
5 }. H5 @/ f1 Q6 S' _. p2 L2 e( M+ M" @/ |* R
  (command p2)/ v% S" m; Y( R; `

" H; [7 Z1 s- S( J3 `. K  )* m- t8 C6 P. b  c/ j: ^+ \1 C/ X3 Z
; [' F+ Y& @6 N, g2 [
  (setq ii (+ ii 1))
" A/ k$ D; p1 x* F& v9 w; o# a" T3 L- M+ ~$ p
  (setq z (* t1 ii))
& V; q/ R, Q( d6 d2 s% o# P, y6 g0 n8 k: Q/ V8 u( y
  )5 I- w: V" I. }" y8 y4 v+ m

; W% Z+ L7 x$ n- R! _! `! [3 [  (command "" )/ K! q" \1 a! Z5 h8 C+ ]! ]

% P! V6 P+ Z* B9 h6 l$ k  段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。
2 ?! ?3 S0 v) `& k3 W: Q- A# E- d  在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。" T/ J, w! v- N2 N4 d) C8 d. q
  3.4 程序运行结果
# O- Y6 ^# r8 m0 C# {0 A; q: T+ H7 m  Q! k0 N5 @% Y$ I
  加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。+ v* {8 B, w4 m& ]/ e% P9 d6 m
  4、 应用 ) O: }+ ~8 `3 P" X5 J
  * 绘制弹簧
1 g9 q' [% o& q7 L  在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。8 S: g0 G! m: m9 u% C5 C+ Q7 @
  我们绘制的弹簧参数如下:
1 A8 V6 N; {/ {3 M  外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。
8 @. U7 }5 N) r( p  * 绘制螺纹
7 G; u8 T! V- y  如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。
- u, X# t' E8 n! n( a2 N8 i+ Q  5、 结论* ]% c. o7 g8 n& d& B+ @
  (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。
: _. j) G3 a* Y% M  Z- N  (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 )

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