QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
1、 引言- W1 D& k. j7 n  t) ^
  在众多的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交互绘图结合,快速绘制三维螺纹和弹簧。
# x4 b0 Z9 ^9 Q4 e7 k  2、 问题的提出
6 `9 V- F$ A8 i  笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。  m# p2 u, S$ H8 T
  3、 圆柱螺旋线的绘制: ~3 m0 j: B3 t% ~( ~
  3.1 圆柱螺旋线数学模型; v  \$ U8 x- }" q5 j3 l& R0 C: _
  * 圆柱螺旋线的形成; W3 S9 d+ a- w) U" m. F
  圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。
( ^" _* O$ f2 X! H$ A  * 数学模型
6 ]/ ?8 v. T2 O3 S, H  当圆柱螺旋线的轴线与坐标系的Z轴重合时,    9 v# q, v* V: M
  圆柱螺旋线上动点M(x,y,z)的参数方程如下:   
: H& u- @. O  o  x=rcosα                 
8 h  Y6 M) y# f, N, L& b; _  y=rsinα) S0 w( F+ F3 @: ^
  z=±t1*α/(2π)           $ R: y! j  y6 N4 C/ ~' p( j2 ?/ K
  在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。
4 [+ Z. c7 m" h" N  3.2 程序框图
3 t) w7 @2 C  C( F5 R  开始 3 _% a7 P4 u6 W$ g$ c! Q# f

6 H6 h: S% p+ Q  h9 z. G: [  参数r、t1、k赋值     " _% @1 f  Q, j9 d$ p" F: M

8 }: s( m+ p  Q4 P; c9 P! w  给出基点坐标
$ e; k, S5 f' K+ l" W
, f1 C5 P0 A' k  计算x, y, z各点坐标9 x$ n( `: B+ k8 \$ L* x0 W
" B8 r$ J8 w: {4 y
  绘制螺旋线
: d/ y1 ?4 X' o! p. }, O: U- l, Q" H7 P( e" C
  结 束
! k) r% ~4 [/ ]6 V: v" v# p, G8 g1 C2 {
: J. ]& k% u; r( S) }: Z  3.3 程序代码) E  e/ G3 \5 g) v
  打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。   
8 j* F3 M! N( a  绘制圆柱螺旋线的AutoLISP程序代码如下:0 ~- G) ~. p0 W+ W5 d
$ d) i; }; `  u  v6 C8 ~
  ; This program is using for drawing a helix
& [, B# Y% g- j# v1 ~% K
9 x, m1 F3 l# e. V% Z* M+ z  (setq b1 (getpoint "请输入基点:"))   
1 ?; C0 K7 j& U7 O( m1 p6 v4 z# e9 ]2 J4 P+ E% h
  (setq r (getreal "半径 r=:"))# Q; M! [' b' G; g
$ H+ |" s" h9 b6 D+ r
  (setq t1 (getreal "节距 t1=:"))
! s4 L$ K) Q* e4 V& L: H) t1 H1 f+ j* B2 P7 _7 o
  (setq k (getint "段数 k=:"))
1 J. D; m% |  a1 o5 Q5 Z( i/ C# n; y& P- I) S" y
  (setq n (getint "圈数 n=:")) 9 a9 m9 M- O5 B0 Q# f

: F: h+ X' y% |# J0 V9 v- Y  (setq ta (/ (* 2 3.14159) k))
# I, B! ]7 D0 `3 V' A% E
8 {7 V: Q; S) \# |0 W- [& O. ?. F& e  (setq j1 (/ t1 k))
0 }% n8 i  K" ]" K& x" E  K' i5 ?. m* b% ]5 Y
  (setq a 0)
, b6 A7 H( z( e7 ^+ f9 O
% H  @3 l8 k; \# _7 w3 L5 w" H  (setq jj 0)
, l2 t1 G9 o  Y$ h8 @# p9 P/ x4 I4 F
  (setq ii 0)9 R) L8 i0 b5 P
  T5 A1 l- I  M( I( t: \2 n9 z) f
  (command "ucs" "o" b1)
; p- F5 S3 Y/ x, t+ n  o% k% {& Z7 ]# l7 M  I# q, l6 f
  (command "3dpoly" (list r 0 0))
" v2 F1 U  P4 C, B2 ~  q
: M$ k4 ]- i7 C* C' P0 a/ a  (repeat n  B! A: P8 z6 N5 X$ y" K7 x
9 l, s; I$ R/ q! M" a+ F5 K
  (repeat k
8 m, k% B+ x. ^5 K  B, y9 I# c& K) ]" c* S4 M$ F& m
  (setq jj (+ jj 1))
$ I7 m; z# A! a5 y# Q; r1 U
9 d2 W  q$ M; ~( B2 X0 j0 V  (setq a (+ ta a))
# H0 S! ^% V( O' N, i# |" A: H, d5 c7 F( v& `9 J0 z4 {( q* F
  (setq x (* r (cos a)))
' e7 z% P. J6 v4 x/ A8 V: ~# u* |5 s, ^+ [7 V
  (setq y (* r (sin a)))
' h  W& I- o5 i$ C2 Q+ e, B5 V* H( K3 \$ z0 f# a* X+ V5 k( }
  (setq z (* j1 jj))8 i" ~. R9 Y6 z/ j6 V% a
5 O9 `& N8 _- E& q! f+ y* b
  (setq p2 (list x y z))
2 T3 E: `$ U. j" C, U( ^
; ^+ l+ `% p% N: `- U  Y4 N, y  (command p2)/ t7 {0 ^! r9 q- [8 Z

+ E2 h! a: O' g/ N8 X  )
& P3 j9 U0 B4 ~8 D" B' x* q$ u
3 t2 [# x% @# B( h# N% Z  (setq ii (+ ii 1))
0 r! y" [! p$ e# o# S$ `
; d0 D+ i+ [- F+ T  (setq z (* t1 ii))
5 ]" j: L6 P) C6 }! i
1 y/ U: [  U) o0 y  ). m) J0 X( p2 L9 `5 F
& Y" h+ @1 V; l8 k
  (command "" ), M) L4 J" Z& i
. x, u+ r6 y6 ]  h" S5 Q
  段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。
; m" }0 Y0 r  ^& {8 I7 U) u  在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。9 r+ L2 t( V) R* V' r- _
  3.4 程序运行结果
# I& ^1 z+ U7 }  D
8 o$ S& C% K- ^. l% \  加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。9 V8 U. X7 j1 a3 f4 m' U
  4、 应用
) T- I( Q' l" {; g- o3 e- e) `; Q  * 绘制弹簧' V( t) l+ L2 b% W# E
  在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。, p7 L% O( D8 q8 C- k7 S3 G
  我们绘制的弹簧参数如下:
% o5 K: A+ x+ i  外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。
' k- q: Q1 v3 b$ ^8 F+ v7 o  * 绘制螺纹
& y6 @4 F& K( i  Q$ }8 o$ O  如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。7 A9 B: X# j' M  z5 d6 x
  5、 结论
. y/ p4 c  n8 U7 c8 i5 {2 _0 A  (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。( N) w  F- k$ u1 a, H* A8 T
  (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 )

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