明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1339|回复: 9

保存和恢复系统变量

[复制链接]
发表于 2022-11-13 00:34 | 显示全部楼层 |阅读模式
本帖最后由 kucha007 于 2022-11-13 12:54 编辑

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

  1. (defun C:TT (/ *error* New_vars Old_vars)
  2.     (defun *error* (msg)
  3.         (foreach xx Old_vars (if xx (apply 'setvar xx)))
  4.         (princ)
  5.     )
  6.     ;---------------------
  7.     (setq New_vars '(
  8.                       (cmdecho 0);取消回显
  9.                       (OSMode 0);禁用捕捉
  10.                       (PICKSTYLE 0);取消编组
  11.                       (expert 5);禁止提示冲突(默认Yes)
  12.                     )
  13.     )
  14.     (setq Old_vars (mapcar
  15.                     '(lambda (a / b)
  16.                         (if (setq b (getvar (car a)))
  17.                           (progn
  18.                             (apply 'setvar a)
  19.                             (list (car a) b)
  20.                           )
  21.                         )
  22.                       )
  23.                     New_vars
  24.                   )
  25.     )
  26.     ;---------------------
  27.     (progn
  28.       ;;做某些事
  29.     )
  30.     ;---------------------
  31.     (foreach xx Old_vars (if xx (apply 'setvar xx)))
  32.     (princ)
  33. )
感觉也可以这样用:
  1. (defun K:SysVar ()
  2.     (if (not *Old_vars*)
  3.         (progn
  4.             (setq *New_vars* '(
  5.                       (cmdecho 0);取消回显
  6.                       (OSMode 0);禁用捕捉
  7.                       (PICKSTYLE 0);取消编组
  8.                       (expert 5);禁止提示冲突(默认Yes)
  9.                     )
  10.             )
  11.             (setq *Old_vars* (mapcar
  12.                     '(lambda (a / b)
  13.                         (if (and
  14.                               (setq b (getvar (car a)))
  15.                               (/= b (cadr a))
  16.                             )
  17.                             (progn
  18.                               (apply 'setvar a)
  19.                               (list (car a) b)
  20.                             )
  21.                         )
  22.                       )
  23.                     *New_vars*
  24.                   )
  25.             )
  26.             (setq *New_vars* nil)
  27.         )
  28.         (progn
  29.             (foreach xx *Old_vars* (if xx (apply 'setvar xx)))
  30.             (setq *Old_vars* nil)
  31.         )
  32.     )
  33.     (princ)
  34. )


  35. (defun C:TT ()
  36.   (defun *error* (msg)
  37.     (K:SysVar);恢复系统变量
  38.     (princ)  
  39.   )

  40.   (K:SysVar);记录并修改系统变量
  41.   ;你的程序
  42.   (K:SysVar);恢复系统变量
  43.   (princ)
  44. )

 楼主| 发表于 2023-4-2 14:06 | 显示全部楼层
涉及外部变量得这样用= =
  1. (setq BrdLay '("TC-填充边界线" 1));设置边界线图层
  2. (setq *Old_SysVar* '());清空变量,避免出错
  3. (setq *Old_SysVar*
  4.     (mapcar
  5.       '(lambda (a / b)
  6.         (if (setq b (getvar (car a)))
  7.           (progn
  8.             (apply 'setvar a)
  9.             (list (car a) b)
  10.           )
  11.         )
  12.       )
  13.       (list
  14.         (list "CLAYER" (car BrdLay)) ;图层
  15.         (list "cecolor" (rtos (cadr BrdLay) 2 2)) ;图层颜色
  16.         (list "PICKSTYLE" 0) ;忽略编组选择
  17.         (list "cmdecho" 0) ;关闭回显
  18.       )
  19.     )
  20. );记录参数
发表于 2022-11-13 01:34 | 显示全部楼层
感谢大佬分享 学习了~
发表于 2022-11-13 22:48 | 显示全部楼层
提取的这个做函数相当方便
发表于 2022-11-14 09:05 | 显示全部楼层
感谢大佬的热心分享
发表于 2022-11-14 10:53 | 显示全部楼层
全是科技,学习一下
发表于 2022-11-14 15:49 来自手机 | 显示全部楼层
请问有没错误处理的变量恢复代码
 楼主| 发表于 2022-11-14 17:06 | 显示全部楼层
xman00 发表于 2022-11-14 15:49
请问有没错误处理的变量恢复代码

最后不是有吗?*error*那个就是
发表于 2022-11-15 13:57 | 显示全部楼层
kucha007 发表于 2022-11-14 17:06
最后不是有吗?*error*那个就是

好的,看到了,感谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-19 07:52 , Processed in 0.145236 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表