我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:2019跑狗图高清彩图 > 执行例程 >

自动加载和运行 AutoLISP 例程

归档日期:07-05       文本归类:执行例程      文章编辑:爱尚语录

  可以在启动时加载 autolisp 程序,并在绘图任务期间在特定的时间执行命令或函数。

  基于 autocad 的产品将自动加载用户可定义的三个文件的内容:acad.lsp、acaddoc.lsp和当前自定义文件附带的 mnl 文件。

  默认情况下,acad.lsp文件仅在启动程序时加载一次,而acaddoc.lsp可随每个文档(或图形)一起加载。这样可使用户将加载“acad.lsp”文件和启动应用程序相关联,将“acaddoc.lsp”文件和文档或图形启动相关联。通过更改 acadlspasdoc 系统变量的设置,可以修改加载这些启动文件的默认方法。

  如果这些文件之一定义了特殊类型的s::startup函数,则此函数在图形初始化完成后立即运行。另外,appload 命令提供了“启动组”选项,用于加载指定的应用程序,而无需编辑任何文件。

  acad.lsp和acaddoc.lsp启动文件不随基于 autocad 的产品一起提供。这些文件可以由用户来创建和维护。

  注:从基于 autocad 2014 的产品开始,当 secureload 系统变量设定为 1 或 2 时,自定义应用程序必须在安全模式下工作。在安全模式下进行操作时,程序限制为从受信任的位置加载和执行包含代码的文件;受信任的位置由 trustedpaths 系统变量指定。

  当加载 autolisp 文件时,文件中的命令定义会占用内存,不管是否实际使用了这些命令。autolispautoload函数无需将整个程序加载到内存中即可使某个命令可用。将下列代码添加到acaddoc.lsp文件将自动加载cmds.lsp文件的 cmd1、cmd2 和 cmd3 命令和newcmd.lsp文件的 newcmd 命令。

  第一次在命令提示下输入自动加载的命令时,autolisp 将从关联文件加载完整的命令定义。autolisp 还提供用于 objectarx 应用程序的autoarxload函数。

  注:名称相似的 autolisp 启动文件的加载由它们的编辑时间决定。除非指定完整的文件名(包括文件扩展名),否则将加载最近编辑过的 lsp 文件。

  如果定期使用特定的 autolisp 程序,则可以创建一个“acad.lsp”文件。启动 autocad 时,将搜索acad.lsp文件的支持文件搜索路径。找到“acad.lsp”文件后,会将其加载到内存。

  由于“acad.lsp”文件用于特定应用程序的启动程序,因此“acad.lsp”文件中定义的所有函数和变量只能在第一个图形中使用。应该把需要在所有文档中使用的程序从“acad.lsp”文件移到“acaddoc.lsp”文件。

  可以用 acadlspasdoc 系统变量替代建议使用的acad.lsp和acaddoc.lsp功能。如果 acadlspasdoc 系统变量设定为 0(默认设置),则“acad.lsp”文件仅加载一次,即在应用程序启动时加载。如果设定为 1,则在创建新图形或打开现有图形时,将重新加载acad.lsp文件。

  “acad.lsp”文件可以包含一个或多个程序的 autolisp 代码,也可以仅包含一系列load函数调用。后一种方法比较合适,因为对它的修改比较简单。如果将以下代码另存为acad.lsp文件,则文件mysessionapp1.lsp、databasesynch.lsp和drawingmanager.lsp将在每次启动程序时加载。

  acaddoc.lsp文件用于与每个文档(或图形)的初始化关联。如果每次启动新图形(或打开现有图形)时都要加载某个 autolisp 程序库,则此文件很有用。

  每次打开图形时,autocad 都在库路径中搜索“acaddoc.lsp”文件。如果找到该文件,就把它加载到内存中。无论如何设置 acadlspasdoc,acaddoc.lsp文件始终与每个图形一起加载。

  大多数用户会对所有基于文档的 autolisp 例行程序采用“acaddoc.lsp”文件。程序根据库路径中定义的次序搜索acaddoc.lsp文件。因此,使用此功能,可以在每个图形目录下放置不同的acaddoc.lsp文件,这样可以对某些类型的图形或作业加载特定的 autolisp 程序。

  acaddoc.lsp文件可以包含一个或多个程序的 autolisp 代码,也可以仅包含一系列load函数调用。后一种方法比较合适,因为对它的修改比较简单。如果将下列代码另存为acaddoc.lsp文件,则在每次打开新文档时,将加载文件mydocumentapp1.lsp、build.lsp和counter.lsp。

  当程序加载自定义 (cui/cuix) 文件时,将搜索具有匹配文件名的 mnl 文件。如果找到该文件,就把它加载到内存中。此功能可以确保加载正确操作用户界面元素所需的 autolisp 函数。

  例如,自定义文件acad.cuix将查找文件acad.mnl,它可能定义在自定义文件中由用户界面元素所使用的许多 autolisp 函数。mnl 文件在“acaddoc.lsp”文件后加载。

  在此例中,调用princ函数可用于显示状态消息。第一次使用princ时,将在命令提示下显示如下信息:

  第二次调用princ函数将退出 autolisp 函数。如果不对princ函数进行第二次调用,则刚才显示的消息将会再次显示。像以前提到的那样,可以在load函数调用中包含onfailure参数作为额外的预防措施。

  用户可以定义 s::startup 函数,以在图形初始化之后执行所需的启动操作。

  启动 lisp 文件(“acad.lsp”、“acaddoc.lsp”和 mnl)在图形完成初始化之前已全部加载到内存中。通常这并不会造成问题,除非使用了command函数,此函数在图形初始化前不能保证正常工作。

  如果用户定义的函数s::startup包含在acad.lsp、acaddoc.lsp或 mnl 文件中,则输入新图形或打开现有图形时将调用此函数。因此,可以在 autolisp 启动文件中包含s::startup函数的定义以执行任何设置操作。

  例如,如果要通过添加一条消息然后切换到 bhatch 命令来替代标准 hatch 命令,请使用包含以下代码的acaddoc.lsp文件:

  图形初始化之前,用defun函数定义了 hatch 和 oldhatch ,命令的新定义。图形初始化之后,s::startup函数被调用并且 hatch 命令的标准定义被解除。

  注:还需提及的是,s::startup函数必须使用defun-q函数而不是defun定义。

  上面的代码把启动函数附加到现有的s::startup函数中,然后重定义s::startup函数以包含该启动代码。不管以前的s::startup函数是否存在,它都可以正常工作。

本文链接:http://guidoon.com/zhixinglicheng/235.html