用Autolisp 在AutoCAD中实现多种曲线的绘制_第1页
用Autolisp 在AutoCAD中实现多种曲线的绘制_第2页
用Autolisp 在AutoCAD中实现多种曲线的绘制_第3页
用Autolisp 在AutoCAD中实现多种曲线的绘制_第4页
用Autolisp 在AutoCAD中实现多种曲线的绘制_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、用Autolisp 在AutoCAD中实现多种曲线的绘制一、 引言:AutoCAD自1982年由Autodesk公司推出以来,经历了20年的发展更新,目前,已深入到包括机械、建筑、服装、航天航空、地质气象等等的众多领域中。AutoCAD已成为众多工程设计人员的首选设计软件,其格式也逐渐成为各CAD系统间的交换标准。AutoCAD之所以有如此广泛的应用,除了其功能强大、易学易用外,还在于它是一个开放的交互软件,自85年推出的2.17版中,AutoCAD就内嵌了Autolisp语言,方便用户对其进行二次开发。自此,便有无数的工程技术人员成为Autodesk公司的编外程序员。随着AutoCAD版本的

2、不断升级,它所支持的开发环境也不断增加,如:ADS、ARX、Diesel、DCL、 VBA等等。但由于方便和易学易用,Autolisp始终是技术人员在开发AutoCAD时运用最多的编程语言。同时也有更多的工程技术人员投入到Autolisp的学习之中来。但是,毕竟Autolisp也是一种编程语言,学习起来远不如学习AutoCAD的操作来得简单。故也有部分技术人员在学习过程中有危难情绪,针对这一情况,本人在此通过一种方法、三个例子来阐述Autolisp编程的一般过程,希望能对Autolisp初学者有所帮助。二、 Autolisp的二次开发:(一) 问题提出:尽管AutoCAD在各个领域中有着广泛的

3、应用,但总不会面面俱到,在机械行业中,经常要画一些复杂曲线,如:三角函数曲线、渐开线、螺旋线等等。这些曲线在AutoCAD中没有专门的命令,难以用一般的方法绘制,尽管机械制图国家标准中有用圆弧近似替代渐开线和螺旋线的画法,但它们一不准确,不能通过装配干涉,二不方便,需要取很多位置点才能画出。而用Autolisp编程绘制,却能快速准确的得到所需图形。(二) 曲线绘制:1、 获取曲线的数学模型:正弦曲线: x = ay = sin a 渐开线: x = br * (cos a + a sin a)y = br * (sin a + a cos a) 圆柱螺旋线: x = r cos ay = r

4、sin az = s * a / (2) (s取正值为右旋、取负值为左旋)2、 设计程序框图:结束从点表中逐个取出点的坐标,画出曲线图。获取所需参数计算x、y、z得到各点的坐标,并将点坐标置入点表中。获取画图基准点开始3、 程序代码如下:;画正弦曲:x=a , y=sin a ;(defun c:zxqx(/ da bp Ai lpt bp1 bp2) (initget 1) (setq bp (getpoint "n 起始点?:") (initget 7) (setq da (getangle "n 角度增量?:") (setq Ai 0 Ae (*

5、pi 2.0) bp1 (car bp) bp2 (car (cdr bp) (while (< Ai Ae) (setq lpt (append lpt (list (list (+ bp1 Ai) (+ bp2 (sin Ai) (setq Ai (+ Ai da) ) (setq lpt (append lpt (list (list (+ bp1 Ae) (+ bp2 (sin Ae) (setvar "cmdecho" 0) (command "pline") (foreach pt lpt (command pt) (command c

6、) (command "pedit" "l" "f") (command c) (setvar "cmdecho" 1) );渐开线画法x=br*(cos(a)+a*sin(a) y=br*(sin(a)-a*cos(a);(defun c:jkx(/ ti lpt ae pt bp1 bp2) (initget 1) (setq bp (getpoint "n 起始点?:") (initget 7) (setq br (getreal "n 基圆半径?:") (initge

7、t 5) (setq ai (getangle "n 起始角度?:") (initget 7) (setq ae (getangle "n 终止角度?:") (initget 7) (setq da (getangle "n 角度增量?:") (setq bp1 (car bp) bp2 (car (cdr bp) (while (< ai ae) (setq lpt (append lpt (list (list (+ bp1 (* br (+ (cos ai) (* ai (sin ai) (+ bp2 (* br (- (

8、sin ai) (* ai (cos ai) (setq ai (+ ai da) ) (setq lpt (append lpt (list (list (+ bp1 (* br (+ (cos ae) (* ae (sin ae) (+ bp2 (* br (- (sin ae) (* ae (cos ae) (setvar "cmdecho" 0) (command "pline") (foreach pt lpt (command pt) (command c) (command "pedit" "l" &

9、quot;f") (command c) (setvar "cmdecho" 1) );螺旋线画法:x=r*cos(2pi/k) , y=r*sin(2pi/k) , z=(+/-)s/k .; s:导程(+=右旋,-=左旋),k:每圈等分数。(defun c:yzlxx(/ bp r a s k n bp1 bp2 bp3 dmax di da pt lpt) (initget 17) (setq bp (getpoint "n 螺旋线中心:") (initget 7) (setq r (getdist bp "n 螺旋线半径:&q

10、uot;) (initget 3) (setq s (getreal "n 导程:(+/右旋,-/左旋)") (initget 7) (setq n (getreal "n 圈数:") (initget 6) (setq k (getint "n 每圈等分数<36>:(宜取36的整倍数)") (if (not k) (setq k 36) (setq bp1 (car bp) bp2 (cadr bp) bp3 (caddr bp) (setq dmax (fix(* k n) (setq da (/(* 2 pi) k)

11、 (setq a 0) (setq di 0) (while (<= di dmax) (setq lpt (append lpt (list (list (+ bp1 (* r (cos a) (+ bp2 (* r (sin a) (+ bp3 (* (/ s k) di) (setq di (+ di 1) (setq a (+ da a) ) (setvar "cmdecho" 0) (command "3dpoly") (foreach pt lpt (command pt) (command c) (setvar "cmdec

12、ho" 1) )4、几点说明:(1)、以上三个程序编程思路是一样的,若需要绘制其它曲线,只要将其数学模型适当变换后代入程序中,即可实现所需功能。(2)、该渐开线只能绘基圆上正东方向象限点上的渐开线,如要获取其他方向上的渐开线,可以在AutoCAD中修改获得。(3)、绘制螺旋线的程序较2001年第6期上郭克希副教授的程序有所改进,原程序因为圈数n作为循环记数,只能是整数,使螺旋线圈数只能为整数,而该程序中圈数n可以为实数。(4)、建议将lpt等参数设为局部变量,以减少内存占用率。(5)、最后一个程序绘制螺旋线后未用f拟合曲线,是因为3dpoly绘制的曲线拟合后就不能作为实体的拉伸路径了。5、 编入菜单: (1)、编入下拉菜单:在acad.mnu文件中的*POP7*DRAW后的ID_Pline &PolylineCC_pline 下面加入以下语句即可ID_jkx &JkxCC_jkx ID_yzlxx y&ZlxxCC_yzlxx ID_3dpoly &3D PolylineCC_3dpoly (2)、编入工具条:可直接在工具条上右键进行定制,在此不做赘述。三、应用:齿轮、弹簧等。四、 结论: Autolisp是一种内嵌式表处理语言,可以广泛应用在AutoCAD各个版本中,AutoCAD200

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论