QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
1、 引言- N  e; g4 o' F8 ]2 |
  在众多的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交互绘图结合,快速绘制三维螺纹和弹簧。0 j3 F/ o; ?6 ?( p. t+ B
  2、 问题的提出8 d+ ?: o. \: U- l6 |) \6 m
  笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。
. p0 b1 s/ _+ O, z  3、 圆柱螺旋线的绘制
: Z, o  I' b4 z6 D3 l5 d  3.1 圆柱螺旋线数学模型. N0 U, v: y- T9 G( D( E
  * 圆柱螺旋线的形成
  f- u! A2 G( o1 c( _+ \  圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。& z- {2 _4 s) l5 G: d4 ]
  * 数学模型 * w; Q/ C. h& Y6 q' O. l* O
  当圆柱螺旋线的轴线与坐标系的Z轴重合时,    
! r, ^2 G  @. j: c: ]  圆柱螺旋线上动点M(x,y,z)的参数方程如下:   " v- @1 W6 J* S6 O7 p
  x=rcosα                 
: K& _4 G8 {, e/ ^, t! b  y=rsinα$ V5 F4 s! W7 c: I; o# Z- w, \
  z=±t1*α/(2π)           7 m0 |. A1 l/ f+ J; N
  在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。
" Y- E; h( W& {# C  3.2 程序框图
2 d3 s- \& J7 Y! `4 ]  开始 , a2 x* l0 j! `3 A, p

" q% I+ @+ R* Y( T9 Q  参数r、t1、k赋值    
$ w# R* e! n4 q# i3 W% H6 j
  U) `5 Q  N9 q) }  给出基点坐标7 q- y4 A6 X( m5 j
- l0 ^' x+ _0 h" j/ Z2 o
  计算x, y, z各点坐标0 T# A* T  J* P( g) R
. T& r. ~7 C2 o
  绘制螺旋线
# `: J" A3 z7 g- ~+ r' w  m0 }4 @) \/ h6 i. g. ]
  结 束
/ h4 D$ d  B' k
- ~4 N; I7 p, ^+ {6 m/ e. p5 L  3.3 程序代码
+ w5 C; q) \2 h# ]  打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。   
8 t1 _& m! l, U  e, U. K; w1 e  绘制圆柱螺旋线的AutoLISP程序代码如下:
! t* k- q2 _: y: K9 M# q
# d; |/ |/ w0 Z7 k0 L+ \1 C  ; This program is using for drawing a helix
" m/ g( c6 c( _, m7 ]: o6 {2 s' k& z2 Z) U/ F
  (setq b1 (getpoint "请输入基点:"))   
3 X; z5 W$ M, a: j: \
2 j: k4 X( i3 `3 t# o4 V  (setq r (getreal "半径 r=:"))1 d9 f' K6 c% o; Z7 Z. ^
3 K' C) n" T+ E/ P9 S+ ]0 f
  (setq t1 (getreal "节距 t1=:"))* ?) ]7 N- p' P* S% L+ }2 `
, q* }' N, v  t, Q9 \  y
  (setq k (getint "段数 k=:"))# X) S  R$ ~/ J& V' e2 P1 i  w+ s

% s8 f1 X3 k8 }  (setq n (getint "圈数 n=:")) 
0 Z7 E! \3 t0 L0 `0 [5 C# z, F5 j1 ~" H7 ]; \
  (setq ta (/ (* 2 3.14159) k))
/ Y- n9 {, d5 e" i/ M6 Z" Y7 s6 T! B4 g5 k
  (setq j1 (/ t1 k))& n0 P1 @+ N( |% J" C
9 X- k" b" ^4 ?- I1 O! ^0 c: Q
  (setq a 0)5 L: [7 Z: b7 A
4 C& C7 [, S  Z! f* r
  (setq jj 0)/ p  g) `2 C+ F2 }, F
5 W8 j; `- T- E( H' @5 }
  (setq ii 0)
3 a; n" ]# [" M0 K2 j
$ s* v  j/ n* G# V$ J  (command "ucs" "o" b1)' r, x7 X9 p6 W! R2 G! V* g5 {

0 Z. S; {& f/ c6 m  (command "3dpoly" (list r 0 0))
! v! a1 U1 i6 \* V: L# M
, _0 u. Z8 [1 f1 F7 v  (repeat n
- m& E  @, s, ?' ]" l+ a% [/ Y, [) \. S3 t( L+ k1 F5 y
  (repeat k4 a3 A8 @6 q; I2 ~+ _- N
% A) {7 K& }0 g1 e+ l
  (setq jj (+ jj 1))- r$ b" [1 U3 F
* k/ C% T4 H) O0 J- v
  (setq a (+ ta a))/ ]3 \9 s) q9 e4 c2 k; c7 U" x

+ I6 k6 R$ Q  G/ z( O. y+ L  (setq x (* r (cos a)))* h  }. N3 {: D2 c1 j2 b! P
- r* v& H, d4 F$ t0 Q
  (setq y (* r (sin a)))' E) s3 U1 h  P/ ^9 D

/ i: k& w0 c- {' I% }! h6 f  (setq z (* j1 jj))
( u3 S: C* c6 I) X- l7 G* B
6 n% _3 Y4 p! n! p3 c  (setq p2 (list x y z))7 X6 v: U) }, o- i$ s# j  S

: N3 Q4 f7 h9 i5 r9 i: U  (command p2)
  A6 d; b; m, E2 r$ H- A9 c" R- X
! a6 h, x  k. I* O  I, ?) q% l* r4 y  )3 g7 }8 Z; r0 J2 n- `  x* r

$ r' a' {1 m% k: G  (setq ii (+ ii 1))
2 k  S, e7 g: w
1 L: k! a3 J/ u  (setq z (* t1 ii))1 k) E: O1 J1 @. q1 T' N8 ?2 E
3 N( y1 K  l" m* {4 z
  )
3 ~' y- g* R* Y: ]
) d* L; g. F  |9 w) g$ I! H/ k8 Y  (command "" )" M( `) Z  K" [1 a2 K, E9 ^

+ r6 M8 y+ V# q6 d7 @! v  e; p3 u  段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。
6 f# J- u- B6 B+ C! a  在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。
- A/ o# @6 T  c: {0 M6 |: o  3.4 程序运行结果# [) {' ]) D/ r0 e7 I

# D# r' Z( ]; m, S# O1 p) c$ P4 l  加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。
. L) B5 }9 i6 j, K) r8 p9 \* d  c  4、 应用 % `  A; c5 A$ z8 G$ n; F" a* n& r
  * 绘制弹簧
' g) s/ S% w- p# ]6 n7 K  在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。7 X, H0 y, p5 v5 d
  我们绘制的弹簧参数如下:" c7 o3 j/ X: [
  外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。
6 S, P1 M3 b5 t9 C6 q, i  * 绘制螺纹
7 {* `8 D: C# T  如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。
! s& O% T: ~# d4 |  5、 结论
/ l  f" e5 ~. T. A( }% z, x  (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。$ Q& e' e; j4 ]/ {0 I5 ?: E: R
  (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 )

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