用Autolisp对AutoCAD进行二次开发
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用AutoLISP对AutoCAD进行二次开发
一、什么是CAD的二次开发?(为什么需要对CAD进行二次开发)
我们在设计、绘图时采用AutoCAD、ProE、Solidwork、UG等设计软件,在复杂问题或特殊用途的设计中,各种软件的原有功能往往难以解决问题,例如CAD里没有直接绘制正弦曲线和抛物线等曲线的命令。因此,只是会使用各软件的基本功能是不够的,根据我们的特殊用途进行软件的用户化定制和二次开发,往往能够大大提高工作效率和技术水平。
二、什么是AutoLisp?如何用其进行二次开发?
AutoLISP是由Autodesk公司开发的一种LISP程序语言,LISP是List Processor的缩写。通过autolisp 编程,可以节省工程师很多时间。AutoLISP语言作为嵌入在AutoCAD内部的具有智能特点的编程语言,是开发应用AutoCAD不可缺少的工具。
当前AutoCAD的二次开发工具主要有:VisualLisp(它是AutoLisp的集成开发环境)、VBA、ObjectARX和.NET API等,这里只介绍AutoLisp。
下面由浅入深地介绍一下如何应用AutolLisp进行二次开发。
最简单的应用是在命令行中编写和执行lisp语句,进行简单的计算、绘图、查询等操作。
稍复杂些的就要把语句(代码)放到扩展名为lsp的文件中,用的时候先加载到CAD中,然后输入自定义的函数名执行。
当开发的程序越来越多,就需要进行有效的管理,使我们能方便的找到和应用这些程序。到那个程度的时候就需要用到用户自定义的工具按钮、菜单和对话框了。
图1 根据程序数量选择二次开发形式
(1)在命令行中编写和执行程序
例1:(+ 2 3)
例2:(setq a 2)
(setq b 3)
(+ a b)
例3:(setq a 2)(setq b 3)(+ a b)
例4:(setq p1 (list 0 0))(setq p2 (list 200 200))(command “line” p1 p2 “”) ;;语句之间不空格
例5:(setq p1 (list 0 0)) (setq p2 (list 200 200)) (command “line” p1 p2 “”) ;;语句之间空格
;; 表示语句(程序代码)的注释
第一步:在文本中编写和保存AutoLISP程序,文件扩展名为.lsp
(defun c:sin(/ lp lpx lpy N x step) ;; c:和自定义函数名sin之间不能有空格
(initget 1)
(setq lp (getpoint "\n Left point:")
lpx (car lp) lpy (cadr lp))
(initget 7)
(setq N (getint "\Nnumber of cyles:"))
(setq x 0 step 0.02)
(command "pline" )
(While (< x (* 2 N pi))
(command (list (+ (car lp) x)
(+ (cadr lp)(sin x)))
)
(setq x (+ x step))
)
(command "line" lp (list (+ lpx (* 2 N pi)) lpy) "")
(command "line" lp (list lpx (+ lpy 2))(list lpx (- lpy 2)) "") ;;注意这里用的是空的双引号“”,中间不空格
(command)
)
第二步:AutoLISP程序的加载和运行
在命令行中输入appload(或ap),在弹出的“加载/卸载应用程序”对话框中选择第一步保存的*.lsp 文件。单击“加载” “关闭”。
执行自定义函数前先将“对象捕捉”功能关闭。运行自定义函数的过程和执行CAD标准函数(命令)是一样的,只要在命令行中输入函数名即可。
(3)添加用户工具按钮
工具按钮能够快速、高效启动AutoLisp的应用程序。为了更方便的管理和应用我们的lisp应用程序。我们要学会创建用户自定义工具栏,并向新工具栏中添加新的工具按钮,点击这些按钮便可以很方便地执行我们自己定义的应用程序。
第一步:创建新工具栏
将鼠标移动到任意一个工具按钮上,单击鼠标右键。
在弹出的菜单最下端找到“自定义(C)...”对话框,左键单击。弹出“自定义用户界面”对话框。右键单击工具栏图标新建一个用户自定义工具栏,命名这个新工具栏。
第二步:向新工具栏添加按钮
在“自定义用户界面”对话框的左下角的命令列表栏中单击“新建”按钮建立一个新命令。按住左键不放,将新的命令按钮拖到第一步新建的工具栏内。这样工具栏里便添加了第一个命令,用此方法可以给工具栏添加多个新按钮。
第三步:定制工具按钮属性
新的工具按钮刚添加到工具栏内的时候是不能执行命令的,需要给它添加属性。
在“自定义用户界面”对话框的右侧可以编辑按钮的图像和属性。其中最重要的是“特性”里的“宏”一栏。将上面pwx.lsp文件的路径和命令名输入到“宏”后面的文本框内,例如:^C^C^P(load"/F:/Autolisp Program/My Lisp/sin.lsp");sin;^P
单击确定退出“自定义用户界面”对话框。这时在CAD的工具栏中会多出一个用户刚才自定义的新
(4)添加用户自定义菜单
当我们开发出的程序越来越多的时候,用工具按钮的形式来执行它们会占用绘图的空间,而且也不便于管理。这种情况下就有必要将众多的程序分类,相同种类的程序写入同一个菜单文件中,便于将来查找和执行。具体的开发步骤为:
第一步:打开Visual LISP编辑器
图2 打开Visual LISP编辑器
第二步:创建用户自定义的菜单文件
打开Visual LISP编辑器后,在文本框中输入生成用户自定义菜单的代码,写好后将文件保存,扩展名为.mnu。例如:
***MENUGROUP=MYLISP ;;用户自定义菜单组名MYLISP
***pop1 ;;第一个菜单
[中间包] ;;第一个菜单名称
[初等函数曲线绘制] ^C^C^P(load "curve of function")(load "csin")(load "ccos")(load "cparabola")(curve_of_function) ;;命令的名称、加载操作和执行操作
[->复合函数曲线绘制];;子菜单名称,->表示生成的是子菜单
[抛物线与正弦曲线的叠加] ^C^C^P(load "cpara_sine") (cparasine)
[抛物线与余弦曲线的叠加] ^C^C^P(load "cpara_cos") (cparacos)
[--] ;;各命令之间的横线
[<-圆环面积与内径的关系曲线(&C)] ^C^C^P(load "cirque") (cirque) ;;<-表示子菜单结束
[挡板内外面积比的计算] ^C^C^P(load "stotal")(load "sdio")(stotal)