newer 发表于 2016-4-26 09:45:07

(command "regen") 代码会导致UNDO的状态变化的解决方法

执行代码前,UNDO状态UNDOCTL=21, 执行 (command "regen")后UNDOCTL=29了,带来了个UNDO GROUP的执行,如果解决呢?

这是一个问题,目前有两种解决方法:

一个是之后执行代码

(command "_regen" "_undo" "_e")


第二个方法是用VLA方法替代(command "regen")

**** Hidden Message *****

/db_自贡黄明儒_ 发表于 2016-4-26 09:55:33

本帖最后由 /db_自贡黄明儒_ 于 2016-4-26 09:57 编辑

向N版学习。图开太大时regen很慢呀,尽量少用。

lhtfhc 发表于 2016-4-26 10:20:48

看看,怎么变化的

lucas3 发表于 2016-4-26 10:46:29

向N版学习

lucas3 发表于 2016-4-26 20:10:06

本帖最后由 lucas3 于 2016-4-26 20:19 编辑

能不能做到undo之后自动regen的 ,比如对块内对象进行操作,一般代码中都会在后面加入
(vla-regen adoc acallviewports) 之后(vla-endundomark adoc) ,但是一旦undo之后,看不出变化,需要手动Regen ,难道说要用到反应器来解决此问题?

newer 发表于 2016-4-26 20:24:58

lucas3 发表于 2016-4-26 20:10
能不能做到undo之后自动regen的 ,比如对块内对象进行操作,一般代码中都会在后面加入
(vla-regen adoc a ...

你可以单独REGEN这个块啊。

lucas3 发表于 2016-4-26 23:19:02

newer 发表于 2016-4-26 20:24
你可以单独REGEN这个块啊。

我的意思是:比如改变了块内对象的颜色,但是我发现改错了,CTRL+Z回去,虽然撤销了更改,但是看不到变化,需要regen一次,可能CAD不熟悉的人会说,撤销没有反应呀 ,所以我想CTRL+Z后自动REGEN, 我想只能用反应器了

newer 发表于 2016-4-26 23:32:55

lucas3 发表于 2016-4-26 23:19
我的意思是:比如改变了块内对象的颜色,但是我发现改错了,CTRL+Z回去,虽然撤销了更改,但是看不到变化 ...

是的,我明白你的意思,我的意思是说你可以单独REGEN下这个块,让它自己更新。

你要看效果,试试 (xdrx_object_regen <实体名 or 选择集>) ,看看是你要的结果不?

lucas3 发表于 2016-4-27 00:11:09

[ 本帖最后由 lucas3 于 2016-4-27 00:12 编辑 ]\n\n我已知反应器的解决方案,XD的API 总是要更新,所以没怎么用过,它怎么知道我UNDO过?需要更新?
一个简单的例子
(defun c:tt (/ acdoc ss )
(vl-load-com)
(setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
(if (setq ss (ssget "_+.:S" '((0 . "INSERT"))))
    (vlax-for Blocks
            (vla-item (vla-get-blocks acdoc) (vla-get-effectivename(vlax-ename->vla-object (ssname ss 0))))
          (vla-put-color blocks 256)
      )
    (princ)
)
(vla-regen acdoc acActiveViewport)
(princ)
)

用xdrx_object_regen 怎么修改?

newer 发表于 2016-4-27 00:26:38

lucas3 发表于 2016-4-26 23:19
我的意思是:比如改变了块内对象的颜色,但是我发现改错了,CTRL+Z回去,虽然撤销了更改,但是看不到变化 ...

有点明白你的意思了,你可以自己在程序里面加个选项 啊,后悔了不退出程序按U,然后你代码自己解决了。

HLCAD 发表于 2016-4-27 08:32:25

向N版学习,向N版致敬

lucas3 发表于 2016-4-27 14:51:19

newer 发表于 2016-4-27 00:26
有点明白你的意思了,你可以自己在程序里面加个选项 啊,后悔了不退出程序按U,然后你代码自己解决了。

其实用
(vla-regen (vla-get-ActiveDocument (VLAX-GET-ACAD-OBJECT)) acAllViewports)
也可以用
(vla-Update (vlax-ename->vla-object (entlast)))

laiz3000 发表于 2018-10-26 11:25:49

回复学习{:1_1:}

sicky111 发表于 2018-10-28 10:03:38

回复学习。

sn1229 发表于 2020-4-15 11:14:21

努力再努力,期待有新的发现
页: [1] 2
查看完整版本: (command "regen") 代码会导致UNDO的状态变化的解决方法