AutoLISP 是一款功能强大的高效率工具,可允许自动执行工作流和扩展 AutoCAD LT 的功能。
虽然 AutoLISP 不是一项新功能,但从 2024 版本开始,它现在可以在 AutoCAD LT 中使用。
在 AutoCAD LT 中实现 AutoLISP 后,可以运行过去近 40 年开发的大多数 AutoLISP 程序,但有一些限制。尽管您不需要成为 AutoLISP 专家即可充分利用现有的许多程序,但学习 AutoLISP 编程是一项能够充分挖掘未开发生产力的技能。
AutoLISP 程序通常存储在扩展名为“.lsp”的文本文件中。在学习 AutoLISP 编程的一些基础知识之前,学习加载 AutoLISP 文件是在以下练习中先要学习的内容之一。您不再需要具备编程经验,即可利用 AutoLISP。在许多情况下,您只需了解一些新概念以及常用的 AutoCAD 命令和系统变量。
首次开始使用 AutoLISP 时,您可能会加载联机找到的 AutoLISP 文件或您公司创建的 AutoLISP 文件,而不是编写自己的程序。可以加载 AutoLISP 文件:
以下方法可用于在启动时加载 AutoLISP 文件、在打开图形时加载 AutoLISP 文件或手动加载 AutoLISP 文件。
启动时加载 | 手动加载 |
---|---|
|
|
如您所见,AutoCAD LT 能够以多种方式加载 AutoLISP 文件。使用的方法取决于绘图环境的配置。现在,我们将介绍如何使用“加载/卸载应用程序”对话框加载 AutoLISP 文件。
“APPLOAD”也可以在命令提示下输入。
如果安装有英语以外的其他语言(如“jp-jp”),则选择该文件夹,而不是“en-us”。
“acadlt2024doc.lsp”文件是特殊命名的 AutoLISP 文件之一,AutoCAD LT 会搜索该文件并在找到后将其加载到打开或创建的每个图形中。此 AutoLISP 文件包含产品使用的某些命令和自定义 AutoLISP 函数。这此处,我只是将它用作示例文件。
在消息框中,“已成功加载 acadlt2024doc.lsp。”显示在对话框的左下角和命令行窗口中。
这将启动由 AutoLISP 在“acadlt2024doc.lsp”中定义的 DDGRIPS 命令。DDGRIPS 命令会打开“选项”对话框,并将“选择”选项卡置为当前。
在上一练习中,您使用了 DDGRIPS 命令。我确信您想知道,如何知道已加载的 AutoLISP 文件中有该命令。有时,程序可能会使用一些将消息直接放在命令行窗口中的代码,以便您能够知道哪些命令已定义,哪些命令可以使用。但是,情况并非总是如此,您可能必须打开 AutoLISP 文件才能知道哪些命令已定义。可以使用“记事本”打开 AutoLISP 文件。
下图显示了在“记事本”中打开的“acadlt2024doc.lsp”文件的部分内容。可以在命令提示下输入的 AutoLISP 定义的命令带有前缀“c:”。“c:”后面的文字是命令的名称。
尽管在使用之前,不必将下载或创建的 AutoLISP 文件存储在特定位置,但建议您将这些文件存储在共享位置。与图形模板和块库一样,您需要确保团队或公司中的所有绘图员都有权访问相同的 AutoLISP 文件。您应考虑以下事项:
在确定用于存储 AutoLISP 文件的文件夹后,需要使用“选项”对话框的“文件”选项卡上的“支持文件搜索路径”和“受信任的位置”设置通知 AutoCAD LT 该文件夹所在的位置。出于以下原因,AutoCAD LT 需要知道 LSP 文件所在的位置:
以下步骤演示了如何将文件夹“C:\AutoLISP Files”添加到“支持文件搜索路径”和“受信任的位置”设置。稍后,将使用此位置来创建一个 LSP 文件,其中包含几个简短的 AutoLISP 程序。
列出的文件夹是 AutoCAD LT 在其他类型的自定义文件(用于存储填充图案、线型、命令别名,以及定义新的用户界面元素)中查找 AutoLISP 文件的位置。
该文件夹即会添加到列表的底部。
该文件夹即会添加到列表的底部。
除了将包含 AutoLISP 文件的文件夹标记为只读,并将这些文件夹标识为受信任的文件夹外,AutoCAD LT 还提供了一些其他设置,可帮助 AutoCAD LT 防范恶意代码和恶意软件。通过执行以下操作,可以访问 AutoCAD LT 的“安全”设置:
能够加载和管理您联机找到的 AutoLISP 文件或您公司已有的 AutoLISP 文件,这仅仅是在 AutoCAD LT 中使用 AutoLISP 提高工作效率的开始。从日常工作流中已有的 AutoLISP 文件开始使用 AutoLISP 程序后,可能会有一天您要对这些程序进行更改,甚至要编写自己的基本 AutoLISP 程序。
您可能会想,AutoLISP 是一种编程语言,而您并非程序员。虽然 AutoLISP 确实是一种编程语言,但学习和编写 AutoLISP 程序并不需要成为一名程序员。最简单的 AutoLISP 程序是一条允许您执行命令或更改系统变量值的语句。
AutoLISP 语句以左括号开头,以右括号结尾。以下是一个 AutoLISP 语句的示例,使用 ORTHOMODE 系统变量打开“正交模式”。
(setvar "orthomode" 1)
与命令和系统变量名称一样,可以在 AutoCAD LT 中的命令提示下输入 AutoLISP 语句。让我们来试一试:
禁用后,该状态栏按钮会灰显。
状态栏上的“正交模式”按钮现在应处于启用状态,且颜色为蓝色。
恭喜您编写了第一条 AutoLISP 语句!你现在是一名程序员了!
上一条 AutoLISP 语句利用 setvar 函数来设置系统变量的值。还有一个名为 getvar 的函数,可用于返回系统变量的当前值。setvar 和 getvar 函数只是数百个函数中的两个,可用于使用 AutoLISP 自动执行工作流。尽管有数百个函数构成 AutoLISP 编程语言,但您只需了解五个关键函数即可开始使用。其中两个您已经了解了。这五个函数如下所示:
现在,您已了解了五个关键函数,并已使用 setvar 函数设置了系统变量,下面让我们来了解如何使用 command 函数。在继续操作之前,您应该知道命令名称可以带有前缀“.”(句点)和“_”(下划线)字符,而命令选项名称可以带有前缀“_”(下划线)字符。这些字符用于确保提供的命令会按预期执行。
以下是这些字符含义的说明:
在以下步骤中,将使用 command 函数绘制一个圆并缩放到该图形范围。
将在当前图层上绘制一个半径为 5 个单位的圆,坐标为“5,5”。
如果图形中只有圆,则图形将缩放到该对象的范围,否则它将缩放到图形中所有对象的范围。
现在,您已见到一些 AutoLISP 语句,让我们来进一步了解示例 AutoLISP 语句的各个部分和语法:
虽然直接在命令提示下输入 AutoLISP 语句是开始学习 AutoLISP 的绝佳方式,因为可以实时获得反馈,但在命令提示下重复地重新键入语句并不是一种高效方式。允许您重用 AutoLISP 语句的一种方法是使用 defun 函数将这些语句编组为一个自定义命令。
让我们来试用一下 defun 函数,并定义一个名为“ZP”的自定义命令,该命令会缩放到图形的上一个视图:
“C:ZP”将输出到命令。
将恢复上一个视图。
现已恢复上一个视图。
尽管可以使用 defun 函数定义自定义命令以更容易地重用 AutoLISP 语句,但定义的命令仅在定义它们的图形中可用,同时图形保持处于打开状态。在下一节中,您将学习如何创建 AutoLISP 文件来存储自定义 AutoLISP 命令,以及可能要在加载 AutoLISP 文件时执行的其他 AutoLISP 语句。
可以在《AutoLISP参考手册》中详细了解五个关键函数以及数百个其他可用函数。
现在,您已知道如何在命令提示下输入 AutoLISP 表达式,下面我们来了解一下如何创建 AutoLISP 文件并存储 AutoLISP 表达式和自定义命令,以便在需要时使其可用。AutoLISP 文件是可以使用简单文本编辑器创建的纯 ASCII 文本文件,其文件扩展名为“.lsp”。不建议您使用诸如“Write”或“Word”之类的文字处理器,因为它可能会引入特殊字符和格式,从而在需要加载 LSP 文件时导致出现问题。
在接下来的练习中,您将学习如何创建 LSP 文件、将一些 AutoLISP 语句添加到 LSP 文件、加载 LSP 文件,然后尝试运行在 LSP 文件中定义的命令。除了前面提到的五个关键函数外,您还将了解以下内容:
现在,让我们来创建自己的文件,并将其加载到 AutoCAD LT 中:
; Zoom commands (defun c:ze () (command "._zoom" "_e")) (defun c:zp () (command "._zoom" "_p")) ; Creates the layer A-ANNO-REV, draws a rectangle and ; converts the rectangle to a revision cloud with arc lengths ; based on half the current value of the LTSCALE system variable (defun c:rv () (setq old-layer (getvar "clayer")) (command "._-layer" "_m" "A-ANNO-REVCLD" "_c" "1" "" "") (command "._rectang" PAUSE PAUSE) (command "._revcloud" "_a" (/ (getvar "ltscale") 2) "" "_o" "_l" "_n") (setvar "clayer" old-layer) ) ; Display a general message in the command line upon load (prompt "\nLoaded MyFirst.lsp") (princ)
如果程序需要使用“Unicode”字符,请选择“UTF-8”。
现在,已完成创建文件(而不是使用通过 APPLOAD 命令显示的“加载/卸载应用程序”对话框),将使用“文件资源管理器”来加载 LSP 文件。
加载后,您应该会在提示函数显示的命令行窗口历史记录中看到消息“Loaded MyFirst.lsp”。
请注意,修订云线为红色,放置在图层“A-ANNO-REVCLD”上。这可以从功能区的“图层”面板上的“图层”下拉列表或“特性/快捷特性”选项板中进行查看。
图形会缩放到其范围。
将恢复图形的上一个视图。
“加载/卸载应用程序”对话框不仅可用于根据需要手动加载 AutoLISP 文件,还可以在打开或创建新图形文件时自动加载 AutoLISP 文件。“加载/卸载应用程序”对话框的“启动组”区域用于指定要自动加载的 AutoLISP 文件。
以下步骤用于将 AutoLISP 文件添加到“启动组”:
“APPLOAD”也可以在命令提示下输入。
如果在上一节中创建了“myfirst.lsp”文件,则可以选择该文件。
已添加到“启动组”的 AutoLISP 文件会自动加载到当前图形中。
当 AutoCAD LT 启动或创建/打开图形时,AutoCAD LT 会查找带有特定名称的四个 AutoLISP 文件。如果找到这些文件,则会自动加载它们。这些文件有助于确保 AutoCAD LT 环境是按预期配置的,并确保 AutoLISP 定义的命令在创建或打开图形时可用。
AutoCAD LT 会在支持路径中查找以下四个文件,并在找到后自动加载这些文件:
“acadlt.lsp”和“acadltdoc.lsp”必须由您创建,它们不是标准 AutoCAD LT 安装的一部分。“acadlt2024.lsp”和“acadltdoc2024.lsp”包含在程序中,不应该修改。
可以像任何其他 LSP 文件一样使用“acadlt.lsp”和“acadltdoc.lsp”文件,还可以在上述上下文中自动加载这些文件。这两个文件可用于使用 AutoLISP load 函数加载其他 AutoLISP 文件、在加载这些文件时执行 AutoLISP 语句,以及定义 AutoLISP 命令定义,以便在创建或打开图形后可以使用它们。AutoLISP load 函数接受两个参数;要加载的 AutoLISP 文件是必填参数,第二个可选参数是在出现以下情况时显示的消息:如果要加载的 AutoLISP 文件在 AutoCAD LT 的其中一个支持文件搜索路径中未找到。有关如何设置支持文件搜索路径的信息,请参见“管理和保护 AutoLISP 文件”部分。
以下步骤介绍了如何在“C:\AutoLISP Files”文件夹中创建“acadltdoc.lsp”文件、向其中添加一些 AutoLISP 语句、将其加载到 AutoCAD LT 中,然后验证是否已加载该文件。
; AutoLISP to be executed in each drawing created or opened ; Set Object Snap and Ortho modes (setvar "osmode" 4133) (setvar "orthomode" 1) ; Load the LSP file created earlier under the ; "Store AutoLISP Statements in AutoLISP (LSP) Files" section (load "myfirst.lsp" "\nMyFirst.lsp file couldn't be found") ; Display a general message in the command line upon load (prompt "\nLoading my custom programs") (princ)
在命令行窗口中,您应该会看到消息“Loading my custom programs”,该消息来自您之前在步骤 2 中输入的最后两行之一内容。
状态栏按钮应该会再次启用。
插件捆绑包是一个带有名为“PackageContents.xml”文件的清单文件的文件夹结构,用于通知 AutoCAD LT 构成该插件的文件和设置。尽管在本文中已经了解到,将 AutoLISP 程序加载到 AutoCAD LT 中并不需要插件捆绑包,但与使用“acadlt.lsp”或“acadltdoc.lsp”文件相比,它们可以使 AutoLISP 文件的管理更容易,并且是部署自定义程序的更安全方法。在大多数情况下,插件捆绑包还可以帮助配置 AutoCAD LT,而无需使用“选项”对话框。
有关插件捆绑包的信息,请参见示例:插件的基本 .bundle 文件夹结构。
自动执行工作流有助于提高工作效率并减少重复性任务。虽然 AutoLISP 编程确实有一个学习曲线,但如果您坚持学习五个关键函数,就可以制作一些小程序,从而帮助您意识到 AutoLISP 在日常工作流中的真正价值。
以下是一些与 AutoLISP 相关的常用命令和系统变量。
命令 | 说明 |
---|---|
APPAUTOLOADER | 列出或重新加载在应用程序插件文件夹中的所有插件。 |
APPLOAD | 加载和卸载应用程序,定义要在启动时加载的应用程序。 |
OPTIONS | 自定义程序设置。 |
SECURITYOPTIONS | 控制在产品中运行可执行文件的安全性限制。 |
UNDEFINE | 允许应用程序定义的命令替换内部命令。 |
系统变量 | 说明 | 默认值 | 保存位置 |
---|---|---|---|
ACADLSPASDOC | 控制是将“acad.lsp”文件或 AutoCAD LT 的“acadlt.lsp”文件加载到每个图形中,还是仅加载到任务中打开的第一个图形中。 | 0 | 注册表 |
APPAUTOLOAD | 控制何时加载插件应用程序。 | 14 | 注册表 |
CLAYER | 设置当前图层。 | 0 | 图形 |
CLIPROMPTUPDATE | 控制命令行是否显示在执行 AutoLISP 或脚本文件时生成的消息和提示。 | 1 | 注册表 |
CMDDIA | 控制执行 DIMEDIT 和 QLEADER 命令时在位文字编辑器的显示,以及基于 AutoCAD 的产品中的某些对话框的显示。 | 1 | 注册表 |
CMDECHO | 控制在 AutoLISP 命令函数运行时是否回显提示和输入。 | 1 | 不保存 |
FILEDIA | 不显示文件导航对话框。 | 1 | 注册表 |
LEGACYCODESEARCH | 控制搜索可执行文件是否包括启动程序所在的文件夹。 | 0,可能已由 CAD 管理员锁定 | 注册表 |
NOMUTT | 抑制显示通常情况下显示的消息(即不进行消息反馈)。 | 0 | 不保存 |
ORTHOMODE | 约束光标在垂直方向上的移动。 | 0 | 图形 |
OSMODE | 设置执行对象捕捉。 | 4133 | 注册表 |
SECURELOAD | 控制可执行文件是否限于仅从受信任文件夹加载。 | 1,可能已由 CAD 管理员锁定 | 注册表 |
TEXTEVAL | 控制如何判定用 TEXT(使用 AutoLISP)或 -TEXT 输入的文字字符串。 | 0 | 不保存 |
TRUSTEDPATHS | 指定哪些文件夹具有加载并执行包含代码的文件的权限。 | 不确定,可能已由 CAD 管理员锁定 | 注册表 |