建立应用程序清华CAD二次开发LISPPPT课件_第1页
建立应用程序清华CAD二次开发LISPPPT课件_第2页
建立应用程序清华CAD二次开发LISPPPT课件_第3页
建立应用程序清华CAD二次开发LISPPPT课件_第4页
建立应用程序清华CAD二次开发LISPPPT课件_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

第7章建立应用程序 AotuCAD既可以将直接加载的AutoLISP源代码解释执行 也可以通过编译器先将AutoLISP源代码编译为可执行程序 然后加载执行 前者的优点是可随时测试或修改源代码 可以利用所有的调试程序的工具 后者的优点是提高了执行速度 对源代码保密 如果确认已加载过的AutoLISP源代码运行正常 则应将该源代码编译为可执行的机器代码文件 该文件的扩展名为 fas 是只有机器才能认识的目标文件 这样 不仅提高了程序的加载和运行速度 也起到了保护源代码的作用 VisualLISP还可生成更复杂的扩展名为 vlx 的可执行文件 该文件是包括已编译的AutoLISP代码和dcl vba等资源文件 是一个打包的应用程序 VisualLISP可以用vlisp compile函数编译单个的AutoLISP文件 也可以用 生成应用程序向导 将多个AutoLISP文件编译成单个的 fas 和 vlx 文件 7 1通过VisualLISP compile函数编译单个文件该函数的调用格式为 vlisp compile mode filename out filename 其中 mode为编译的模式 filename为源文件的名字 out filename为编译后输出的 fas 类型的执行文件的名字 1 选择编译模式mode参数指定编译模式 它可以是以下三种编译模式之一 1 st标准编译模式标准编译模式可以生成最小的执行文件 它适合于只包括单个文件的程序 2 lsm优化并间接链接 3 lsa优化并直接链接优化选项可使生成的的编译文件效率更高 它适合于较大而且复杂的程序 优化的基本功能如下 对已编译函数直接引用 而不是引用函数名 该功能可提高代码的运行速度并防止在运行时对函数的重定义 去掉函数名使得已编译代码更安全 减少程序的长度和缩短程序的加载时间 去掉所有局部变量名并对其直接链接引用 同样使得已编译代码更安全 并减小程序的大小和加载程序所用的时间 2 确定要编译的LSP源文件如果源文件在AutoCAD支持的搜索路径下 可以不包括路径名 选择AutoCAD菜单Tools Options 然后打开Files选项卡并选取SupportFileSearchPath 可设置文件搜索路径 例如 已设置文件搜索路径为 d user 就可以用表达式 vlisp compile st sample lsp 编译驱动器D的 user1 目录下的文件 sample lsp 如果 d user 不是文件搜索路径 那么 在指定源文件时必须包括完整的路径名 如 vlisp compile st d user example lsp 或 vlisp compile st d user example lsp VisualLISP默认源文件的扩展名为 lsp 3 确定编译器生成的输出文件名如果未指定输出文件名 编译器生成的文件和源文件同名同路径 扩展名为 fas 例如 vlisp compile st d user example lsp 编译生成的文件在 d user 路径下 文件名为 example fas 如果指定了输出文件名但没有指定输出文件的路径 VisualLISP将把输出文件放在AutoCAD的安装目录下 例如 假定安装目录为 d autocad2006 用表达式 vlisp compile st sample lsp sample fas 编译生成的sample fas 在 d autocad2006 路径下 通常 应该指定输出文件的完整路径 可以省略输出文件的扩展名 例如 vlisp compile st d user1 example1 d user2 example2 这样可以保证将输出文件放到指定的目录下 4 举例假定AutoLISP源文件的名字是example1 lsp 存放在驱动器d的user1目录下 文件的内容是定义绘制螺钉的命令 命令的名字是screw 编译后的执行文件名字是example2存放在驱动器d的user2目录下 1 在AutoCAD的Command 或控制台 提示下 调用vlisp compile函数 vlisp compile st d user1 example1 d user2 example2 以标准模式编译驱动器d的user1目录下的LSP文件 example1 lsp 在驱动器d的user2目录下得到可执行文件 example2 fas 2 了解编译输出 BuildOutput 窗口如果源程序没有错误 将在图7 1所示为编译输出窗口显示编译过程各阶段的有关信息 首先是源代码的语法和词汇检查 然后进行编译 并显示源文件中所定义的函数名或AutoCAD命令名 最后报告所生成的执行文件的名字和路径 如果编译器检查到错误 将在编译输出窗口显示出错信息并停止编译 如果编译器遇到重定义现有的AutoLISP函数或为受保护的符号赋值 将会发出警告消息 当编译器显示警告和出错信息时 双击该类信息 将自动切换到文本编辑窗口 并亮显含有该类出错信息的源程序代码 图7 1编译输出窗口 5 加载和运行已编译程序无论是 fas 文件 还是可以包含多个已编译程序的 vlx 打包文件 都可以在VisualLISP控制台窗口 AutoCAD命令提示处加载这些已编译的AutoLISP程序 也可以在AutoCAD菜单上选取Tools LoadApplication Tools AutoLISP Load或VisualLISP菜单上选取File LoadFile加载这些已编译的AutoLISP程序 1 在VisualLISP控制台窗口加载已编译的LSP程序 load d user2 example fas 如果不指定文件扩展名 load函数首先查找并加载扩展名为 vlx 的文件 如果没有找到 vlx 文件 load函数将查找并加载 fas 文件 如果没有找到 fas 文件 load函数将查找并加载 lsp文件 也可以选择VisualLISP菜单 File LoadFile 通过随后弹出的 Loadlispfile 对话框来选择要加载的文件 2 在VisualLISP控制台提示下 输入用括号括起的函数名 即可运行该函数 运行用LISP定义的AutoCAD命令 不能省略命令名前面的 C 而且必须用括号括起 在AutoCAD窗口调用函数时 输入的函数名和参数用括号括起 调用LISP定义的AutoCAD命令时 直接键入自定义的AutoCAD命令名 3 加载AutoLISP扩展函数VisualLISP对AutoLISP语言进行了扩展 这些扩展函数的名称以vla vlax 和vlr 开头 启动AutoCAD时它们不会被自动加载 在使用这些函数之前 必须调用vl load com函数加载这些AutoLISP扩展函数 其格式如下 vl load com 7 2用应用程序生成器创建应用程序应用程序生成器以向导的方式将AutoLISP源代码 已编译的AutoLISP程序 对话框定义文件等资源文件生成独立的可执行文件 该文件的扩展名为 vlx 称为VLX文件 应用程序生成器在创建VLX文件的同时 还生成了展名为 fas 的已编译的AutoLISP文件 扩展名为 prv 的程序生成文件 后者包括VisualLISP创建应用程序所需的所有指令 用应用程序生成器创建应用程序之前 应该对源程序进行完整的调试或试运行 以免在生成过程中出现的编译错误导致其不能完成创建工作 假定gear lsp是以对话框为输入界面的绘制齿轮的LISP源程序 gear dcl是定义输入齿轮参数的对话框文件 它们存放在驱动器d的user1目录下 创建的应用程序名字为 chilun 存放在驱动器D的user2目录下 用应用程序生成器创建可执行的程序步骤如下 1 调用应用程序生成向导从VisualLISP菜单上选择File MakeAplication NewAplicationWizard 启动向导 VisualLISP将显示图7 2所示向导模式对话框 图7 2向导模式对话框 2 确定向导模式应用程序生成向导有Simple 简单 和Expert 专家 两种模式 在简单模式下 只需指出LISP源文件 LISP编译文件或VisualLISP工程文件和要创建的文件名 在专家模式下 可以设置许多其他的选项 如果是单一LISP程序 应该选Simple模式 本例因为还要包含有对话框文件 因此选择Expert模式 单击Next按钮 将弹出图7 3所示应用程序路径对话框 图7 3应用程序路径对话框 3 确定待建程序的位置和名称在图7 3所示应用程序路径对话框的ApplicationLocation编辑框填写应用程序所处的位置 目录 可以通过Browse 浏览 按钮在目录树上指定应用程序所处的位置 也可以在文本框中输入完整的路径名 例如 d user2 在ApplicationName编辑框填写要创建的应用程序名 例如 chilun 这样将在d user2 目录下创建应用程序文件chilun vlx和程序生成文件chilun prv 图7 4应用选项对话框 在简单模式和专家模式下都会出现图7 3所示应用程序路径对话框 单击Next按钮 弹出图7 4所示应用选项对话框 本例不打开SeparateNamespace切换开关 单击Next按钮将弹出图7 5所示的包含LISP文件对话框 5 确定LISP文件的类型LISP文件可以是AutoLISP源代码文件 编译AutoLISP文件 FAS 或VisualLISP工程文件三种类型 通过图7 5所示的包含LISP文件对话框的下拉菜单确定LISP文件类型 图7 5包含LISP文件对话框 例如选择了Lispsourcefiles类型 并且单击Add按钮 将弹出图7 6所示添加lisp源文件对话框 6 添加lisp源文件可以使用标准的Windows文件选取方法来选取多个文件 在图7 6所示对话框上选取gear lsp文件之后 单击打开按钮可以将该文件添加到应用程序中 见图7 7所示包含Lisp文件的对话框 如果想继续添加其他类型的文件 先从下拉列表处选择文件类型后再单击Add按钮 图7 6添加lisp源文件对话框 如果指定的是AutoLISP源文件 VisualLISP在打包成VLX文件前先编译成FAS类型的文件 如果指定的是FAS类型的文件 则直接将其打包 如果指定的是PRJ类型的工程文件 则工程文件中的所有文件将根据其具体类型先编译再打包或直接打包成VLX文件 如果要从应用程序中删除文件 只需选取这些文件后单击Remove按钮即可 也可以在选取一个或多个文件后 单击鼠标右键并从快捷菜单中选择Remove项 图7 7包含Lisp文件的对话框 应用程序文件的加载顺序和它们在 LISPFilestoInclude 对话框中列出的顺序相同 如果在加载时调用某函数 则必须在调用该函数前定义它 在这种情况下 应该把定义该函数的文件放在调用该函数的文件之前 选取待调整的文件名 然后点取下列按钮即可 Top 移到列表顶端 Up 移到上一文件之前 Down 移到下一文件之后 Bottom 移到列表底端 也可以先选取待调整的文件名 然后单击鼠标右键 从随后弹出的快捷菜单上选取相应选项 如果是工程文件 因其内的源文件顺序已在工程文件内定义 只能通过修改工程文件以改变源文件的顺序 由于将应用程序生成向导确定为专家模式 因此 单击Next按钮 将弹出图7 8所示的包含资源文件对话框 图7 8包含资源文件对话框 7 添加资源文件通过添加资源文件对话框 可以用添加源文件的类似操作添加 移去 对话框控制DCL文件 DVB文件 文本文件等资源文件 如果添加的是LISP工程文件 在该工程文件中的所有文件都将被编译并包含到VLX文件 图7 9添加DCL文件对话框 点取图7 8所示对话框的下拉列表 选取DCLfiles 点取Add按钮 将弹出图7 9所示的添加DCL文件对话框 选取gear dcl文件 点取打开按钮 该DCL文件将被加入到应用程序中 见图7 10 图7 10包含资源文件对话框 单击Next按钮 将弹出图7 11所示的确定编译选项对话框 8 确定编译选项仅在专家模式下才出现图7 11所示确定编译选项如果选择了Standard 此为标准模式 将生成最小的输出文件 它适合于只包括单个文件的程序 如果选择了OptimizeandLink 此为优化和链接模式 可使生成的的编译文件效率更高 它适合于较大和较复杂的程序 图7 11确定编译选项对话框 本例选择两种模式均可 确定编译选项后 单击Next按钮将弹出图7 12所示的查看选项 编译应用程序对话框 9 创建应用程序这是应用程序生成向导的最后一步 单击Back按钮 返回到上一步 查看上一步的选择 单击Finish按钮 创建应用程序结束 图7 12查看选项 编译应用程序对话框 运行应用程序生成向导结束 在d user2路径下 生成了chilun prv chilun vlx和gear fas文件 其中chilun prv是包括VisualLISP创建应用程序所需的程序生成文件 gear vlx是打包的可执行文件 gear fas是编译gear lsp时生成的目标文件 加载gear vlx或gear fas 在 Command 提示下键入GEAR即可调用该应用程序绘制齿轮 如果只有AutoLISP文件 源文件或目标文件 在创建应用程序时 第 2 步应选择Simple 简单 作为向导的模式 这样可以省略第 4 7 和 8 步 7 3利用工程管理器管理和维护LISP文件AutoLISP应用程序通常都是由多个独立的LISP文件组成的 随着应用程序中文件数量的增加 对这些文件的管理和维护就变得很困难 在这种情况下 应该使用VisualLISP提供的最有效的工具 工程管理器 7 3 1工程管理器的功能工程管理器通过命名的工程对工程所包含的LISP文件进行管理和维护 一个工程在本质上就是一个LISP源文件表和一套如何编译这些文件的规则 工程管理器具有以下的功能 检查应用程序中哪些LISP源文件尚未被编译或者在上一次编译后又被修改过 并自动编译这样的一些文件 通过一个命名的工程的列表 可以很简单地查找并打开相关的文件 可以在一个工程的所有的文件中查找指定的源程序代码 可以通过直接链接多个源文件中的相同描述来优化编译结果 25 下面通过一个实例介绍利用工程管理器管理和维护多个LISP文件的有关操作 例7 1 定义以递规方式绘制旋转正六边形的命令 正六边形的旋转中心pc 最大边长lmax 最小边长lmin和旋转角alf是交互输入的参数 正六边形在旋转过程中 除了最外层的正六边形之外 每一个正六边形的顶点都在前一个正六边形的边上 当正六边形的边长缩短到近似最小边长lmin时 绘制结束 见图7 13 a 从图7 13 b 可以看出每个正六边形与旋转后的下一个正六边形的边长之间具有以下的关系 26 a b 图7 13以递归方式绘的制旋转正六边形 为了演示多文件的操作 将该程序分别存放于两个文件 文件file1 lsp存放该程序的主函数部分 主函数定义了名字为r hexagon的AutoCAD命令 文件file2 lsp定义了名字为hexagon的函数 函数hexagon被主函数调用 它们都存放在d盘的user1目录下 27 文件file1 lsp的源代码如下 defunc r hexagon pclmaxlminalf setvar cmdecho 0 关闭普通命令提示信息 setvar blipmode 0 关闭光标痕迹 setvar osmode 0 关闭对象捕捉状态 setqpc getpoint n输入正六边形的旋转中心 setqlmax getdistpc n输入正六边形的最大边长 setqlmin getdistpc n输入正六边形的最小边长 setqalf getanglepc n输入正六边形的旋转角 hexagonpclmaxlmin0 0 调用递归方式绘制旋转正六边形的函数 princ 静默退出 28 文件file2 lsp的源代码如下 defunhexagon pcllminphi 变元phi是正六边形的初始角度 command pline polarpcphil polarpc phi pi3 0 l polarpc phi pi1 5 l polarpc phipi l polarpc phi pi0 75 l polarpc phi pi0 6 l c if llmin progn setql l cosalf sinalf 0 5773503 下一个正六边形的边长 setqphi phialf 下一个正六边形的旋转角度 hexagonpcllminphi 绘制下一个正六边形 29 7 3 2创建一个工程1 创建一个工程文件选择菜单Project Newproject 将弹出图7 14所示的新工程对话框 此对话框用于确定新工程的路径和文件名 例如输入工程的名字为rh 存放在d盘的user2目录下 图7 14新工程对话框 30 2 向工程添加LISP源文件单击图7 14新工程对话框的保存按钮 将弹出图7 15所示的工程特性对话框 该对话框有工程文件和编译选项两个选项卡 工程文件选项卡用于向工程添加LISP源文件 图7 15工程特性对话框 31 图7 15所示为工程文件选项卡 通过按钮指定LISP源文件的路径 路径下方的列表显示了该路径下所有的LISP文件名 选取该列表的一个或多个文件 单击按钮 被选的文件就会转移到右边的列表内 右边的列表显示了该工程当前包含的所有LISP文件名 如果选取右边列表的一个文件 单击按钮 被选的文件就会从当前的工程中移回原处 按钮Top Up Down和Bottom用于排列LISP文件在列表框中的顺序 该顺序即为加载这些文件的顺序 例如 在图7 15所示为工程文件选项卡上单击按钮 指定LISP源文件的路径为d盘的user1 路径下方的列表内显示了user1路径下的LISP文件名 选取该列表的文件file1和file2之后 单击按钮 文件file1和file2将移至右边的列表作为rh工程的成员 单击确定按钮 将弹出图7 16所示的工程窗口 名字为rh的工程创建完毕 同时在d盘的user2目录下得到了名字为rh prj的工程文件 32 7 3 3工程窗口工程窗口的标题显示了该工程的名字 列表框内显示了该工程包含的所有的LISP源文件的名字 双击列表框内的任意一个文件名 无论文件是否打开 即可激活包含该文件的文本编辑窗口 图7 16工程窗口 工程窗口的工具栏上有5个按钮 它们分别具有以下的功能 弹出图7 15所示的工程特性对话框 通过该对话框修改该工程的特性 33 加载工程中所有经过编译的 fas文件 如果某些LISP文件尚未被编译 则显示如图7 17所示的是否编译这些文件的询问信息 单击按钮 是 则首先编译这些文件 然后将其加载 单击按钮 否 则直接加载这些LISP源文件和已经存在的 fas文件 假定文件file1 lsp和file2 lsp尚未被编译 单击此按钮 在图7 17所示的询问框中单击按钮 是 则首先编译这两个文件 然后加载刚生成的file1 fas和file2 fas 这时在AutoCAD的 Command 提示下 键入r hexagon命令即可绘制旋转正六边形 34 加载工程中所有的LISP源文件 编译工程中所有的在上一次编译后被修改过的文件 生成新的 fas文件 重新编译工程中所有的LISP 无论这些文件是否已经被编译过 以上操作也可以通过工程的快捷菜单的相应选项完成 将鼠标移至工程窗口的列表框内 单击鼠标右键 将弹出图7 18所示的快捷菜单 其中各菜单项的功能见下一页 图7 18工程窗口的快捷菜单 35 Edit 编辑选中的文件AddFile 打开工程特性对话框 向工程中添加文件Removefile 从工程中删除选中的文件Load 加载所选文件的 fas文件 如果所选文件尚未被编译 则加载其LISP源文件Loadsource 加载所选文件的LISP源文件Checksyntax 对所选的文件进行语法检查Touch 处理 所选的文件 经过 处理 的文件即使是新编译过的 单击图标时也要再次重新编译 Arrangefiles 根据该菜单项的下一级菜单提供的规则对工程中的成员排序MultipleSelection 单击该菜单项可以切换否具有多选功能的状态 若设置为多选 菜单项前加标记 Un Selectall 没有一个文件被选取时 选取所有文件 已经选取了一些文件时 放弃选取的那些文件Closeproject 关闭当前的工程Saveproctas 将当前的工程另存为其他名字 36 7 3 4在工程中查找源程序代码单击查找按钮 弹出图7 19所示的查找对话框 打开Project互锁按钮 通过Project下拉列表选取一个工程 在FindWhat列表输入或选择要查找的源程序代码 单击Find按钮 在图7 20所示的查找输出窗口报告了在指定工程的所有文件中查找的结果 图7 19查找对话框 37 例如 通过Project下拉列表选取工程rh 在FindWhat列表输入hexagon 单击Find按钮 在图7 20所示的查找输出窗口中显示了在文件file2 lsp和file1 lsp中含有源代码hexagon的4个表达式 双击其中任意一个表达式 就会激活该表达式所在的文件 并且亮显所查找的源代码 例如hexagon处于被选状态 图7 20查找输出窗口 38 7 3 5通过工程创建应用程序上一节介绍了用应用程序生成器创建应用程序的全过程 在第5步确定LISP文件的类型时 除了选择LISP源文件和编译过的LISP文件之外 还可以选择VisualLISP工程文件 通过指定的工程文件名 该工程所包含的所有文件都被添加到应用程序中 例如 通过图7 21所示的包含LISP文件对话框的下拉列表选择VisualLISPproject 单击Add按钮 通过随后弹出的AddVisualLISPprojectfiles对话框选择d盘的user2目录下的rh prj工程文件 见图7 21 最后单击Next按钮 进行下一步操作 此时d盘的user1目录下的文件file1 lsp和file2 lsp被添加到当前的应用程序 39 图7 21选择了VisualLISPproject选项的包含LISP文件的对话框 40 7 3 6优化应用程序通过VisualLISP编译选项的优化功能可以得到运行效率更高的编译代码 单击图7 15所示的工程特性对话框的编译选项标签 即可显示图7 22所示的编译选项卡 该选项卡包含以下的一些工程编译选项 图7 22编译选项卡 41 1 CompilationMode栏该栏的功能是确定设置编译模式 它有以下两个选项 lStandar 标准 选择标准模式时 编译器将保留函数和全局变量的符号名 因为这些符号可能被其他程序引用 在引用某一符号时 编译器将在符号表中查找这个符号 该模式比较适合于单个文件的程序 lOptimize 优化 选择优化模式时 编译器将认为工程中的所有文件将最终

温馨提示

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

评论

0/150

提交评论