用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 中,然后输入自 定义的函数名执行。 当开发的程序越来越多,就需要进行有效的管理,使我们能方便的找到和应用这些程序。到那个程度 的时候就需要用到用户自定义的工具按钮、菜单和对话框了。
:edit_box{ label="即 mm/s(1/2)"; key="K"; fixed_width=true; width=5; alignment=left; } } :row{
:button{ label="计算"; key="begin"; fixed_width=true; width=5; } ok_only; } } } 重要的一步:工具菜单选项文件支持文件搜索路径(要包含上述所建各类文件的路径) (6)编译及维护 AutoLISP 程序,形成独立应用程序 在 Visual LISP 中,用户可以编译自己的程序,并创建一个单独的可供其他用户使用的可执行模块。 Visual LISP 可将 AutoLISP 程序文件编译成可执行的程序模块以提高程序运行效率和源代码的安全性。 Visual LISP 提供了一套编译器来解决这些问题。通过这个编译器,用户可以将源代码编译成可执行机器码 文件,即 FAS 文件。源代码在编译后,可以直接在 Auto CAD 中加载运行,运行效率提高了,而且程序源 代码是保密的,甚至于源代码中的字符串与符号也会被 Visual LISP 的编译器加密。 此外,Visual LISP 还可以将更复杂的 AutoLISP 应用封装进 Visual LISP 可执行文件(VLX)中。VLX 文件中还可以包括其他的资源文件,例如 VBA 和 DCL 文件以及编译过的 AutoLISP 文件。
[结晶器] [齿轮绘制] ^C^C^P(load "gear") (gear)
;;第二个菜单名称
***pop3 ;;第三个菜单 [凝固计算] ;;第三个菜单名称 [计算凝固系数 K] ^C^C^P(load "solidification_coefficient") (solidification_coefficient) ;;文件的末尾必须是一个空行(回车) 第三步:加载用户自定义的菜单程序 在 cad 绘图界面的命令行中输入命令:menuload,在弹出的对话框中浏览选择要加载的菜单文件,单 击加载,这时可以看到绘图界面的菜单栏上出现了用户自定义的菜单名。如图 3 所示。
label="输入合金的热物性参数和凝固温度"; :row{ :column{ :row{ :edit_box{ label="导热率λ key="lambda"; fixed_width=true; width=5; } :text{ label="W/(m·K)"; } } :row{ :edit_box{ label="结晶潜热 L"; key="L"; fixed_width=true; width=5; } :text{ label="J/kg"; } }
";
:row{ :edit_box{ label="密度ρ key="rho"; fixed_width=true; width=5; }
";
:text{ label="kg/m3"; } }
} } :row{ :column{ :row{ :edit_box{ label="热容 c key="c"; fixed_width=true; width=5; alignment=centered; } :text{ label="J/(kg·K)"; } } :row{ :edit_box{ label="合金液相线温度 T_L"; key="T_L"; fixed_width=true; width=5; alignment=centered; } :text{ label="K"; } }
第一步:在文本中编写和保存 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 的工具栏中会多出一个用户刚才自定义的新 按钮。单击它便可以执行相应的程序。
图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 “”) ;;语句之间空格 ;; 表示语句(程序代码)的注释 (2)用 lisp 文件编写和执行程序
ຫໍສະໝຸດ Baidu
(4)添加用户自定义菜单 当我们开发出的程序越来越多的时候,用工具按钮的形式来执行它们会占用绘图的空间,而且也不便 于管理。这种情况下就有必要将众多的程序分类,相同种类的程序写入同一个菜单文件中,便于将来查找 和执行。具体的开发步骤为: 第一步:打开 Visual LISP 编辑器
图 2 打开 Visual LISP 编辑器 第二步:创建用户自定义的菜单文件 打开 Visual LISP 编辑器后,在文本框中输入生成用户自定义菜单的代码,写好后将文件保存,扩展名 为.mnu。例如: ***MENUGROUP=MYLISP ;;用户自定义菜单组名 MYLISP ***pop1 ;;第一个菜单 [中间包] ;;第一个菜单名称 [ 初 等 函 数 曲 线 绘 制 ] ^C^C^P(load "curve of function")(load "csin")(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) ***pop2 ;;第二个菜单 "ccos")(load
图3
加载用户自定义的菜单文件
(5)绘制对话框――DCL 语言 第一步:打开 Visual LISP 编辑器 操作同图 2。 第二步:创建用户自定义对话框文件 打开 Visual LISP 编辑器后,在文本框中输入生成用户自定义对话框的代码,写好后将文件保存,扩展 名为.dcl。例如: solidification_coefficient:dialog { label="计算凝固系数 K"; :text{ label="说明:根据合金的热物理特性计算凝固系数 K"; } :boxed_row{
";
:row{ :edit_box{ label="凝固层表面温度 T_0"; key="T_0"; fixed_width=true; width=5; alignment=centered; } :text{ label="K"; } } } }
} :boxed_column{ :row{
:edit_box{ label="凝固系数 K—m/s(1/2)"; key="S"; fixed_width=true; width=5; alignment=left; }
一、什么是 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 中,然后输入自 定义的函数名执行。 当开发的程序越来越多,就需要进行有效的管理,使我们能方便的找到和应用这些程序。到那个程度 的时候就需要用到用户自定义的工具按钮、菜单和对话框了。
:edit_box{ label="即 mm/s(1/2)"; key="K"; fixed_width=true; width=5; alignment=left; } } :row{
:button{ label="计算"; key="begin"; fixed_width=true; width=5; } ok_only; } } } 重要的一步:工具菜单选项文件支持文件搜索路径(要包含上述所建各类文件的路径) (6)编译及维护 AutoLISP 程序,形成独立应用程序 在 Visual LISP 中,用户可以编译自己的程序,并创建一个单独的可供其他用户使用的可执行模块。 Visual LISP 可将 AutoLISP 程序文件编译成可执行的程序模块以提高程序运行效率和源代码的安全性。 Visual LISP 提供了一套编译器来解决这些问题。通过这个编译器,用户可以将源代码编译成可执行机器码 文件,即 FAS 文件。源代码在编译后,可以直接在 Auto CAD 中加载运行,运行效率提高了,而且程序源 代码是保密的,甚至于源代码中的字符串与符号也会被 Visual LISP 的编译器加密。 此外,Visual LISP 还可以将更复杂的 AutoLISP 应用封装进 Visual LISP 可执行文件(VLX)中。VLX 文件中还可以包括其他的资源文件,例如 VBA 和 DCL 文件以及编译过的 AutoLISP 文件。
[结晶器] [齿轮绘制] ^C^C^P(load "gear") (gear)
;;第二个菜单名称
***pop3 ;;第三个菜单 [凝固计算] ;;第三个菜单名称 [计算凝固系数 K] ^C^C^P(load "solidification_coefficient") (solidification_coefficient) ;;文件的末尾必须是一个空行(回车) 第三步:加载用户自定义的菜单程序 在 cad 绘图界面的命令行中输入命令:menuload,在弹出的对话框中浏览选择要加载的菜单文件,单 击加载,这时可以看到绘图界面的菜单栏上出现了用户自定义的菜单名。如图 3 所示。
label="输入合金的热物性参数和凝固温度"; :row{ :column{ :row{ :edit_box{ label="导热率λ key="lambda"; fixed_width=true; width=5; } :text{ label="W/(m·K)"; } } :row{ :edit_box{ label="结晶潜热 L"; key="L"; fixed_width=true; width=5; } :text{ label="J/kg"; } }
";
:row{ :edit_box{ label="密度ρ key="rho"; fixed_width=true; width=5; }
";
:text{ label="kg/m3"; } }
} } :row{ :column{ :row{ :edit_box{ label="热容 c key="c"; fixed_width=true; width=5; alignment=centered; } :text{ label="J/(kg·K)"; } } :row{ :edit_box{ label="合金液相线温度 T_L"; key="T_L"; fixed_width=true; width=5; alignment=centered; } :text{ label="K"; } }
第一步:在文本中编写和保存 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 的工具栏中会多出一个用户刚才自定义的新 按钮。单击它便可以执行相应的程序。
图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 “”) ;;语句之间空格 ;; 表示语句(程序代码)的注释 (2)用 lisp 文件编写和执行程序
ຫໍສະໝຸດ Baidu
(4)添加用户自定义菜单 当我们开发出的程序越来越多的时候,用工具按钮的形式来执行它们会占用绘图的空间,而且也不便 于管理。这种情况下就有必要将众多的程序分类,相同种类的程序写入同一个菜单文件中,便于将来查找 和执行。具体的开发步骤为: 第一步:打开 Visual LISP 编辑器
图 2 打开 Visual LISP 编辑器 第二步:创建用户自定义的菜单文件 打开 Visual LISP 编辑器后,在文本框中输入生成用户自定义菜单的代码,写好后将文件保存,扩展名 为.mnu。例如: ***MENUGROUP=MYLISP ;;用户自定义菜单组名 MYLISP ***pop1 ;;第一个菜单 [中间包] ;;第一个菜单名称 [ 初 等 函 数 曲 线 绘 制 ] ^C^C^P(load "curve of function")(load "csin")(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) ***pop2 ;;第二个菜单 "ccos")(load
图3
加载用户自定义的菜单文件
(5)绘制对话框――DCL 语言 第一步:打开 Visual LISP 编辑器 操作同图 2。 第二步:创建用户自定义对话框文件 打开 Visual LISP 编辑器后,在文本框中输入生成用户自定义对话框的代码,写好后将文件保存,扩展 名为.dcl。例如: solidification_coefficient:dialog { label="计算凝固系数 K"; :text{ label="说明:根据合金的热物理特性计算凝固系数 K"; } :boxed_row{
";
:row{ :edit_box{ label="凝固层表面温度 T_0"; key="T_0"; fixed_width=true; width=5; alignment=centered; } :text{ label="K"; } } } }
} :boxed_column{ :row{
:edit_box{ label="凝固系数 K—m/s(1/2)"; key="S"; fixed_width=true; width=5; alignment=left; }