(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:57 编辑
向N版学习。图开太大时regen很慢呀,尽量少用。 看看,怎么变化的 向N版学习 本帖最后由 lucas3 于 2016-4-26 20:19 编辑
能不能做到undo之后自动regen的 ,比如对块内对象进行操作,一般代码中都会在后面加入
(vla-regen adoc acallviewports) 之后(vla-endundomark adoc) ,但是一旦undo之后,看不出变化,需要手动Regen ,难道说要用到反应器来解决此问题?
lucas3 发表于 2016-4-26 20:10
能不能做到undo之后自动regen的 ,比如对块内对象进行操作,一般代码中都会在后面加入
(vla-regen adoc a ...
你可以单独REGEN这个块啊。 newer 发表于 2016-4-26 20:24
你可以单独REGEN这个块啊。
我的意思是:比如改变了块内对象的颜色,但是我发现改错了,CTRL+Z回去,虽然撤销了更改,但是看不到变化,需要regen一次,可能CAD不熟悉的人会说,撤销没有反应呀 ,所以我想CTRL+Z后自动REGEN, 我想只能用反应器了
lucas3 发表于 2016-4-26 23:19
我的意思是:比如改变了块内对象的颜色,但是我发现改错了,CTRL+Z回去,虽然撤销了更改,但是看不到变化 ...
是的,我明白你的意思,我的意思是说你可以单独REGEN下这个块,让它自己更新。
你要看效果,试试 (xdrx_object_regen <实体名 or 选择集>) ,看看是你要的结果不?
[ 本帖最后由 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 怎么修改? lucas3 发表于 2016-4-26 23:19
我的意思是:比如改变了块内对象的颜色,但是我发现改错了,CTRL+Z回去,虽然撤销了更改,但是看不到变化 ...
有点明白你的意思了,你可以自己在程序里面加个选项 啊,后悔了不退出程序按U,然后你代码自己解决了。
向N版学习,向N版致敬 newer 发表于 2016-4-27 00:26
有点明白你的意思了,你可以自己在程序里面加个选项 啊,后悔了不退出程序按U,然后你代码自己解决了。
其实用
(vla-regen (vla-get-ActiveDocument (VLAX-GET-ACAD-OBJECT)) acAllViewports)
也可以用
(vla-Update (vlax-ename->vla-object (entlast)))
回复学习{:1_1:} 回复学习。 努力再努力,期待有新的发现
页:
[1]
2