我总是使用vla-EndUndoMark/vla-StartUndoMark方法,用李的描述检查这个片段:
- (setq doc (vla-get-activedocument (vlax-get-acad-object)))
- (if (= 8 (logand 8 (getvar 'undoctl))) ;; If an undo group is already open
- (vla-endundomark doc) ;; close it
- ) ;; end if
- (vla-startundomark doc) ;; Open a new undo group
- (vla-endundomark doc) ;; Close the open undo group
在开始和结束标记之间,必须找到表达式,这些表达式在图形上执行更改(如更改对象的特性值)。
我还认为,在使用UNDO命令时,当其在*error*函数内时,必须使用command-s调用,否则这样的调用就足够了:
- (defun *error* ( msg )
- (and acDoc (= 8 (logand (getvar 'undoctl) ) (vla-EndUndoMark acDoc))
- (princ msg)
- (princ)
- )
|