明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1832|回复: 9

[源码] 求自动恢复扑捉代码

[复制链接]
发表于 2014-10-29 18:51 | 显示全部楼层 |阅读模式
本帖最后由 尘缘一生 于 2014-10-29 20:01 编辑

前言:

      一直为画图过程中,扑捉丢失烦恼,经常F3键重新设置。特为此求解决

1:虽然本论坛有介绍,我实验后,都不行。
2:能不能写段代码?一直监视程序的执行,发现中断,就立即执行这段代码?这一个办法不行吗?。
3:能不能写段代码,叫每个LISP命令执行完,都自动执行它,不就可以啦?
4:至于反应器,看不懂,不知道怎么用。
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-10-29 19:18 | 显示全部楼层

点评

(setq HH:Osmode (getvar "osmode")) 这是构建函数对吧?这个函数怎么用?  发表于 2014-10-29 19:28
发表于 2014-10-29 19:20 | 显示全部楼层
G版的转帖  试了能解决!

点评

(setq HH:Osmode (getvar "osmode")) 这是构建函数对吧?这个函数怎么用?  发表于 2014-10-29 19:27
关键我不知道怎么用哪个,加了,也不好用  发表于 2014-10-29 19:26
 楼主| 发表于 2014-10-29 19:26 | 显示全部楼层
Gu_xl 发表于 2014-10-29 19:18
[转贴]防止捕捉丢失 By free-Lancer

看啦,不知道怎么用,加了LISP,还是不行
发表于 2014-10-29 19:28 | 显示全部楼层
本帖最后由 Gu_xl 于 2014-10-29 19:32 编辑
尘缘一生 发表于 2014-10-29 19:26
看啦,不知道怎么用,加了LISP,还是不行

将这段代码保存为lsp文件,添加到启动组或加到acad.lsp中即可!
  1. (or *osmodemonitor*     (setq *osmodemonitor*
  2.            (vlr-lisp-reactor
  3.              nil
  4.              '((:VLR-lispWillStart . SaveOsmode)
  5.                (:vlr-lispEnded . ResetOsmode)
  6.                (:vlr-lispCancelled . ResetOsmode)
  7.               )
  8.            )
  9.     )
  10. )                                ;反应器构造
  11. ;;回调函数
  12. (defun SaveOsmode (v1 v2)
  13.   (setq *LastOsmode* (getvar 'osmode))
  14.    (princ)
  15. )
  16. (defun ResetOsmode (v1 v2)
  17.   (if (and *LastOsmode*
  18.            (/= (getvar "osmode") *LastOsmode*)
  19.            )
  20.     (setvar "osmode" *LastOsmode*)
  21.   )
  22.    (princ)
  23. )

点评

我马上试试,我加了,编译成VLX,前面多的代码啊,我不知道。  发表于 2014-10-29 19:31
 楼主| 发表于 2014-10-29 19:45 | 显示全部楼层
Gu_xl 发表于 2014-10-29 19:28
将这段代码保存为lsp文件,添加到启动组或加到acad.lsp中即可!

非常感谢,完美成功啊!!!!

发表于 2014-10-29 23:04 | 显示全部楼层
原来可以加很多东西进去的
 楼主| 发表于 2014-11-2 19:34 | 显示全部楼层
经过这几天工作,发现,还是有1%的时候,丢失。
发表于 2015-4-28 23:50 | 显示全部楼层
好东西啊,这个写的好。
发表于 2016-6-13 13:00 | 显示全部楼层
本帖最后由 ㄘ丶转裑ㄧ灬 于 2016-6-13 13:13 编辑
Gu_xl 发表于 2014-10-29 19:28
将这段代码保存为lsp文件,添加到启动组或加到acad.lsp中即可!

顾老师,代码里有(or和(if (and定义捕捉状态,那如果要把动态输入也恢复的话应该怎么加?

因为CAD2014版本以上,在命令行输入字母+中文字符的情况下,会把前面的字母消除,所以需要用到动态输入,
但是平常是不用动态输入的,所以如果在命令行新建图层/命令行改块名等程序中手动中断的话,需要恢复无动态;
我原来改反应器的时候是直接把条件设为了其它值,改用备份旧变量值进行判断不会改。。
  1. (defun resetosmode (v1 v2 /)
  2.   (if (/= (getvar "osmode") 4775)
  3. (progn
  4.    (setvar "osmode" 2183)
  5.         (setvar "dynmode" -2)
  6. )
  7.   )
  8. ;;;(princ "*********已恢复捕捉设置及动态输入设置\n")
  9.   (princ)
  10. )
  11. ;;;;;构造编辑器反应器对象;;如果没有数据则为 nil
  12. (vlr-editor-reactor
  13.   nil
  14.   '(
  15.     ;;;(:vlr-lispEnded . ResetOsmode) ;;;已完成对 AutoLISP 表达式的求值
  16.     (:vlr-lispCancelled . ResetOsmode) ;;;已取消对 AutoLISP 表达式的求值
  17.     ;;;(:vlr-commandEnded . ResetOsmode)  ;;;已完成某 AutoCAD 命令
  18.     ;;;(:vlr-commandCancelled . ResetOsmode) ;;; 已取消某 AutoCAD 命令
  19.     ;;;(:vlr-commandFailed . ResetOsmode);;; 无法完成某 AutoCAD 命令
  20.    )
  21. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 13:22 , Processed in 1.041797 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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