明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 451|回复: 2

[函数] @lisp:系统状态的保存与恢复。两个函数,支持嵌套。

[复制链接]
发表于 2021-1-31 07:48 | 显示全部楼层 |阅读模式
本帖最后由 vitalgg 于 2022-8-15 15:03 编辑


(push-var [参数])  用于保存当前的变量
(pop-var)  用于恢复上一次保存的变量状态
参数: 参数支持单个或多个字符串,单个或多个符号名,字符串表,符号表。
应用场景
本贴支持的写法

  1. (push-var "cmdecho") ;;
  2. (push-var 'cmdecho)
  3. (push-var '("clayer" "cmdecho"))
  4. (push-var '(clayer cmdecho))
  5. (push-var '("clayer" cmdecho))
  6. (push-var (list "clayer" 'cmdecho))

  7. (push-var nil) ;; 默认保存几个常用的系统变量。


@lisp 基础库支持以下写法

  1. (push-var) ;; 默认保存几个常用的系统变量。
  2. (push-var "clayer" "cmdecho")
  3. (push-var 'clayer 'cmdecho)



@lisp 下载的文件支持 无参数时记录默认的变量表 "autosnap;blipmode;cmdecho;clayer;delobj;luprec;orthomode;osmode;plinewid;textstyle"
用户可以自定义的默认的变量表  (@:set-config 'base:sysvar "这里填写以;号分隔的变量名")

用法:
  1. (defun foobar1 ()
  2.   (push-var nil)
  3.   (...)
  4.   (pop-var)
  5.    )
  6. (defun foobar2 ()
  7.   ;; "当调用其它有保存变量的函数时。"
  8.   (push-var ’("clayer"))
  9.   (foobar1) ;; foobar2 也使用了系统变量的保存也恢复。
  10.   (pop-var)
  11.   ;; 返回值
  12.   )


函数定义:
  1. (setq @:*var-stack* nil) ;; 变量状态栈,在启动时初始化
  2. (defun push-var (varlst)
  3.   ;; "当前变量状态入栈,参数支持,单个字符串,符号,字符串表,符号表。"
  4.   (if (null varlst)
  5.       (setq varlst '("autosnap";捕捉标记
  6.                      "blipmode";光标痕迹
  7.                      "cmdecho";普通命令的提示
  8.                      "clayer";图层
  9.                      "delobj"        ;控制创建面域时是否保留原pline,0为保留,1为不保留
  10.                      "luprec";长度精度
  11.                      "orthomode";正交模式
  12.                      "osmode";捕捉模式
  13.                      "plinewid";多线段宽度
  14.                      "textstyle";字体样式
  15.                      )))
  16.   (if (= 'str (type varlst)) (setq varlst (list varlst)))
  17.   (if (= 'sym (type varlst)) (setq varlst (list varlst)))
  18.   (setq @:*var-stack*
  19.         (append
  20.          (list (mapcar '(lambda (x) (cons x (getvar x))) varlst))
  21.          @:*var-stack*)))
  22. (defun pop-var ()
  23.   ;;; "恢复保存的变量"
  24.   (mapcar '(lambda (x) (setvar (car x) (cdr x))) (car @:*var-stack*)) ;; 网友提出错误,已修改。
  25.   (setq @:*var-stack* (cdr @:*var-stack*)))


以上函数来自 @lisp 基础函数库, 如果你的 CAD 安装了 @lisp ,可以直接使用这两个函数 。 不用自己定重新定义了。

@LISP 是一个运行于 AutoCAD 的应用管理器。用于管理AutoLisp 程序的网络下载安装、加载、卸载、查询、选择加载等。

可方便地实现 autolisp 程序的云管理。开发者可以发布和升级自己的程序到网上,使用者 在CAD 中就可以完成升级。 免去繁琐的下载和安装升级步骤。

安装
将以下代码复制到 CAD 命令行内,回车即可开始安装。
(在代码行里用鼠标连续三击全选,然后右键复制或Ctrl+C 。到CAD命令行内,右键粘贴或Ctrl+V)

  1. (progn(vl-load-com)(setq o"http://atlisp.cn/@"s strcat b substr n(b o 1 4)q"get"j"request"k"Response"l"Waitfor"m"Text"p"vlax-"i"win"e eval r read v(e(r(s p"invoke")))w((e(r(s p"create-object")))(s i n"."i n j".5.1")))(v w'open q o :vlax-true)(v w'send)(v w(r(s l k))1000)(e(r((e(r(s p q)))w(r(s k m))))))





"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-8-15 09:49 | 显示全部楼层
(defun pop-var ()
  ;;; "恢复保存的变量"
  (mapcar '(lambda (x) (setvar (car x) (cdr x))) (car @:*var-status*))
  (setq @:*var-stack* (cdr @:*var-stack*)))
这里的@:*var-status*应为@:*var-stack*吧
 楼主| 发表于 2022-8-15 10:15 | 显示全部楼层
本帖最后由 vitalgg 于 2022-8-15 10:16 编辑
1006015131 发表于 2022-8-15 09:49
(defun pop-var ()
  ;;; "恢复保存的变量"
  (mapcar '(lambda (x) (setvar (car x) (cdr x))) (car @:* ...

你是对的。

@lisp已包含这两个函数(正确的代码) ,不用重新造轮子。
push-var 支持可变参数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-11 14:09 , Processed in 0.153315 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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