liu22737
发表于 2013-12-19 11:04:16
菜卷鱼 发表于 2013-12-19 10:57 static/image/common/back.gif
可以一次撤销,就是撤销的时候出现很多“(LISP 表达式)”
可以用 PRINC
ll_j
发表于 2013-12-19 12:56:49
问题出在使用了command函数,但不知怎样解决。
菜卷鱼
发表于 2013-12-19 14:27:50
自贡黄明儒 发表于 2013-12-19 14:16 static/image/common/back.gif
;;你这样试试
麻烦黄大师了,这样我也试过了,还是一样,实在弄不清原因,有人说事command的原因,但是我有另外的程序用了command,但是撤销的时候不会有很多“(LISP 表达式)”提示。
虽然这样不影响程序使用,但是我想知道到底什么原因。
菜卷鱼
发表于 2013-12-19 15:26:58
菜卷鱼 发表于 2013-12-19 14:27 static/image/common/back.gif
麻烦黄大师了,这样我也试过了,还是一样,实在弄不清原因,有人说事command的原因,但是我有另外的程序用 ...
可能是我CAD哪个参数跟你们设置的不同,麻烦黄大师了,我再慢慢找原因吧
菜卷鱼
发表于 2013-12-20 14:16:49
这问题恐怕是没人解决了
自贡黄明儒
发表于 2013-12-20 15:01:45
菜卷鱼 发表于 2013-12-20 14:16 static/image/common/back.gif
这问题恐怕是没人解决了
你使用(vla-StartUndoMark *DOC*)替代(command "_.undo" "be")试试
菜卷鱼
发表于 2013-12-20 17:02:23
自贡黄明儒 发表于 2013-12-20 15:01 static/image/common/back.gif
你使用(vla-StartUndoMark *DOC*)替代(command "_.undo" "be")试试
Vla函数不会用,直接替代的话出错 “函数中出错参数类型错误: VLA-OBJECT nil”
菜卷鱼
发表于 2013-12-20 17:13:15
本帖最后由 菜卷鱼 于 2013-12-20 17:19 编辑
自贡黄明儒 发表于 2013-12-20 15:01 static/image/common/back.gif
你使用(vla-StartUndoMark *DOC*)替代(command "_.undo" "be")试试
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=93046
参考了您这个帖子里的vla-EndUndoMark用法,但是没有效果,还是出现很多“(LISP 表达式)”提示
自贡黄明儒
发表于 2013-12-21 08:08:13
本帖最后由 自贡黄明儒 于 2013-12-21 08:45 编辑
菜卷鱼 发表于 2013-12-20 17:13 http://bbs.mjtd.com/static/image/common/back.gif
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=93046
参考了您这个帖子里的vla-EndUndoMark用法,但 ...
;;是不是这样的
(defun c:et ()
(vl-load-com)
(or *DOC*
(setq *DOC* (vla-get-ActiveDocument (vlax-get-acad-object)))
)
(vla-StartUndoMark *DOC*)
(setvar "cmdecho" 0)
(setq ptlist1 nil)
(setq ss (ssget '((0 . "INSERT"))))
(setq ss0 (sort-se (sort-se ss 10 1 50 nil) 10 0 2 nil))
(setq sct (sslength ss))
(setq x1 0
x2 0
)
(setq ss1 ss0
ss2 ss0
)
(repeat sct
(setq sent (entget (ssname ss1 x1)))
(setq ascd10 (assoc 10 sent))
(setq ptlist1 (cons ascd10 ptlist1))
(setq x1 (1+ x1))
)
(etmove)
(vla-EndUndoMark *DOC*)
(princ)
)
(defun etmove ()
(setvar "cmdecho" 0)
(setq ptlist2 ptlist1)
(repeat sct
(setq acx10 (cdr (car ptlist2)))
(setq ptlist2 (cdr ptlist2))
(setq sn (ssname ss2 x2))
(setq sent2 (entget sn))
(setq acy10 (cdr (assoc 10 sent2)))
(command "_move" sn "" acy10 acx10)
(setq x2 (1+ x2))
)
(setvar "cmdecho" 1)
)
菜卷鱼
发表于 2013-12-21 08:34:21
自贡黄明儒 发表于 2013-12-21 08:08 static/image/common/back.gif
;;是不是这样的
这样的话就不能一步返回