CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoCAD 2024 开发者帮助

教程:创建新的自定义命令并使用系统变量进行控制 (AutoLISP)

2024-5-18 19:05| 发布者: admin| 查看: 169| 评论: 0|原作者: admin|来自: AutoCAD

教程:创建新的自定义命令并使用系统变量进行控制 (AutoLISP)

使用 AutoLISP 编程语言,您可以通过创建自己的类似命令的函数和设置系统变量的值来控制绘图环境。

使用 AutoLISP,您可以创建可从命令提示符访问的新命令,就像与标准 AutoCAD 命令或第三方实用程序定义的命令进行交互一样。自定义命令可以将标准 AutoCAD 命令与函数一起使用,也可以使用 AutoLISP 函数直接操作对象。许多开发人员创建 AutoLISP 函数,这些函数按特定顺序执行多个标准 AutoCAD 命令。command

AutoLISP 程序还可以查询和更改系统变量的值。系统变量会影响命令和 AutoCAD 环境的行为。

创建新函数

您可以使用 AutoLISP 函数定义一个新函数。 表示“定义功能”。defundefun

以下是该函数的签名:defun

(defun function_name ([arguments] [/ local_variables ...]) expr ...)

如您所见,第一个参数是要定义的函数的名称。

该函数还允许您定义可传递给函数的参数列表以及“本地”到函数的用户定义变量列表。当您声明仅在函数处于活动状态时才可用的用户定义变量时,请确保将它们作为表达式的一部分添加到局部变量列表中。defundefun

以下是将消息输出到命令提示符或消息框中的自定义函数的示例:

(defun display-msg (msg mode / )
  (if (= mode 0)
    (prompt (strcat "\n" msg))
    (alert msg)
  )
 (princ)
)

自定义 display-msg 函数需要两个值,一个是文本字符串的消息,一个是 0 或 1 的整数值。您可以通过在 AutoCAD 命令提示符下输入代码,然后输入以下选项之一来执行函数来测试该函数:

  • (display-msg "Hello from AutoLISP!" 0)
  • (display-msg "Hello from AutoLISP!" 1)

创建自定义命令

自定义命令是与该函数一起定义的函数,但使用特殊的命名约定:它们使用字符作为前缀。这使它们与其他功能区分开来。defunc:

您可以定义一个接受参数的函数,但绝不应定义一个将用作接受参数的自定义命令的函数。相反,定义为自定义命令的函数应提示用户输入 、 、 和 函数。getXXXentselnentselssget

为函数提供函数名称后,可以输入在命令提示符下输入自定义命令时应执行的 AutoLISP 表达式。defun

以下步骤说明如何定义名为 HELLO 的自定义命令。此命令将提示用户输入字符串值,然后显示在消息框中输入的字符串:

  1. 在命令提示下,输入 !msg 并按 Enter。

    应返回该值,因为当前未为用户定义变量分配值。这是一个用户定义的变量,将作为 HELLO 命令的一部分进行定义,并且不应用于其他程序。nilmsgmsg

  2. 在命令提示符下,一次输入一行以下代码。在每行后按 Enter。输入最后一行后,您将看到值 C:HELLO 显示在命令窗口的历史记录中。

    (defun c:hello ( / msg)
      (setq msg (getstring T "\nEnter a message: "))
      (alert msg)
    )

现在,HELLO 命令已经定义,您可以通过在命令提示符下输入其名称来执行它。使用以下步骤执行 HELLO 命令:

  1. 在命令提示下,输入 hello

  2. Enter a message: 提示符下,输入 This is my first AutoLISP command!

    将显示一个消息框,其中显示您输入的消息。

    消息框 - Windows

    消息框 - Mac OS

  3. 单击“确定”关闭消息框。

  4. 在命令提示下,输入 !msg 并按 Enter。

    应返回该值,并且符合预期值。即使使用该函数将在“输入消息:”提示符中输入的值分配给变量,也不会保留该变量的值,因为它被定义为 C:HELLO 函数的局部变量。如果从 C:HELLO 函数表达式的局部变量列表中删除,则该变量将被定义为全局变量,并且该值将在函数完成执行后保留。nilsetqmsgmsgdefunmsg

直接在命令提示符下输入表达式可以很容易地学习和使用 AutoLISP,但这种便利性有一个缺点。在图形中定义的任何函数和用户定义变量都只能从该图形访问,直到该图形关闭。您可以通过执行以下操作来查看此内容:

  1. 定义当前图形中前面所示的 HELLO 函数(如果以前未这样做)。

  2. 创建新图形。

  3. 在命令提示下,输入 hello

    将显示以下消息:

    未知命令“HELLO”。按 F1 寻求帮助。

您可以将 AutoLISP 表达式保存到文件扩展名为 LSP 的文件中,以便可以重复使用它们并将其加载到其他图形中。有关创建和装入 AutoLISP 源 (LSP) 文件的信息,请参见教程:创建、装入和打开 AutoLISP 文件

访问和设置系统变量值

系统变量控制命令的行为,更改绘图环境的设置,并指定新对象的默认属性值等等。您可以使用以下函数查询和设置系统变量的值:

  • getvar- 返回系统变量的当前值
  • setvar- 为系统变量分配一个新值

下面介绍如何获取和设置 OSMODE(对象捕捉模式)系统变量的值:

  1. 在命令提示下,输入 (setq cur_osmode (getvar “osmode”)))。

    返回 OSMODE 系统变量的当前值,并将其分配给用户定义的变量 。虽然 OSMODE 返回一个整数值,但该值是多个“位码”值的总和。例如,值 35 表示已启用“终结点 (1)、中点 (2) 和交集 (32) 运行对象捕捉。cur_osmode

  2. 在命令提示下,输入 osnap

    “绘图设置”(Drafting Settings) 对话框显示时,“对象对齐”(Object Snap) 选项卡处于当前状态。通过此选项卡,您可以查看启用了哪些对象贴靠。下图显示了当 OSMODE 系统变量设置为值 35 时,“绘图设置”对话框的外观。

    “绘图设置”对话框 - Windows

    “绘图设置”对话框 - Mac OS

  3. 在“绘图设置”对话框中,更改当前对象捕捉,然后单击“确定”。

  4. 在命令提示下,输入 (getvar “osmode”)。

    返回 OSMODE 系统变量的当前值。

  5. 在命令提示下,输入 (setvar “osmode” cur_osmode)。

    OSMODE 系统变量的值将恢复为先前分配给用户定义变量的值。cur_osmode

  6. 再次显示“绘图设置”对话框。您应该看到对象对齐设置已恢复。

注意:在对绘图环境进行更改之前,最好存储任何系统变量的值,然后在程序结束之前还原它们。

路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1   苏公网安备32011402011833)

GMT+8, 2025-3-14 08:47

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部