kucha007 发表于 2022-11-13 00:34:30

保存和恢复系统变量

本帖最后由 kucha007 于 2022-11-13 12:54 编辑

Lee Mac写的,简洁明了!整理了一下分享出来。
https://www.cadtutor.net/forum/topic/61171-codes-system-variables/?do=findComment&comment=505290

(defun C:TT (/ *error* New_vars Old_vars)
    (defun *error* (msg)
      (foreach xx Old_vars (if xx (apply 'setvar xx)))
      (princ)
    )
    ;---------------------
    (setq New_vars '(
                      (cmdecho 0);取消回显
                      (OSMode 0);禁用捕捉
                      (PICKSTYLE 0);取消编组
                      (expert 5);禁止提示冲突(默认Yes)
                  )
    )
    (setq Old_vars (mapcar
                  '(lambda (a / b)
                        (if (setq b (getvar (car a)))
                        (progn
                            (apply 'setvar a)
                            (list (car a) b)
                        )
                        )
                      )
                  New_vars
                  )
    )
    ;---------------------
    (progn
      ;;做某些事
    )
    ;---------------------
    (foreach xx Old_vars (if xx (apply 'setvar xx)))
    (princ)
)感觉也可以这样用:(defun K:SysVar ()
    (if (not *Old_vars*)
      (progn
            (setq *New_vars* '(
                      (cmdecho 0);取消回显
                      (OSMode 0);禁用捕捉
                      (PICKSTYLE 0);取消编组
                      (expert 5);禁止提示冲突(默认Yes)
                  )
            )
            (setq *Old_vars* (mapcar
                  '(lambda (a / b)
                        (if (and
                              (setq b (getvar (car a)))
                              (/= b (cadr a))
                            )
                            (progn
                              (apply 'setvar a)
                              (list (car a) b)
                            )
                        )
                      )
                  *New_vars*
                  )
            )
            (setq *New_vars* nil)
      )
      (progn
            (foreach xx *Old_vars* (if xx (apply 'setvar xx)))
            (setq *Old_vars* nil)
      )
    )
    (princ)
)


(defun C:TT ()
(defun *error* (msg)
    (K:SysVar);恢复系统变量
    (princ)
)

(K:SysVar);记录并修改系统变量
;你的程序
(K:SysVar);恢复系统变量
(princ)
)

kucha007 发表于 2023-4-2 14:06:27

涉及外部变量得这样用= =
(setq BrdLay '("TC-填充边界线" 1));设置边界线图层
(setq *Old_SysVar* '());清空变量,避免出错
(setq *Old_SysVar*
    (mapcar
      '(lambda (a / b)
      (if (setq b (getvar (car a)))
          (progn
            (apply 'setvar a)
            (list (car a) b)
          )
      )
      )
      (list
      (list "CLAYER" (car BrdLay)) ;图层
      (list "cecolor" (rtos (cadr BrdLay) 2 2)) ;图层颜色
      (list "PICKSTYLE" 0) ;忽略编组选择
      (list "cmdecho" 0) ;关闭回显
      )
    )
);记录参数

magicheno 发表于 2022-11-13 01:34:11

感谢大佬分享 学习了~

myhomer 发表于 2022-11-13 22:48:36

提取的这个做函数相当方便

panliang9 发表于 2022-11-14 09:04:01

谢谢分享!

czb203 发表于 2022-11-14 09:05:50

感谢大佬的热心分享

海盗曹 发表于 2022-11-14 10:53:09

全是科技,学习一下

xman00 发表于 2022-11-14 15:49:17

请问有没错误处理的变量恢复代码

kucha007 发表于 2022-11-14 17:06:03

xman00 发表于 2022-11-14 15:49
请问有没错误处理的变量恢复代码
最后不是有吗?*error*那个就是

xman00 发表于 2022-11-15 13:57:56

kucha007 发表于 2022-11-14 17:06
最后不是有吗?*error*那个就是

好的,看到了,感谢。
页: [1]
查看完整版本: 保存和恢复系统变量