通过将多个 AutoLISP 语句组合到单个撤消组下,可以回滚使用 AutoCAD U 或 UNDO 命令执行的所有操作。 使用 theandfunctions 执行的每个命令都会显式创建自己的 UNDO 组。如果用户在运行 AutoLISP 例程后在 AutoCAD 命令提示符下输入 U(或撤消),则只会撤消最后一个命令。撤消的其他用法将进一步向后退,遍历该例程中使用的命令。例程的用户希望它可以在单个操作中撤消它执行的所有操作,而不必撤消多个操作以返回到图形的先前状态。commandcommand-s 建议将 AutoLISP 例程执行的命令和操作分组到单个 UNDO 组中,或者,如果您的例程允许用户重复操作,您甚至可以在每次用户的响应影响图形时创建撤消组。可以使用 AutoCAD 撤消命令的“开始”和“结束”选项来定义撤消组。 以下示例代码演示了使用命令函数执行的每个命令如何具有自己的 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 或撤消命令会导致 AutoCAD 修剪命令被撤消;您现在应该看到一个完整的圆,其中一条线贯穿其中心。再次执行 U 或 UNDO 命令会导致撤消使用 AutoCAD LINE 命令创建的行。第三次使用 U 或 UNDO 命令会导致撤消 AutoCAD CIRCLE 命令。c:NoUndoc:NoUndo 以下示例代码演示如何使用 AutoCAD 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 或撤消命令会导致撤消 AutoCAD 修剪、线条和圆形命令。c:YesUndoc:NoUndoc:YesUndo |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )
GMT+8, 2024-6-10 20:16
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.