2015-03-31 89 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