6

我正在尝试编写两种调用 AutoCAD 的 UNDO 命令并传入不同参数的方法。第一个方法调用UNDO并传递M,表示标记绘图的位置。第二种方法调用UNDO并传递B,这意味着撤消一直回到标记的位置(如果没有,则结束)。到目前为止,它们非常简单

        /// <summary>
        /// Method to mark the current position of the AutoCAD program
        /// </summary>
        public static void MarkPosition()
        {
            doc.SendStringToExecute("._UNDO M", true, false, true);
        }

        /// <summary>
        /// Method to step AutoCAD back int steps
        /// </summary>
        public static void BigUndo()
        {
            doc.SendStringToExecute("._UNDO B", true, false, true);
        }

这些看起来应该可以工作,但由于某种原因它们没有。当我调用 MarkPosition() 然后 BigUndo() 时,我收到一条错误消息,提示遇到组开始;输入 Undo End 以进一步返回。测试我的语法。我将 MarkPosition 更改为

public static void MarkPosition() 
{
    doc.SendStringToExecute("circle 2,2,0 4 ", true, false, true);
}

成功绘制了一个圆圈。这意味着我的语法是正确的,但是 Undo 发生了一些奇怪的事情。

4

3 回答 3

2

当您使用 SendCommand 时,最后总是需要一个空格,这将确保命令运行。

此外,在 AutoCAD 2015(及更高版本)上,您可以使用 Editor.Command 或 Editor.CommandAsync,这要好得多。

http://adndevblog.typepad.com/autocad/2014/04/migration-after-fiber-is-removed-in-autocad-2015.html

于 2015-04-29T12:09:02.553 回答
0

您发送的空格未被 AutoCAD 识别为新行。您必须先添加新行,然后将下一个字符发送到另一行,如下所示:

            doc.SendStringToExecute("._UNDO\n", true, false, true);
            doc.SendStringToExecute("M\n", true, false, true);

            doc.SendStringToExecute("._UNDO\n", true, false, true);
            doc.SendStringToExecute("B\n", true, false, true);
于 2015-04-21T12:50:33.380 回答
0

您缺少命令字符串的空格 @END。

 doc.SendStringToExecute("._UNDO B", true, false, true); // Instead of this
 doc.SendStringToExecute("._UNDO B ", true, false, true); // use this
于 2017-03-26T15:36:31.423 回答