通过将多个 AutoLISP 语句组合到一个 UNDO 组下,可以回滚使用 AutoCAD U 或 UNDO 命令执行的所有操作。 使用 和 函数执行的每个命令都显式创建自己的 UNDO 组。如果用户在运行 AutoLISP 例程后在 AutoCAD 命令提示符下输入 U(或撤消),则只会撤消最后一个命令。UNDO 的其他用法将通过该例程中使用的命令进一步倒退。例程的用户将期望它执行的所有操作都可以在单个操作中撤消,而不必撤消多个操作才能恢复到绘图的先前状态。commandcommand-s 建议将 AutoLISP 例程执行的命令和操作分组到单个 UNDO 组中,或者,如果例程允许用户重复操作,则甚至可以在每次用户的响应影响图形时创建 UNDO 组。可以使用 AutoCAD UNDO 命令的“开始”和“结束”选项定义“撤消”组。 下面的示例代码演示了使用命令函数执行的每个命令如何具有自己的 UNDO 组。 (defun c:NoUndo ( / old_osmode el pt) (setq old_osmode (getvar "OSMODE")) (setvar "OSMODE" 0) (command "._circle" "5,5" "2") ;Draws a circle (command "._line" "3,5" "7,5" "") ;Draws a line (setq el (entlast)) ;Gets the last entity added ; to the drawing (setq pt '(5 7)) ;Sets the trim point (command "._trim" el "" pt "") ;Performs the trim (setvar "OSMODE" old_osmode) ) 运行例程后,您将看到一个半圆。运行例程后发出 U 或 UNDO 命令会导致 AutoCAD TRIM 命令被撤消;您现在应该看到一个完整的圆圈,其中一条线穿过其中心。再次执行 U 或 UNDO 命令会导致撤消使用 AutoCAD LINE 命令创建的线条。第三次使用 U 或 UNDO 命令会导致 AutoCAD CIRCLE 命令被撤消。c:NoUndoc:NoUndo 以下示例代码演示了如何使用 AutoCAD UNDO 命令创建 UNDO 组,该组允许用户使用单个 U(或 UNDO)命令回滚所有更改。 (defun c:YesUndo ( / old_osmode el pt) (command "._UNDO" "_Begin") (setq old_osmode (getvar "OSMODE")) (setvar "OSMODE" 0) (command "._circle" "5,5" "2") ;Draws a circle (command "._line" "3,5" "7,5" "") ;Draws a line (setq el (entlast)) ;Gets the last entity added ; to the drawing (setq pt '(5 7)) ;Sets the trim point (command "._trim" el "" pt "") ;Performs the trim (setvar "OSMODE" old_osmode) (command "._UNDO" "_End") ) 运行例程后,您会看到一个半圆,就像例程一样。在运行例程后发出 U 或 UNDO 命令会导致 AutoCAD TRIM、LINE 和 CIRCLE 命令被撤消。c:YesUndoc:NoUndoc:YesUndo |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-1-7 19:40
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.