QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
1、 引言
# |! O/ j3 P' ?9 {3 W' e$ X  在众多的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交互绘图结合,快速绘制三维螺纹和弹簧。: m. Y- }1 i) m2 w. ^2 W9 I- X
  2、 问题的提出
  m- S- L; T, L0 ?, s9 z9 J  笔者在用AutoCAD 2000绘制三维工程图时,经常遇到绘制螺纹、弹簧这类三维圆柱螺旋线的问题。在AutoCAD中,绘制三维线的命令有很多,如Line、3Dpoly、Spline等命令,而可以作为三维拉伸路径的线只有3Dpoly命令绘出的线可以胜任,而且不能使用其中的拟合项。因此,为了保证绘制的三维圆柱螺旋线尺寸精确,就必须输入大量精确数据,才能一点一点地画出所需的螺旋线,这样做起来非常麻烦。有关资料介绍采用圆弧近似构成螺旋线[1],但是这样画出的螺纹不能通过装配干涉检查。由于在AutoCAD中不方便绘制螺旋线,为了解决这个问题,笔者采用编制一个LISP程序来实现。该程序可以实现圆柱螺旋线自动绘图,不仅可以用于绘制弹簧螺旋线和螺纹的螺纹线。还可以进行参数化绘图。
2 j1 u7 `7 @  I  W  3、 圆柱螺旋线的绘制& D3 C. Q/ p  C9 w1 u$ L/ p0 C
  3.1 圆柱螺旋线数学模型
. L; {0 m% S0 e1 j  * 圆柱螺旋线的形成) _/ G1 r5 P$ h4 B! w
  圆柱螺旋线是技术上应用最广的空间曲线,其形成如图1所示。一动点M沿圆柱的母线AB作等速直线运动,而该母线又绕圆柱的轴线作等角速旋转时,点M的运动轨迹即为圆柱螺旋线。' [$ u! ?8 p- Q) G
  * 数学模型
$ D& P% j1 |6 F4 f  当圆柱螺旋线的轴线与坐标系的Z轴重合时,    
( @8 n9 m# F0 s  g* V# x  圆柱螺旋线上动点M(x,y,z)的参数方程如下:   
" F( V3 W6 W" R- ~  U8 `+ O2 X% U  x=rcosα                  5 a3 d5 F7 w3 r) x) m3 W
  y=rsinα
- d4 W+ c# u& E7 q# i. V  z=±t1*α/(2π)           1 B# g# p' h8 c" f# x
  在参数方程中:r为圆柱面的半径,α为螺旋线升角,t1为导程(即母线AB旋转一周时,动点M沿轴线方向上升的距离),右旋取正号,左旋取负号。
! F- i9 @" Z) ]; D3 n5 ]4 u: f  3.2 程序框图
+ T! f& ?0 M+ D! g. U5 {" D  开始
9 p2 h; u4 S: Z( d  J
" z3 Z6 b- m# [. J  参数r、t1、k赋值    
; s( @8 {* C$ u8 M0 ^8 h
: N& W; B! S4 {! j  给出基点坐标) G* r) ~' L2 `8 ?0 f" ?
7 z. x+ m( m( b1 h9 D, ^) I0 h
  计算x, y, z各点坐标( L/ B  F1 n0 B! P3 Q$ W% v9 r

  `; F" [% d. ?+ R) W: z  绘制螺旋线
! f: X  v8 O: o
% _2 A$ ~) z9 K; _- P  结 束8 C8 i: Z7 A6 P- e

4 [6 M* d  x: d2 L2 Y  3.3 程序代码/ ^. p+ l/ l. \( h
  打开AutoCAD2000进入Visual LISP开发环境,新建一个文件,在Visual LISP文本编辑器窗口进行程序代码编制。    % V$ K& X3 T* e0 ~4 d4 Y
  绘制圆柱螺旋线的AutoLISP程序代码如下:" c! p1 G/ ]4 L! `; s5 _+ v0 I
2 G0 p0 a# p  s9 l
  ; This program is using for drawing a helix
. O  n. o4 t" R/ z, D) O0 [9 u2 D" ^% E  b
  (setq b1 (getpoint "请输入基点:"))   ( ^3 Z  W- g. {; s  [5 ^$ P" V
2 ^7 d" ]6 S* w9 L1 j4 S
  (setq r (getreal "半径 r=:"))
# s5 l+ z! r# @! K$ N
9 D/ O; l9 @; p! d( ?1 l  (setq t1 (getreal "节距 t1=:"))
/ [! A: f% K0 A( k% ~  t$ j
$ N0 L, d8 z8 `0 `2 S# W  (setq k (getint "段数 k=:"))" \5 [  v; Y9 y, C6 T

9 p1 ]. @) c, x" A7 |# Q( m  (setq n (getint "圈数 n=:")) 
9 {; M5 u3 y- ?. O) D+ f
. T* Z( l: V7 R6 t9 _* D3 U  (setq ta (/ (* 2 3.14159) k))
5 u8 c! @8 p! |- K! l* S
5 I' b& c0 V, U8 X" y  (setq j1 (/ t1 k)): d9 \9 _" o: Y, h, y

" g, b6 m' k4 i1 \4 Z  (setq a 0)
$ L  g% ?% P# n- o/ i
9 Z3 C7 r& ?' e1 e5 \  o7 P  (setq jj 0)
9 o2 H9 i  F* c/ P7 D/ L; _* W" e0 a4 g0 E9 k+ K9 S
  (setq ii 0)1 |% v1 m8 |" M# m

3 r: o9 ~5 q5 Q! u2 f1 ^! f) \  (command "ucs" "o" b1)
9 d9 L. l. b8 k% i$ }% x; E) f' n$ n) L4 F1 D% U* W
  (command "3dpoly" (list r 0 0))+ T7 c7 k' _" D. ^! n  s) h

' S; d- P- P) ?# c' a  (repeat n4 O0 i# ^3 e7 X( x
, ]$ h- c, N; \& Z
  (repeat k% _; r' S2 f5 n3 w  \

- h; A: i6 ^5 G3 A! B  (setq jj (+ jj 1)): B; R+ q. v: u5 {* Q0 H! |  S
( c# q& T3 v6 [  y
  (setq a (+ ta a))# q, m5 e# Z: G4 @, }

& W4 `& ^; l4 a9 h8 T# i  (setq x (* r (cos a)))/ ]" h5 W+ d8 x+ A3 G& C5 S

: B! T8 m6 s% R0 f4 T7 m( d5 \  (setq y (* r (sin a)))$ ^, m. x1 g0 `3 a9 N5 k. i
; @3 t* k& ^' \- ^3 ]8 J1 t6 b- `9 ]
  (setq z (* j1 jj))
3 m: C0 G" m2 e  U* ?& n4 J8 p( [' X: s& H$ S2 K
  (setq p2 (list x y z))( D" K' U; Z5 ?) h) _
  j  Y: n# N) P/ A* L
  (command p2)/ e  I1 v0 N" q/ i

, v! u+ i; {8 J7 l  )
2 R) F, \, H2 X# ^- t4 g: t$ Q2 J4 v* T
  (setq ii (+ ii 1))( \2 a! k% z3 v, T, k7 O  ]5 T
7 ^2 l8 }* g. _
  (setq z (* t1 ii))
! d  g) Q! A5 b$ o* B5 m
  Y8 @% y, i& Z" t5 Z7 o  )
5 c5 ]! y/ i' r' a7 c) v. J; n  G0 l
  (command "" )
+ C! z# a7 V1 v* O3 R: v# \: B; U# b  G/ Q' `2 O: B1 N* Q
  段数k 最好为36或36的倍数(72)。绘弹簧时,n为弹簧的总圈数;绘螺纹时,若螺纹的长度为L,则n=L / t1。将这个LISP程序保存为“helix.lsp"。
" \: ]1 k% c1 a! z  在编写LISP程序时,应注意输入一定要正确,括号和空格都必不可少,否则会影响到螺旋线的轨迹。6 H  [, c/ I- u( U, O
  3.4 程序运行结果! W$ _9 b% {" X2 M/ ]& A) Z/ A

4 P# r7 s6 {, w; ^  加载并运行 "helix.lsp" 程序,首先在AutoCAD2000绘图窗口命令行出现提示,按提示输入参数r、t1、k、n值后,螺旋线即画好。3 t& l# k& ]0 ]( N$ Y
  4、 应用 + ^( X6 j0 @* W  e7 H. _- Q
  * 绘制弹簧! ]# i: C( k9 _: o4 r6 C
  在AutoCAD2000 绘图窗口改变坐标系,用“画圆”的命令绘制弹簧截面,再将螺旋线作为弹簧拉伸路径拉伸,进行适当剖切绘制支承段即画好如图5所示弹簧。
! v2 g. [/ Q  h2 B  我们绘制的弹簧参数如下:
" e; C  Q1 D7 m% `9 ?. e  外径D=14mm,d=1mm,节距t=4mm,有效圈数n1=10,支承圈数n2=2.5,右旋。; T8 @8 [, p% Z
  * 绘制螺纹. L4 j8 Q8 s% `6 \
  如果用“画多边形”的命令绘制三角形或矩形截面,再将螺旋线作为螺纹拉伸路径拉伸。然后进行适当修整,我们可以得到如图6 所示螺纹。
, i  u4 O0 ?; T# j7 m! T7 K2 T2 Q  5、 结论
" v' V/ u5 }4 F; |8 |  (1) 在Visual LISP开发环境加载并运行圆柱螺旋线AutoLISP程序,在AutoCAD2000绘图窗口命令行后,按提示输入不同的参数,即可绘制所需要的三维圆柱螺旋线。故此,可以参数化快速绘制各种三维螺纹和弹簧。
. r/ F' E+ e. C  (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 )

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