本帖最后由 kucha007 于 2024-4-6 12:12 编辑
该文章由G版编写,本着学习的心态梳理了一遍,函数名变量名尽可能使用通俗易懂的方式
大家可直接下载Lsp文件进行阅读:
该文章的函数有三种用法:
- Gxl-ErrStaSys -> Gxl-ErrEnd ;只针对系统变量的恢复
- Gxl-ErrSta -> Gxl-ErrEnd ;系统变量+函数+编组
- Gxl-ErrStaNrm -> Gxl-ErrEndNrm ;只针对自定义常量的恢复
这是我根据文章得到的自用函数:
- (if (null vlax-dump-object) (vl-load-com));将Visual LISP扩展功能加载到 AutoLISP
- (defun C:TT (/ *error* CurDoc *Old_SysVar*)
- (setq CurDoc (vla-get-activedocument (vlax-get-acad-object)))
- (defun *error* (x) ;出错函数
- ;其它需要恢复的内容
- (if *Old_SysVar* (foreach xx *Old_SysVar* (apply 'setvar xx)));参数恢复
- (vla-endundomark CurDoc) ;错误时结束编组
- )
- (while (eq 8 (logand 8 (getvar 'undoctl)))
- (vla-endundomark CurDoc)
- ) ;关闭以前的编组
- (vla-startundomark CurDoc) ;记录编组
- (progn ;记录系统变量
- (setq *Old_SysVar* '());清空变量,避免出错
- (setq *Old_SysVar*
- (mapcar
- '(lambda (a / b)
- (if (setq b (getvar (car a)))
- (progn
- (vl-catch-all-apply 'setvar a)
- (list (car a) b)
- )
- )
- )
- (list
- (list "DIMZIN" 0);保留前导和后续的零
- (list "CMDECHO" 0) ;关闭回显
- )
- )
- );记录参数
- )
-
- ;你的程序
-
- (command "redraw");清空一行
- (if *Old_SysVar* (foreach xx *Old_SysVar* (apply 'setvar xx)));参数恢复
- (vla-endundomark CurDoc) ;结束编组
- (princ)
- )
|