用Autolisp 在AutoCAD中实现多种曲线的绘制

一、引言:

AutoCAD自1982年由Autodesk公司推出以来,经历了20年的发展更新,目前,已深入到包括机械、建筑、服装、航天航空、地质气象等等的众多领域中。AutoCAD已成为众多工程设计人员的首选设计软件,其格式也逐渐成为各CAD系统间的交换标准。

AutoCAD之所以有如此广泛的应用,除了其功能强大、易学易用外,还在于它是一个开放的交互软件,自85年推出的2.17版中,AutoCAD就内嵌了Autolisp语言,方便用户对其进行二次开发。自此,便有无数的工程技术人员成为Autodesk公司的编外程序员。随着AutoCAD版本的不断升级,它所支持的开发环境也不断增加,如:ADS、ARX、Diesel、DCL、

VBA等等。但由于方便和易学易用,Autolisp始终是技术人员在开发AutoCAD时运用最多的编程语言。同时也有更多的工程技术人员投入到Autolisp的学习之中来。但是,毕竟Autolisp也是一种编程语言,学习起来远不如学习AutoCAD的操作来得简单。故也有部分技术人员在学习过程中有危难情绪,针对这一情况,本人在此通过一种方法、三个例子来阐述Autolisp编程的一般过程,希望能对Autolisp初学者有所帮助。

二、Autolisp的二次开发:

(一)

问题提出:

尽管AutoCAD在各个领域中有着广泛的应用,但总不会面面俱到,在机械行业中,经常要画一些复杂曲线,如:三角函数曲线、渐开线、螺旋线等等。这些曲线在AutoCAD中没有专门的命令,难以用一般的方法绘制,尽管机械制图国家标准中有用圆弧近似替代渐开线和螺旋线的画法,但它们一不准确,不能通过装配干涉,二不方便,需要取很多位置点才能画出。而用Autolisp编程绘制,却能快速准确的得到所需图形。

(二)

曲线绘制:

1、

获取曲线的数学模型:

正弦曲线:x = a

y = sin a

渐开线:x = br * (cos a + a sin a)

y = br * (sin a + a cos a)

圆柱螺旋线:

x = r cos a

y = r sin a

z = s * a /

(2π)

(s取正值为右旋、取负值为左旋)

2、

设计程序框图:

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 (* 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)

(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 基圆半径?:"))

(initget 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 (- (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"

"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 螺旋线半径:"))

(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))

(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 "cmdecho"

1)

)

4、几点说明:

(1)、以上三个程序编程思路是一样的,若需要绘制其它曲线,只要将其数学模型适当变换后代入程序中,即可实现所需功能。

(2)、该渐开线只能绘基圆上正东方向象限点上的渐开线,如要获取其他方向上的渐开线,可以在AutoCAD中修改获得。

(3)、绘制螺旋线的程序较2001年第6期上郭克希副教授的程序有所改进,原程序因为圈数n作为循环记数,只能是整数,使螺旋线圈数只能为整数,而该程序中圈数n可以为实数。

(4)、建议将lpt等参数设为局部变量,以减少内存占用率。

(5)、最后一个程序绘制螺旋线后未用f拟合曲线,是因为3dpoly绘制的曲线拟合后就不能作为实体的拉伸路径了。

5、

编入菜单:

(1)、编入下拉菜单:在acad.mnu文件中的

***POP7

**DRAW后的

ID_Pline

[&Polyline]^C^C_pline 下面加入以下语句即可

ID_jkx

[&Jkx]^C^C_jkx

ID_yzlxx

[y&Zlxx]^C^C_yzlxx

ID_3dpoly

[&3D

Polyline]^C^C_3dpoly

(2)、编入工具条:可直接在工具条上右键进行定制,在此不做赘述。

三、应用:

pline加点lisp_用Autolisp 在AutoCAD中实现多种曲线的绘制相关推荐

  1. 如何用lisp画蔓叶线_用Autolisp 在AutoCAD中实现多种曲线的绘制

    用 Autolisp 在 AutoCAD 中实现多种曲线的绘制 一.引言: AutoCAD 自 1982 年由 Autodesk 公司推出以来, 经历了 20 年的发展更 新,目前,已深入到包括机械. ...

  2. Lisp编制的坡度标注_用Autolisp实现AutoCAD中尺寸公差及表面粗糙度的快速标注

    用 Autolisp 实现 AutoCAD 中尺寸公差及表面粗糙度的快 速标注 刘志存 ; 史登旺 [期刊名称] <成组技术与生产现代化> [年 ( 卷 ), 期] 2000(000)00 ...

  3. pline加点lisp_[下载][原创]非常好用的AutoLisp工具集合(New)

    [下载][原创]非常好用的AutoLisp工具集合(New) ********************************************************* * AyungerSt ...

  4. 陈伯雄lisp_基于AutoLisp的AutoCAD二次开发自动生成系统图

    龙源期刊网 http://www.qikan.com.cn 基于 AutoLisp 的 AutoCAD 二次开发自动 生成系统图 作者:郎建山 金江 来源:<科技视界> 2013 年第 2 ...

  5. CAD自控lisp_基于AutoLisp的AutoCAD二次开发自动生成系统图

    基于 AutoLisp 的 AutoCAD 二次开发自动生成系统图 [摘 要]本文主要阐述了应用 autolisp 语言二次开发 autocad 自动生成系统图的实现方案. [关键词] autocad ...

  6. python绘制缓和曲线_在cad中画缓和曲线的绘制方法

    缓和曲线具有以下作用:曲率连续变化,便于车辆遵循:离心加速度逐渐变化,旅客感觉舒适:超高横坡度及加宽逐渐变化,行车更加稳定:与圆曲线配合,增加线形美观.故,缓和曲线在公路.桥梁.铁路及高速铁路中广泛采 ...

  7. cad抠图 lisp_用Autolisp对AutoCAD进行二次改造

    刚开始工作时候,经常使用 AutoCAD2002 设计, 制作标题栏.画粗糙度符号是一个重复性的工作 而 CAD 到又没有提供相关的命令可以让我们的操作一步到位,很不方便 于是,我就利用在学校里所学的 ...

  8. C#窗体应用中使用ZedGraph曲线插件绘制图表

    场景 ZedGraph ZedGraph 是一个开源的.NET图表类库, 全部代码都是用C#开发的.它可以利用任意的数据集合创建2D的线性和柱形图表. 控件下载 https://download.cs ...

  9. cad自动运行dvb lisp_当在AutoCAD中保存文件时自动执行AutoLISP脚本程序 | 坐倚北风...

    在AutoCAD中我们可以使用AutoLISP的vlr-command-reactor函数来监听文件的保存事件FileOnSave,当监听到此命令时可以自动执行AutoLISP脚本来完成相应的工作.整 ...

最新文章

  1. 计算机考研最后四十天,2021考研最后四十天冲刺复习攻略
  2. 解析导入表和IAT表
  3. 如何查看numpy库数组的:类型、数据类型、尺寸、形状、维度? (type、dtype、size、shape、ndim)
  4. Extjs 4.2 MVC+ThreeJs学习笔记(二)一个简单的ThreeJS场景
  5. 【转】wpf从我炫系列2----布局控件的使用(下)
  6. python路线选择试题_python例题练习
  7. 怎样把台式机变成虚拟服务器,怎么把文件传到虚拟主机
  8. 05-文件与流-课堂测试(四则运算)
  9. 关于《侏罗纪世界》你应该知道的18件事
  10. 白话搭建一个简单的微服系统
  11. vscode快速打开html页面_VSCode安装和测试
  12. layui radio 赋初始值
  13. UDP通信——通过UDP进行转发
  14. 泰国之旅随感(r1笔记第70天)
  15. 概率论基础 - 6 - 切比雪夫不等式
  16. 不使用80,443,端口,域名还需要备案吗?域名没有备案应该怎么选服务器。
  17. VS2017的C++开发心得(五)项目开发的文件夹管理
  18. centos 时间自动同步_centos 设置时间同步
  19. UR机器人(5)-使用变量
  20. 听说现在赶火车刷脸就进站了!Out,跟脸有关的最新玩法是你说什么,表情包就演什么

热门文章

  1. 0网卡开启_中标麒麟Linux v7系统下设置双网卡bond或team绑定详细过程
  2. 计算机等级的有关知识,计算机等级二级基础知识.doc
  3. python 读取文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multib
  4. Xamarin Mono for VS开发窗体标题(Title)乱码解决方案
  5. Bringing up interface eth0: Device eth0 does not seem to be presen
  6. Javascript设置对象属性为只读
  7. 使用SqlCommandBuilder
  8. 个人空间风格模版php,home.php这个页面风格模板在哪里修改?答案:space_home.html...
  9. L1-056 猜数字 (20 分)
  10. java不同环境_Spring Boot系列 – 5. 不同的环境使用不同的配置