本帖最后由 vitalgg 于 2022-8-15 15:03 编辑
(push-var [参数]) 用于保存当前的变量
(pop-var) 用于恢复上一次保存的变量状态
参数: 参数支持单个或多个字符串,单个或多个符号名,字符串表,符号表。
应用场景
本贴支持的写法
 - (push-var "cmdecho") ;;
- (push-var 'cmdecho)
- (push-var '("clayer" "cmdecho"))
- (push-var '(clayer cmdecho))
- (push-var '("clayer" cmdecho))
- (push-var (list "clayer" 'cmdecho))
- (push-var nil) ;; 默认保存几个常用的系统变量。
@lisp 基础库支持以下写法
 - (push-var) ;; 默认保存几个常用的系统变量。
- (push-var "clayer" "cmdecho")
- (push-var 'clayer 'cmdecho)
@lisp 下载的文件支持 无参数时记录默认的变量表 "autosnap;blipmode;cmdecho;clayer;delobj;luprec;orthomode;osmode;plinewid;textstyle"
用户可以自定义的默认的变量表 (@:set-config 'base:sysvar "这里填写以;号分隔的变量名")
用法:
 - (defun foobar1 ()
- (push-var nil)
- (...)
- (pop-var)
- )
- (defun foobar2 ()
- ;; "当调用其它有保存变量的函数时。"
- (push-var ’("clayer"))
- (foobar1) ;; foobar2 也使用了系统变量的保存也恢复。
- (pop-var)
- ;; 返回值
- )
函数定义:
 - (setq @:*var-stack* nil) ;; 变量状态栈,在启动时初始化
- (defun push-var (varlst)
- ;; "当前变量状态入栈,参数支持,单个字符串,符号,字符串表,符号表。"
- (if (null varlst)
- (setq varlst '("autosnap";捕捉标记
- "blipmode";光标痕迹
- "cmdecho";普通命令的提示
- "clayer";图层
- "delobj" ;控制创建面域时是否保留原pline,0为保留,1为不保留
- "luprec";长度精度
- "orthomode";正交模式
- "osmode";捕捉模式
- "plinewid";多线段宽度
- "textstyle";字体样式
- )))
- (if (= 'str (type varlst)) (setq varlst (list varlst)))
- (if (= 'sym (type varlst)) (setq varlst (list varlst)))
- (setq @:*var-stack*
- (append
- (list (mapcar '(lambda (x) (cons x (getvar x))) varlst))
- @:*var-stack*)))
- (defun pop-var ()
- ;;; "恢复保存的变量"
- (mapcar '(lambda (x) (setvar (car x) (cdr x))) (car @:*var-stack*)) ;; 网友提出错误,已修改。
- (setq @:*var-stack* (cdr @:*var-stack*)))
以上函数来自 @lisp 基础函数库, 如果你的 CAD 安装了 @lisp ,可以直接使用这两个函数 。 不用自己定重新定义了。
@LISP 是一个运行于 AutoCAD 的应用管理器。用于管理AutoLisp 程序的网络下载安装、加载、卸载、查询、选择加载等。
可方便地实现 autolisp 程序的云管理。开发者可以发布和升级自己的程序到网上,使用者 在CAD 中就可以完成升级。 免去繁琐的下载和安装升级步骤。
安装
将以下代码复制到 CAD 命令行内,回车即可开始安装。 (在代码行里用鼠标连续三击全选,然后右键复制或Ctrl+C 。到CAD命令行内,右键粘贴或Ctrl+V)
 - (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))))))
|