2015-03-31 82 views
6

我在写两个调用AutoCAD的UNDO命令并传入不同参数的方法。第一种方法调用UNDO并传递M,这意味着标记图形的位置。第二种方法调用UNDO并传递B,这意味着撤销一直回到标记的位置(或者如果没有一个,则结束)。到目前为止,他们是非常简单的从C#.NET调用AutoCAD命令

 /// <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()时,我收到一个错误,表示遇到组的开始;进入撤销结束以进一步返回。测试我的语法。我将MarkPosition更改为

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

它成功画了一个圆圈。这意味着我的语法是正确的,但有些奇怪的是与撤消。

+0

大概在AutoCAD中直接输入命令会给你想要的响应吗? – ZombieSheep 2015-03-31 16:56:27

+0

是的,这是正确的 – 2015-03-31 17:08:26

+0

SendStringtoExecute是异步的。它们在.net代码结束后执行。你确定你正在测试正确的东西吗?尝试在标记和背面之间通过此方法绘制圆圈 http://help.autodesk.com/view/ACD/2016/ENU/?guid=GUID-F4A36181-39FB-4923-A2AF-3333945DB289 – Alain 2015-04-01 05:54:55

回答

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); 
0

你错过的命令字符串的空间@END。

doc.SendStringToExecute("._UNDO B", true, false, true); // Instead of this 
doc.SendStringToExecute("._UNDO B ", true, false, true); // use this