明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 915|回复: 5

取自明经大佬的记忆捕捉,本人小白有些地方看不懂,不能设置命令哪位大佬帮忙改下

[复制链接]
发表于 2022-12-9 12:16:17 | 显示全部楼层 |阅读模式
66明经币
(vl-load-com)
(defun c:bbb (/    ;局部函数
       *error*      PEACE:SaveSysVarPeace
       PEACE:ReadSysVarPeace     SaveSysVar
       SaveOsmode  ;局部变量
       dclname      tempname     filen
       stream      dcl_re     ST
       RT      SS      RS
      )
     ;局部变量开始
     ;自定义错误函数
  (defun *error* (msg)
    (command ".UNDO" "E")
    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
(princ (strcat "\n** Error: " msg " **"))
    )
    (princ)
  )
     ;保存peace系统变量,保存到cad安装目录下的PEACESYSVAL.TXT by PEACE 2013/05/25
  (defun PEACE:SaveSysVarPeace (valname    valvalue   infotext
    /    acadpath   f
    datalist   data       valvalue_old
    i    isthere
          )
    (setq acadpath (vlax-get-property (vlax-get-acad-object) 'Path))
    (if (= infotext "")
      (setq infotext "no infotext")
    )
    (if (null (findfile "PEACESYSVAL.TXT"))
      (progn    ;若文件不存在
(setq f (open (strcat acadpath "\\PEACESYSVAL.TXT") "w"))
(prin1 (list valname valvalue infotext) f)
(close f)
      )
      (progn    ;若文件已存在
(setq datalist '())
(setq f (open (strcat acadpath "\\PEACESYSVAL.TXT") "r"))
(while (setq data (read-line f))
   (setq datalist (cons data datalist))
)
(close f)
(setq datalist (reverse datalist))
(setq i 0
       isthere 0
)
(repeat (length datalist)
   (if (= valname (car (read (nth i datalist))))
     (progn
       (setq
  datalist (subst (vl-prin1-to-string
      (list valname valvalue infotext)
    )
    (nth i datalist)
    datalist
    )
       )
       (setq isthere 1)
     )
   )
   (setq i (1+ i))
)
(if (= 1 isthere)
   (progn
     (setq f (open (strcat acadpath "\\PEACESYSVAL.TXT") "w"))
     (prin1 (read (nth 0 datalist)) f)
     (close f)
     (setq i 1)
     (setq f (open (strcat acadpath "\\PEACESYSVAL.TXT") "a"))
     (repeat (- (length datalist) 1)
       (write-line "" f)
       (prin1 (read (nth i datalist)) f)
       (setq i (1+ i))
     )
     (close f)
   )
   (progn
     (setq f (open (strcat acadpath "\\PEACESYSVAL.TXT") "a"))
     (write-line "" f)
     (prin1 (list valname valvalue infotext) f)
     (close f)
   )
)
      )
    )
    (princ)
  )
     ;读取peace系统变量 by PEACE 2013/05/25
  (defun PEACE:ReadSysVarPeace (/ acadpath data datalist i f)
    (setq acadpath (vlax-get-property (vlax-get-acad-object) 'Path))
    (if (findfile "PEACESYSVAL.TXT")
      (progn
(setq datalist '())
(setq f (open (strcat acadpath "\\PEACESYSVAL.TXT") "r"))
(while (setq data (read-line f))
   (setq datalist (cons data datalist))
)
(reverse datalist)
(close f)
(setq i 0)
(repeat (length datalist)
   (set (read (car (read (nth i datalist))))
     ;注意字符和表之间的转换,字符串是不能作为变量名的
        (cadr (read (nth i datalist)))
     ;car对字符串也是不起作用的
   )
   (setq i (1+ i))
)
      )
      nil
    )
  )
  (defun SaveSysVar ()
    (PEACE:SaveSysVarPeace
      "PEACE:MO_O"
      PEACE:MO_O
      "PEACE-MyOsmode捕捉模式"
    )
    (PEACE:SaveSysVarPeace
      "PEACE:MO_T"
      PEACE:MO_T
      "PEACE-MyOsmode状态文字"
    )
  )
  (defun SaveOsmode ()
    (setq PEACE:MO_O (getvar "osmode")
   PEACE:MO_T (menucmd
         "m=$(edtime,$(getvar,DATE),YYYY/M/D hh:mm:ss)"
       )
   ST      (strcat "最近保存于:" PEACE:MO_T)
   RT      (strcat "成功还原至:" PEACE:MO_T)
    )
  )
     ;局部函数结束
     ;主函数开始
  (princ "PEACE-MyOsmode 捕捉模式保存于还原")
  (PEACE:ReadSysVarPeace)
  (if (not PEACE:MO_T)
    (setq ST "未曾保存!"
   RT "未曾保存!"
    )
    (setq ST (strcat "最近保存于:" PEACE:MO_T)
   RT (strcat "成功还原至:" PEACE:MO_T)
    )
  )     ;状态显示
  (if (not PEACE:MO_O)
    (setq PEACE:MO_O 0)
  )     ;捕捉模式
  (setq SS 0
RS 0
  )
  (setq dclname
  (cond
    ((setq tempname (vl-filename-mktemp "PEACEDCL.dcl")
    filen    (open tempname "w")
     )
     (foreach stream
       '("\n"
         "dcl01:dialog {\n"
         "    label = \"捕捉模式保存与还原\"; \n"
         "    :row { \n"
         "    :text {label=\"未曾保存!\" ; key=\"ea01\" ; } \n"
         "         } \n"
         "    :row { \n"
         "      :button{label=\"保存\" ; key = \"ea02\" ; edit_width = 10 ;   height = 1.2 ;  } \n"
         "      :button{label=\"还原\" ; key = \"ea03\" ; edit_width = 10 ;   height = 1.2 ;  } \n"
         "         } \n"
         "    ok_cancel;"
         "    }"
        )
       (princ stream filen)
     )
     (close filen)
     tempname
    )
  )
  )
  (setq dcl_re (load_dialog dclname))
  (if (not (new_dialog "dcl01" dcl_re))
    (exit)
  )
  (mode_tile "accept" 2)
  (set_tile "ea01" ST)
  (action_tile
    "ea02"
    "(SaveOsmode)(set_tile \"ea01\" ST)(SETQ SS 1)"
  )
  (action_tile
    "ea03"
    "(setvar \"osmode\" PEACE:MO_O)(set_tile \"ea01\" RT)(SETQ RS 1)"
  )
  (action_tile "accept" "(SaveSysVar)(done_dialog)")
  (action_tile "cancel" "(done_dialog)")
  (start_dialog)
  (unload_dialog dcl_re)
  (vl-file-delete dclname)
  (if (= SS 1)
    (princ (strcat "\n*** " ST "!"))
  )
  (if (= RS 1)
    (princ (strcat "\n*** " RT "!"))
  )
  (if (and (= SS 0) (= RS 0))
    (princ "\n*** 未做任何修改, 程序退出!")
  )
  (princ)
)

最佳答案

查看完整内容

试了一下 bbb可以用呀

本帖被以下淘专辑推荐:

发表于 2022-12-9 12:16:18 | 显示全部楼层
hx29896 发表于 2022-12-10 09:06
我想把这个快捷键设置成BBB,在LSP里加载不成功显示未知命令

试了一下  bbb可以用呀

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

发表于 2022-12-9 14:35:10 | 显示全部楼层
看不懂要干嘛
回复

使用道具 举报

 楼主| 发表于 2022-12-10 09:06:18 | 显示全部楼层

我想把这个快捷键设置成BBB,在LSP里加载不成功显示未知命令
回复

使用道具 举报

 楼主| 发表于 2022-12-10 15:39:25 | 显示全部楼层
xj6019 发表于 2022-12-9 12:16
试了一下  bbb可以用呀

你发的我可以用,自己的就用不了:
回复

使用道具 举报

发表于 2023-1-15 13:36:16 | 显示全部楼层
收藏了!有一天可能会用到
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-18 08:17 , Processed in 0.170846 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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