尘缘一生 发表于 2014-10-29 18:51:22

求自动恢复扑捉代码

本帖最后由 尘缘一生 于 2014-10-29 20:01 编辑

前言:

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

1:虽然本论坛有介绍,我实验后,都不行。
2:能不能写段代码?一直监视程序的执行,发现中断,就立即执行这段代码?这一个办法不行吗?。
3:能不能写段代码,叫每个LISP命令执行完,都自动执行它,不就可以啦?
4:至于反应器,看不懂,不知道怎么用。

Gu_xl 发表于 2014-10-29 19:18:52

[转贴]防止捕捉丢失 By free-Lancer

spp_wall 发表于 2014-10-29 19:20:08

G版的转帖试了能解决!

尘缘一生 发表于 2014-10-29 19:26:08

Gu_xl 发表于 2014-10-29 19:18 static/image/common/back.gif
[转贴]防止捕捉丢失 By free-Lancer

看啦,不知道怎么用,加了LISP,还是不行

Gu_xl 发表于 2014-10-29 19:28:55

本帖最后由 Gu_xl 于 2014-10-29 19:32 编辑

尘缘一生 发表于 2014-10-29 19:26 static/image/common/back.gif
看啦,不知道怎么用,加了LISP,还是不行
将这段代码保存为lsp文件,添加到启动组或加到acad.lsp中即可!
(or *osmodemonitor*   (setq *osmodemonitor*
           (vlr-lisp-reactor
             nil
             '((:VLR-lispWillStart . SaveOsmode)
             (:vlr-lispEnded . ResetOsmode)
             (:vlr-lispCancelled . ResetOsmode)
              )
           )
    )
)                                ;反应器构造
;;回调函数
(defun SaveOsmode (v1 v2)
(setq *LastOsmode* (getvar 'osmode))
   (princ)
)
(defun ResetOsmode (v1 v2)
(if (and *LastOsmode*
           (/= (getvar "osmode") *LastOsmode*)
           )
    (setvar "osmode" *LastOsmode*)
)
   (princ)
)

尘缘一生 发表于 2014-10-29 19:45:07

Gu_xl 发表于 2014-10-29 19:28 static/image/common/back.gif
将这段代码保存为lsp文件,添加到启动组或加到acad.lsp中即可!

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

669423907 发表于 2014-10-29 23:04:20

原来可以加很多东西进去的

尘缘一生 发表于 2014-11-2 19:34:59

经过这几天工作,发现,还是有1%的时候,丢失。

hbgsw 发表于 2015-4-28 23:50:15

好东西啊,这个写的好。

ㄘ丶转裑ㄧ灬 发表于 2016-6-13 13:00:44

本帖最后由 ㄘ丶转裑ㄧ灬 于 2016-6-13 13:13 编辑

Gu_xl 发表于 2014-10-29 19:28 static/image/common/back.gif
将这段代码保存为lsp文件,添加到启动组或加到acad.lsp中即可!
顾老师,代码里有(or和(if (and定义捕捉状态,那如果要把动态输入也恢复的话应该怎么加?

因为CAD2014版本以上,在命令行输入字母+中文字符的情况下,会把前面的字母消除,所以需要用到动态输入,
但是平常是不用动态输入的,所以如果在命令行新建图层/命令行改块名等程序中手动中断的话,需要恢复无动态;
我原来改反应器的时候是直接把条件设为了其它值,改用备份旧变量值进行判断不会改。。(defun resetosmode (v1 v2 /)
(if (/= (getvar "osmode") 4775)
(progn
   (setvar "osmode" 2183)
      (setvar "dynmode" -2)
)
)
;;;(princ "*********已恢复捕捉设置及动态输入设置\n")
(princ)
)
;;;;;构造编辑器反应器对象;;如果没有数据则为 nil
(vlr-editor-reactor
nil
'(
    ;;;(:vlr-lispEnded . ResetOsmode) ;;;已完成对 AutoLISP 表达式的求值
    (:vlr-lispCancelled . ResetOsmode) ;;;已取消对 AutoLISP 表达式的求值
    ;;;(:vlr-commandEnded . ResetOsmode);;;已完成某 AutoCAD 命令
    ;;;(:vlr-commandCancelled . ResetOsmode) ;;; 已取消某 AutoCAD 命令
    ;;;(:vlr-commandFailed . ResetOsmode);;; 无法完成某 AutoCAD 命令
   )
)
页: [1]
查看完整版本: 求自动恢复扑捉代码