AutoLISP (AutoCAD LT 2024)

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 文件或手动加载 AutoLISP 文件。

启动时加载 手动加载
  • “加载/卸载应用程序”对话框的启动组(APPLOAD 命令)
  • 自动加载的 AutoLISP 文件
  • 插件捆绑包
  • “加载/卸载应用程序”对话框(APPLOAD 命令)
  • 拖放
  • AutoLISP load 函数

如您所见,AutoCAD LT 能够以多种方式加载 AutoLISP 文件。使用的方法取决于绘图环境的配置。现在,我们将介绍如何使用“加载/卸载应用程序”对话框加载 AutoLISP 文件。

  1. 在 AutoCAD LT 中,依次单击“管理”选项卡 >“应用程序”面板 >“加载应用程序”。 查找

    “APPLOAD”也可以在命令提示下输入。



  2. 在“加载/卸载应用程序”对话框中,单击“查找范围”下拉列表,然后选择“此电脑”

  3. 在“文件夹和文件”列表中,导航到“C:\Program Files\Autodesk\AutoCAD LT <版本>\Support\en-us”

    如果安装有英语以外的其他语言(如“jp-jp”),则选择该文件夹,而不是“en-us”

  4. 选择“acadlt2024doc.lsp”,然后单击“加载”。

    “acadlt2024doc.lsp”文件是特殊命名的 AutoLISP 文件之一,AutoCAD LT 会搜索该文件并在找到后将其加载到打开或创建的每个图形中。此 AutoLISP 文件包含产品使用的某些命令和自定义 AutoLISP 函数。这此处,我只是将它用作示例文件。

    在消息框中,“已成功加载 acadlt2024doc.lsp。”显示在对话框的左下角和命令行窗口中。



  5. 单击“关闭”。
  6. 在命令提示下,输入“ddgrips”

    这将启动由 AutoLISP 在“acadlt2024doc.lsp”中定义的 DDGRIPS 命令。DDGRIPS 命令会打开“选项”对话框,并将“选择”选项卡置为当前。

在上一练习中,您使用了 DDGRIPS 命令。我确信您想知道,如何知道已加载的 AutoLISP 文件中有该命令。有时,程序可能会使用一些将消息直接放在命令行窗口中的代码,以便您能够知道哪些命令已定义,哪些命令可以使用。但是,情况并非总是如此,您可能必须打开 AutoLISP 文件才能知道哪些命令已定义。可以使用“记事本”打开 AutoLISP 文件。

下图显示了在“记事本”中打开的“acadlt2024doc.lsp”文件的部分内容。可以在命令提示下输入的 AutoLISP 定义的命令带有前缀“c:”“c:”后面的文字是命令的名称。



管理和保护 AutoLISP 文件

尽管在使用之前,不必将下载或创建的 AutoLISP 文件存储在特定位置,但建议您将这些文件存储在共享位置。与图形模板和块库一样,您需要确保团队或公司中的所有绘图员都有权访问相同的 AutoLISP 文件。您应考虑以下事项:

提示: 无论 AutoLISP 文件存储在何处,建议您将存储 LSP 文件的文件夹标记为只读。将该文件夹标记为只读有助于保护文件免遭意外更改

在确定用于存储 AutoLISP 文件的文件夹后,需要使用“选项”对话框的“文件”选项卡上的“支持文件搜索路径”和“受信任的位置”设置通知 AutoCAD LT 该文件夹所在的位置。出于以下原因,AutoCAD LT 需要知道 LSP 文件所在的位置:

以下步骤演示了如何将文件夹“C:\AutoLISP Files”添加到“支持文件搜索路径”和“受信任的位置”设置。稍后,将使用此位置来创建一个 LSP 文件,其中包含几个简短的 AutoLISP 程序。

  1. 在“文件资源管理器”中,在“C:\”驱动器上或在您具有写入权限的位置(如“Documents”)中创建文件夹“AutoLISP Files”
  2. 在 AutoCAD LT 中,在绘图区域上单击鼠标右键,然后选择“选项”。 查找
  3. 在“选项”对话框的“文件”选项卡中,展开并选择“支持文件搜索路径”节点。

    列出的文件夹是 AutoCAD LT 在其他类型的自定义文件(用于存储填充图案、线型、命令别名,以及定义新的用户界面元素)中查找 AutoLISP 文件的位置。



  4. 单击“添加”,然后单击右侧的“浏览”。
  5. 在“浏览文件夹”对话框中,导航到“C:\AutoLISP Files”或包含 AutoLISP 文件的文件夹。

  6. 选择包含 AutoLISP 文件的文件夹,然后单击“打开”。

    该文件夹即会添加到列表的底部。

    注: AutoCAD LT 会从上到下搜索列表以查找自定义文件。在大多数情况下,除非要将一个标准自定义文件替换为自己的文件,否则无需对这些文件夹重新排序。


  7. 选择“受信任的位置”节点,然后添加“C:\AutoLISP Files”文件夹或包含 AutoLISP 文件的文件夹。按照步骤 4 到 6 操作,以添加文件夹。
  8. 如果显示“受信任的文件搜索路径 - 安全问题”消息框,请单击“继续”。

    切记: 建议您将存储 AutoLISP 文件的文件夹标记为只读。

    该文件夹即会添加到列表的底部。



  9. 单击“确定”以保存更改并退出“选项”对话框。

除了将包含 AutoLISP 文件的文件夹标记为只读,并将这些文件夹标识为受信任的文件夹外,AutoCAD LT 还提供了一些其他设置,可帮助 AutoCAD LT 防范恶意代码和恶意软件。通过执行以下操作,可以访问 AutoCAD LT 的“安全”设置:

  1. 在 AutoCAD LT 中,在绘图区域中单击鼠标右键,然后选择“选项”。 查找
  2. 在“选项”对话框的“系统”选项卡中的“安全”面板下,单击“安全选项”。

  3. 在“安全级别”和“自动加载”部分下,根据需要更改“选项”。
    1. 安全级别 - 控制应用于加载可执行程序的限制(SECURELOAD 系统变量)
    2. 受信任的文件夹 - 当“安全级别”为中等或更高级别时,允许 AutoCAD 加载可执行程序的文件夹(TRUSTEDPATHS 系统变量)
    3. 在搜索可执行文件时 - 控制 AutoCAD LT 是在桌面快捷方式定义的“起始”文件夹中还是在已打开图形上的文件夹中查找 AutoLISP 文件(LEGACYCODESEARCH 系统变量)
    4. 自动加载 - 控制“acadlt.lsp”是仅在任务启动时加载,还是在每个图形打开时加载(ACADLSPASDOC 系统变量)
  4. 单击“确定”保存更改或单击“取消”放弃更改,然后退出对话框。
  5. 在“选项”对话框中,单击“确定”以保存更改并退出对话框。

在 AutoCAD LT 中输入 AutoLISP 语句

能够加载和管理您联机找到的 AutoLISP 文件或您公司已有的 AutoLISP 文件,这仅仅是在 AutoCAD LT 中使用 AutoLISP 提高工作效率的开始。从日常工作流中已有的 AutoLISP 文件开始使用 AutoLISP 程序后,可能会有一天您要对这些程序进行更改,甚至要编写自己的基本 AutoLISP 程序。

您可能会想,AutoLISP 是一种编程语言,而您并非程序员。虽然 AutoLISP 确实是一种编程语言,但学习和编写 AutoLISP 程序并不需要成为一名程序员。最简单的 AutoLISP 程序是一条允许您执行命令或更改系统变量值的语句。

AutoLISP 语句以左括号开头,以右括号结尾。以下是一个 AutoLISP 语句的示例,使用 ORTHOMODE 系统变量打开“正交模式”。

(setvar "orthomode" 1)

与命令和系统变量名称一样,可以在 AutoCAD LT 中的命令提示下输入 AutoLISP 语句。让我们来试一试:

  1. 在 AutoCAD LT 中,创建一个新图形。
  2. 在状态栏上,单击“正交模式”按钮以禁用“正交模式”。

    禁用后,该状态栏按钮会灰显。



  3. 在命令提示下,键入“(setvar "orthomode" 1)”,然后按 Enter 键。

    状态栏上的“正交模式”按钮现在应处于启用状态,且颜色为蓝色。



恭喜您编写了第一条 AutoLISP 语句!你现在是一名程序员了!

上一条 AutoLISP 语句利用 setvar 函数来设置系统变量的值。还有一个名为 getvar 的函数,可用于返回系统变量的当前值。setvargetvar 函数只是数百个函数中的两个,可用于使用 AutoLISP 自动执行工作流。尽管有数百个函数构成 AutoLISP 编程语言,但您只需了解五个关键函数即可开始使用。其中两个您已经了解了。这五个函数如下所示:

现在,您已了解了五个关键函数,并已使用 setvar 函数设置了系统变量,下面让我们来了解如何使用 command 函数。在继续操作之前,您应该知道命令名称可以带有前缀“.”(句点)和“_”(下划线)字符,而命令选项名称可以带有前缀“_”(下划线)字符。这些字符用于确保提供的命令会按预期执行。

以下是这些字符含义的说明:

在以下步骤中,将使用 command 函数绘制一个圆并缩放到该图形范围。

  1. 在命令提示下,键入“(command "._circle" "5,5" 5)”,然后按 Enter 键。

    将在当前图层上绘制一个半径为 5 个单位的圆,坐标为“5,5”。



  2. 在命令提示下,键入“(command "._zoom" "_e")”,然后按 Enter 键。

    如果图形中只有圆,则图形将缩放到该对象的范围,否则它将缩放到图形中所有对象的范围。



现在,您已见到一些 AutoLISP 语句,让我们来进一步了解示例 AutoLISP 语句的各个部分和语法:

虽然直接在命令提示下输入 AutoLISP 语句是开始学习 AutoLISP 的绝佳方式,因为可以实时获得反馈,但在命令提示下重复地重新键入语句并不是一种高效方式。允许您重用 AutoLISP 语句的一种方法是使用 defun 函数将这些语句编组为一个自定义命令。

让我们来试用一下 defun 函数,并定义一个名为“ZP”的自定义命令,该命令会缩放到图形的上一个视图:

  1. 在命令提示下,键入“(defun c:zp ()”,然后按 Enter 键。
  2. 在提示“(_>”下,键入“(command "._zoom" "_p")”,然后按 Enter 键。
  3. 在提示“(_>”下,键入“)”,然后按 Enter 键。

    “C:ZP”将输出到命令。



  4. 在命令提示下,输入“ZP”

    将恢复上一个视图。



  5. 使用 ZOOM 或 PAN 命令,可将圆带回到当前视图中。
  6. 在命令提示下,输入“ZP”

    现已恢复上一个视图。

尽管可以使用 defun 函数定义自定义命令以更容易地重用 AutoLISP 语句,但定义的命令仅在定义它们的图形中可用,同时图形保持处于打开状态。在下一节中,您将学习如何创建 AutoLISP 文件来存储自定义 AutoLISP 命令,以及可能要在加载 AutoLISP 文件时执行的其他 AutoLISP 语句。

可以在《AutoLISP参考手册》中详细了解五个关键函数以及数百个其他可用函数。

将 AutoLISP 语句存储在 AutoLISP (LSP) 文件中

现在,您已知道如何在命令提示下输入 AutoLISP 表达式,下面我们来了解一下如何创建 AutoLISP 文件并存储 AutoLISP 表达式和自定义命令,以便在需要时使其可用。AutoLISP 文件是可以使用简单文本编辑器创建的纯 ASCII 文本文件,其文件扩展名为“.lsp”。不建议您使用诸如“Write”或“Word”之类的文字处理器,因为它可能会引入特殊字符和格式,从而在需要加载 LSP 文件时导致出现问题。

在接下来的练习中,您将学习如何创建 LSP 文件、将一些 AutoLISP 语句添加到 LSP 文件、加载 LSP 文件,然后尝试运行在 LSP 文件中定义的命令。除了前面提到的五个关键函数外,您还将了解以下内容:

现在,让我们来创建自己的文件,并将其加载到 AutoCAD LT 中:

  1. 在 Windows 中,依次单击 Windows 的“开始”按钮 >“Windows 附件”>“记事本”,或在任务栏上的搜索框中输入“记事本”
  2. 在“记事本”中,在编辑器区域中键入以下内容:
    ; 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)
  3. 在菜单栏中,依次单击“文件”>“另存为”。
  4. 在“另存为”对话框中,导航到“C:\AutoLISP Files”文件夹。

  5. 在“文件名”文本框中,键入“myfirst.lsp”
  6. 单击“另存为类型”下拉列表,然后选择“所有文件(*.*)”
  7. 单击“编码”下拉列表,然后选择“ANSI”

    如果程序需要使用“Unicode”字符,请选择“UTF-8”。

  8. 单击“保存”。

现在,已完成创建文件(而不是使用通过 APPLOAD 命令显示的“加载/卸载应用程序”对话框),将使用“文件资源管理器”来加载 LSP 文件。

  1. 在 Windows 中,在 Windows 的“开始”按钮上单击鼠标右键,然后选择“文件资源管理器”。

  2. 在“文件资源管理器”中,浏览到“myfirst.lsp”文件所在的位置。
  3. 在 AutoCAD LT 中打开一个图形。
  4. 单击 LSP 文件并将其拖动到 AutoCAD LT 绘图区域上方。

  5. 释放鼠标按钮,可将该文件加载到图形中。

    加载后,您应该会在提示函数显示的命令行窗口历史记录中看到消息“Loaded MyFirst.lsp”



  6. 在命令提示下,输入“RV”
  7. 指定两个点以定义矩形修订云线。

    请注意,修订云线为红色,放置在图层“A-ANNO-REVCLD”上。这可以从功能区的“图层”面板上的“图层”下拉列表或“特性/快捷特性”选项板中进行查看。



  8. 在命令提示下,输入“ZE”

    图形会缩放到其范围。

  9. 在命令提示下,输入“ZP”

    将恢复图形的上一个视图。

使用“启动组”加载 AutoLISP 文件

“加载/卸载应用程序”对话框不仅可用于根据需要手动加载 AutoLISP 文件,还可以在打开或创建新图形文件时自动加载 AutoLISP 文件。“加载/卸载应用程序”对话框的“启动组”区域用于指定要自动加载的 AutoLISP 文件。

注: 这是一种快速自动加载 AutoLISP 文件的便捷方法,但必须在要自动加载文件的每个工作站上执行此操作。建议您改用 AutoLISP 专用启动文件,该文件在“AutoLISP 专用启动文件”部分中进行介绍。

以下步骤用于将 AutoLISP 文件添加到“启动组”:

  1. 在 AutoCAD LT 中,依次单击“管理”选项卡 >“应用程序”面板 >“加载应用程序”。 查找

    “APPLOAD”也可以在命令提示下输入。

  2. 在“加载/卸载应用程序”对话框的“启动组”部分下,单击“内容”。
  3. 在“启动组”对话框中,单击“添加”。
  4. 在“将文件添加到启动组”对话框中,浏览到要自动加载的 AutoLISP 文件并选择该文件。单击“打开”。

    如果在上一节中创建了“myfirst.lsp”文件,则可以选择该文件。

  5. 单击“关闭”两次以返回到绘图区域。

    已添加到“启动组”的 AutoLISP 文件会自动加载到当前图形中。

    注: 如果已将“myfirst.lsp”文件添加到“启动组”并继续下一节,请最好立即从“启动组”中删除该文件。返回到“加载/卸载应用程序”对话框中的“启动组”、选择“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 中,然后验证是否已加载该文件。

  1. 在 Windows 中,依次单击 Windows 的“开始”按钮 >“Windows 附件”>“记事本”,或在任务栏上的搜索框中输入“记事本”。
  2. 在“记事本”中,在编辑器区域中键入以下内容:
    ; 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)
  3. 在菜单栏中,依次单击“文件”>“另存为”。
  4. 在“另存为”对话框中,导航到“C:\AutoLISP Files”文件夹。

  5. 在“文件名”文本框中,键入“acadltdoc.lsp”
  6. 单击“另存为类型”下拉列表,然后选择“所有文件(*.*)”
  7. 单击“保存”。
  8. 如果 AutoCAD LT 2024 尚未运行,请启动 AutoCAD LT 2024。
  9. 在 AutoCAD LT 2024 中,创建或打开图形文件。
  10. 按 F2 键以展开命令行窗口。

    在命令行窗口中,您应该会看到消息“Loading my custom programs”,该消息来自您之前在步骤 2 中输入的最后两行之一内容。



  11. 在状态栏上,单击“正交模式”和“二维对象捕捉”按钮(如果它们为蓝色)以将它们禁用。

  12. 再次创建或打开图形文件。

    状态栏按钮应该会再次启用。



插件捆绑包(高级)

插件捆绑包是一个带有名为“PackageContents.xml”文件的清单文件的文件夹结构,用于通知 AutoCAD LT 构成该插件的文件和设置。尽管在本文中已经了解到,将 AutoLISP 程序加载到 AutoCAD LT 中并不需要插件捆绑包,但与使用“acadlt.lsp”“acadltdoc.lsp”文件相比,它们可以使 AutoLISP 文件的管理更容易,并且是部署自定义程序的更安全方法。在大多数情况下,插件捆绑包还可以帮助配置 AutoCAD LT,而无需使用“选项”对话框。

有关插件捆绑包的信息,请参见示例:插件的基本 .bundle 文件夹结构

总结

自动执行工作流有助于提高工作效率并减少重复性任务。虽然 AutoLISP 编程确实有一个学习曲线,但如果您坚持学习五个关键函数,就可以制作一些小程序,从而帮助您意识到 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 管理员锁定 注册表