MJLM 发表于 2022-7-5 16:33:07

如何摆脱烦恼

前一段时间我已经问过了,但没有回复,我想我可以再试一次。
 
当我运行以开始的lisp例程时
 
(command "_.undo" "_BE")
 
并以结束
 
(command "_.undo" "_E")
 
无论出于何种原因,我按“u”键,就会在命令提示符下多次收到令人讨厌的消息(Lisp表达式)。
 

 
有没有办法隐藏这条重复的信息,或者用其他方法摆脱它?
 
非常感谢。

broncos15 发表于 2022-7-5 16:39:00

我不知道怎样才能消除回声。但是,我也建议不要使用命令函数,而是使用Visual LISP进行撤消。Lee Mac的代码非常好:
;; Start Undo-Lee Mac
;; Opens an Undo Group.
(defun LM:startundo ( doc )
   (LM:endundo doc)
   (vla-startundomark doc)
)
;; End Undo-Lee Mac
;; Closes an Undo Group.
(defun LM:endundo ( doc )
   (while (= 8 (logand 8 (getvar 'undoctl)))
       (vla-endundomark doc)
   )
)
;; Active Document-Lee Mac
;; Returns the VLA Active Document Object
(defun LM:acdoc nil
   (eval (list 'defun 'LM:acdoc 'nil (vla-get-activedocument (vlax-get-acad-object))))
   (LM:acdoc)
)

MJLM 发表于 2022-7-5 16:41:50

我不确定我是否正确使用了李的代码,但我试过这样做
 
但是我没有注意到任何不同。我做错什么了吗?
 
顺便说一句,为什么我应该使用这种方式而不是本机undo命令?只是为了抑制信息,还是有其他优势?

broncos15 发表于 2022-7-5 16:50:00

其中一个主要优点是,您可以在错误处理程序中使用它,而无需使用命令执行推送错误。此外,在LISP程序中不使用AutoCAD命令通常更快。

MJLM 发表于 2022-7-5 16:54:33

谢谢,但这是我应该像上面写的那样使用例程的方式吗?

Grrr 发表于 2022-7-5 16:56:27

我曾想过创建一个关闭/打开cmdecho变量的vlr命令反应器或vlr Undo反应器,但我的尝试失败了。

BIGAL 发表于 2022-7-5 17:01:30

我的问题是,你为什么要使用“撤消”呢?你是在做某种形式的相交线等,并计算出点,这样就可以删除对象了吗?如果是这样,请使用(setq objx entlast),然后在右侧点vla delete objx。您将不会看到任何提示。我经常在需要解决问题的地方这样做。

MJLM 发表于 2022-7-5 17:03:31

我使用undo只是为了能够撤消整个lisp例程。仅此而已。该例程有多个步骤。。主要结构基本上是一个具有各种选项的“cond”,编辑块的选择、删除整个组、更改其他参数等。cond命令位于while循环内,因此用户可以保持编辑组,而无需每次退出例程。我相信这会增加写入内存的步骤,以便稍后撤消。如果我不使用撤销BE和E过程,那么我将不得不逐个撤销不可接受的每个步骤。顺便说一句,我在上面展示的撤销功能很好,只是我不断收到问题的消息。

BIGAL 发表于 2022-7-5 17:09:45

在40多年的lisp语言学习之后,我使用undo的次数几乎无法衡量,我觉得你需要真正解释一下为什么你在使用undo,而不是记住最后可以使用的实体。
 
 
没有任何意义。

MJLM 发表于 2022-7-5 17:12:39

我不需要进一步解释。我在上面写道。如果你真的想帮助别人,而不仅仅是通过毫无意义的信息,那么展示一下如何做到这一点,让别人学习一些新的东西。我以为这个论坛就是为了这个。
 
如果某件事对你来说没有意义,那么它可能对其他人也有意义。
页: [1] 2
查看完整版本: 如何摆脱烦恼