我試圖標記我的繪圖,然後以編程方式插入一個塊,以便我可以以編程方式撤消該操作,因爲它只是由於出現錯誤而部分完成。眼下是插入方法是這樣的正確使用AutoCAD API的Document.SendStringToExecute方法
public void askForInsertionPoint
{
StateManagementExtensions.MarkPosition();
try
{
PromptPointResult pr = ed.GetPoint("\nSelect insertion point: ");
Point3d insPt = pr.Value;
}
catch(Exception e)
{
//TODO handle exception with undo
}
}
MarkPosition被定義爲
public static void MarkPosition()
{
doc.SendStringToExecute("MARKPOS ", true, false, true);
}
最後,發送MARKPOS到命令行正如我在上面做調用此方法
[CommandMethod("MARKPOS")]
public void MarkPosition()
{
Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
ed.Command("UNDO", "M");
}
的pointprompt以某種方式擊敗了對AutoCAD命令行的MARKPOS調用,因此它試圖輸入MARKPOS作爲插入點,而不是暫停C#方法等待MARKPOS作爲命令執行。在提示插入點之前,如何指示程序等待並執行MARKPOS命令?我已經嘗試過SendStringToExecute調用後的Thread.sleep(),並沒有工作。
你爲什麼不直接調用'MarkPosition'? (或者可能是'ed.Command(「UNDO」,「M」);'?) – crashmstr 2015-04-02 18:57:33
因爲這樣會因爲某種原因產生eInvalidInput異常 – 2015-04-02 19:39:15
我現在主要使用RealDWG,但是可以使用[Transaction](http: //docs.autodesk.com/ACD/2010/ENU/AutoCAD%20.NET%20Developer's%20Guide/index.html?url=WS73099cc142f48755-5c83e7b1120018de8c0-3c0.htm,topicNumber=d0e54861),而不是設置撤消標記? – crashmstr 2015-04-02 19:50:09