QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
1、 引言8 w9 A( N5 x! r7 s+ G# c! m$ s
  在众多的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 i, X% o5 r; P1 s7 O5 I
  2、 问题的提出
9 V( z' Z/ L8 j& [* ]6 o  笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。3 \& |3 l+ j( C4 A$ D
  3、 圆柱螺旋线的绘制
$ z8 s% s7 M6 V$ P  3.1 圆柱螺旋线数学模型  x, _! `+ D0 I4 a- `
  * 圆柱螺旋线的形成
; Q- j. ?) H6 ~4 U" E  圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。" k. |, j1 S, T& o! r  ^
  * 数学模型 / U6 q& q# }& M& e" m3 ~
  当圆柱螺旋线的轴线与坐标系的Z轴重合时,    
( Q; N0 }8 f" n5 i9 T- b4 I" A  圆柱螺旋线上动点M(x,y,z)的参数方程如下:   
% t! [/ V" W  Y  x=rcosα                 
* Q2 E) R# M2 j# J" }6 G  y=rsinα
4 U( {% e; M/ t: d9 O  f0 \  z=±t1*α/(2π)           ( k$ w' J4 `; c3 v
  在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。
! S! n3 i% m; D0 c% `# C& \0 G! \$ X  3.2 程序框图
) d5 W9 |* r7 r2 p) Q, x  开始
( a2 B+ L4 [5 C0 w
, o6 e7 R; l6 ]5 V/ f  参数r、t1、k赋值     4 j; t# h, j3 k# d1 d: F# P
/ L  ]9 ~% O+ b( t1 F# c- h
  给出基点坐标
' A- r% z. ?7 G: U! w7 n
4 T+ `# g2 ?- Q9 y8 M9 _: z8 u# ]$ C  计算x, y, z各点坐标
, ^- e: B& k  i/ u+ U& n) y$ p! u9 j- T* D4 H$ v
  绘制螺旋线
+ a; i5 `1 p/ E  D: M+ o9 F
- P/ h6 U+ v- _8 m6 I% H  结 束  r1 E0 P8 s: y1 a9 U0 ?
3 c9 {' ?9 n8 T$ x3 r
  3.3 程序代码( U6 s6 }+ r. d9 t6 ~" a
  打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。   
9 E# \2 `8 U9 E$ m* ~/ S/ [& A  绘制圆柱螺旋线的AutoLISP程序代码如下:3 K. d; g* g) u: f& }. S8 S

4 `6 a" T+ o! l- d0 z6 c9 M  ; This program is using for drawing a helix0 n( {& Z3 P7 C4 M2 U

) ]6 b- p4 V2 N9 C, E/ X( b/ Z  (setq b1 (getpoint "请输入基点:"))   ) b0 I! X( e: u5 `' I! K" K

; \! O! H$ q+ E- V+ b  (setq r (getreal "半径 r=:"))$ L; K5 N+ }) S7 v. H4 R

+ Y9 Y6 e  O" t. ~! x  (setq t1 (getreal "节距 t1=:"))
5 j8 m' T* e6 ^; d" ^. Y' a# A, H2 g# x7 ^, ]
  (setq k (getint "段数 k=:"))% T5 s$ Y7 h* u* o9 h8 z0 W& c: ^

! \  b1 z( U1 W4 |  (setq n (getint "圈数 n=:")) 
- y% L6 ^. ]3 c; n. |# B& ^8 L0 e# J% X  E5 s5 h8 U
  (setq ta (/ (* 2 3.14159) k))5 p7 h' G" I' }* d" L

* c/ H- ?& S% E* ?8 N  (setq j1 (/ t1 k))
" m9 ]* l4 o. _- p( u+ y! I" g! c) m! t* b8 t( R
  (setq a 0)' [: o3 F% q. n% S: H/ @# H

* d* z7 s5 ~( G! ^, J$ H; S  (setq jj 0); b& j/ R% V# r! L" k4 z" v8 |3 o
; `. O/ P, v7 @' B0 h" K
  (setq ii 0)+ ]& A8 b8 b& B5 {( w1 j* d% P

+ a) I( L& f/ q) {2 V" P  (command "ucs" "o" b1)) w" J  q# C' H, O( G% z

7 |5 x& R; I& G8 T' U  (command "3dpoly" (list r 0 0))
; t$ u3 P) z& z7 G3 P
9 l7 Z! D- o6 {, Q  E) }- G  (repeat n: c1 K6 P9 H6 }. F/ U: n2 A
/ Y' J9 U$ h8 B9 ^- U) p
  (repeat k
* e$ ]  K* b. G% J+ _
+ R: Z* ^, C! O2 s  (setq jj (+ jj 1))- x! l5 b; J; J8 }# ]
) C& v( z# a, I2 T
  (setq a (+ ta a))
) g2 h2 d6 e0 U3 `, X- \0 m, D* B  L: H" {* l: N5 z6 c6 `! b$ r7 N
  (setq x (* r (cos a)))
9 {$ H" ]1 m1 W) w
: j- i9 {0 Z' Q, @  (setq y (* r (sin a)))& K. Q* M4 u5 u0 n. `+ D
; @& X4 a# y+ t  A$ @1 m5 n7 f
  (setq z (* j1 jj))
: i3 m0 I8 N, R1 L- Q9 H7 W' s1 {' x% m& l8 }& {3 v
  (setq p2 (list x y z)). h" B! }; B( l# l

6 F: V) f4 U9 L+ t+ ]  (command p2)
) E6 H6 @" q( t1 i
; p' x1 }9 I; t  M# U  )
, w8 p- h+ v/ R* v1 P2 Q2 ~* f& {$ r# H; o
  (setq ii (+ ii 1)). d6 {) |( A4 S6 O/ B
, a2 j7 `) @3 s* x  b: w7 l8 s
  (setq z (* t1 ii))* ~( _' T6 C; T% v: H6 U* H

0 D: S' y! m( }  )
1 t, P. g  b8 G3 V/ {
0 n5 ?  Q7 h% Z  (command "" )- [! [* c2 o: y( S+ a5 l7 m, J5 q
" v3 w  F: b( _; h" j' b
  段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。- d( v8 }$ I- y  H- Z3 i$ F; E$ \
  在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。
% S6 y: u1 V. y2 s/ `; f/ A  3.4 程序运行结果
7 [5 V4 T- s$ ~# r: m; m: r! W% G" e( w  p7 C, x
  加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。
* v3 ~2 @( A2 J. t  4、 应用
" L) t) ]* I# L0 m4 X  * 绘制弹簧  ?/ ^% R" g, ], g7 u3 i; A3 `2 Y" B3 M
  在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。2 l4 V) F0 p3 P$ M2 [; D( b
  我们绘制的弹簧参数如下:! {) x( J& f" H; L: O
  外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。
$ y* t: x4 u. H2 ~+ h  * 绘制螺纹# i0 y: q# Z5 v2 t# e, b
  如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。$ J4 I$ [. u; C, M
  5、 结论
) F! Q$ E) K7 H) B( d  (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。
" _& ?0 y, r- R8 z- a9 `7 K  (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 )

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