杨贺 陈令 李铁成
上汽通用五菱汽车股份有限公司青岛分公司 山东青岛 266555
【摘要】:本文主要基于AutoLISP的CAD应用插件的开发实例,对通过autolisp编程,生成相应插件,提高绘图效率,做简单介绍。
【关键词】:AutoLisp;AutoCAD;插件
1. AutoLisp介绍
1.1在工程设计领域中, AutoCAD得到了普遍应用, 然而, 人们总会感到作图效率还不够高, 这是因为 AutoCAD是一个通用绘图软件, 不具备专业特色。AutoCAD开放的结构为不同的使用者留出了广阔的空间,提供了许多二次开发工具,AutoLISP是其中最强的一个, 可以利用 AutoLISP开发出具有专业特点的高效率的应用软件。[1] AntoLISP是向普通用户提供的大众化工具,并不苛求用户一定要具有程序员水平。普通AutoCAD用户只要经过简单培训,即可使用AutoLISP。[2]
1.2 AutoLISP是由Autodesk公司开发的一种LISP程序语言,LISP是List Processor的缩写。通过autolisp编程,可以提高绘图效率。使用AutoLISP语言编制各种满足特定要求的应用程序软件包已经非常普遍。
1.3在AutoLISP中,提供了编程以及数学计算所需的大部分数学函数,可以对数字进行加、减、乘、除以及三角函数的运算等。
2. 常用AutoLisp函数介绍
.png)
3.基于AutoLisp的插件开发步骤
3.1 VisualLisp编辑器打开,以AutoCad2016为示例,打开菜单栏-“管理”-单击“VisualLisp编辑器”,见图3.1
.png)
3.2调出VisualLisp控制台,见图3.2
3.3程序编写,根据需要实现的功能,遵守编程规则,编写相应程序。编程完毕后,在CAD的命令栏中输入该程序名称,例如‘vvv’,即可根据提示完成该命令需要执行的操作。
.png)
4.开发沿曲线自动阵列插件程序实例简介
4.1插件开发目的
AutoCad自身只有矩形阵列、环形阵列、路径阵列,使用以上阵列功能,可以实现简单的阵列功能。如果需要阵列图形中有两固定点一直与路径重合,再进行路径阵列,以上三个阵列功能不能够实现,需要编写相关功能插件,实现阵列目的。
4.2 Visual lisp编程指令实例说明
“defun c:hhh ()”命名函数defun用于定义函数;“setq e1 (car (xdrx_entsel((0 . "insert")))”用来拾取需要在曲线上阵列的块;“setq e (car (xdrx_entsel ((0 . "*line,arc,ellipse,circle")))”用来拾取需要阵列的曲线路径;“setq p3 (getpoint)”用来拾取曲线内第一点;“setq ept (getpoint)”用来拾取曲线内第二点;“setq x1(car p3) y1(cadr p3)”获取p3点的坐标值;“setq p1 (getpoint)”选取阵列块与曲线重合的第一点;“setq p2 (getpoint)”选取阵列块与曲线重合的第二点;“(setq n 0) (repeat 20 (setq n(+ n 1)) (setq p4(list x1 (+ y1 (* n 50))))”设置p4点,x坐标不变,y坐标相对于p3的y坐标值每次加50mm重复20次;“(setq n 0)(repeat 20(setq n(+ n 1))(setq p4(list (+ x1 (* n 50) y1)))”设置p4点,y坐标不变,x坐标相对于p3的y坐标值每次加50mm重复20次;“(xdrx_document_setprec 1e-3 1) (while (setq ept1 (xd::curve:getpointatchord e p4 ept(distance p1 p2) (xdrx_entity_copy e1) (xdrx_entity_align (entlast) p1 p2 p4 ept1)”阵列图形在选定曲线上,两固定点与曲线保持重合,完成阵列,实现需要的轨迹仿真。
以上实例简单介绍了Lisp程序的开发流程:通过问题,提出需求,根据需求查阅Lisp函数相应功能,最后完成程序编写,实现插件开发,解决问题。
4.3Lisp程序加密
在需要对自主开发程序源代码保密时,可以将Lisp程序编译成VLX格式,及可以实现对Lisp程序的加密。首先,按照图3.1指示或者在命令栏VLISP,打开VisualLisp编辑器;然后,依次点击:文件->生成应用程序->新建应用程序向导->简单(应用程序位置点“浏览”指定将生成程序存放置的位置)->应用程序名称(建议按照功能缩写,不要与原有指令重复)->下一步->添加(指定将要编译的LSP格式文件)->下一步->编译应用程序(打勾)->完成。
4.结束语
基于上述可知,随着CAD制图软件的大量应用,为了能够降低人工制图时间,提高制图效率。在面临重复和高强度工作时,可以思考使用AutoLISP语言,编写相关应用插件,实现工作目的。在面对实际工作需求时,通过手册或者网络搜索,找到能够实现相应功能的lisp函数。面对问题,有的放矢,通过实践,加深对AutoLISP语言的理解与运用。
参考文献
【1】《AutoLISP语言程序设计》 化学工业出版社 郭秀娟[等]
【2】《AutoLISP(12.0版)程序设计》 地震出版社 霍新民[等]