我试图编写两种调用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()时,我得到一个错误,说遇到了Start of Group;进入撤消结束以进一步返回。测试我的语法。我将MarkPosition改为
public static void MarkPosition()
{
doc.SendStringToExecute("circle 2,2,0 4 ", true, false, true);
}
成功绘制一个圆圈。这意味着我的语法是正确的,但撤消会发生一些奇怪的事情。
答案 0 :(得分:1)
使用SendCommand时,总是需要一个空格,以确保命令运行。
此外,在AutoCAD 2015(及更新版本)上,您可以使用Editor.Command或Editor.CommandAsync,这要好得多。
http://adndevblog.typepad.com/autocad/2014/04/migration-after-fiber-is-removed-in-autocad-2015.html
答案 1 :(得分: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);
答案 2 :(得分:0)
你错过了命令字符串@END的空格。
doc.SendStringToExecute("._UNDO B", true, false, true); // Instead of this
doc.SendStringToExecute("._UNDO B ", true, false, true); // use this