2015-04-07 125 views
2

我試圖創建一個按鈕,當按下它時,標記繪圖的位置。現在這個方法看起來像這樣。在AutoCAD中使用編輯器類來執行命令

[CommandMethod("MARKPOS", CommandFlags.Session)] 
public void MarkPosition() 
{ 
    Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor; 
    ed.Command("UNDO", "M"); 
} 

然而,當我嘗試和執行方法,我得到如下圖所示的錯誤,不能確定原因。

enter image description here

**************異常文本************** Autodesk.AutoCAD.Runtime.Exception:eInvalidInput 在Autodesk.AutoCAD.EditorInput.Editor.Command(Object []參數) at AutoCAD_Adapter.MyCommands.MarkPosition()in c:\ Users \ nickg \ Documents \ All Code \ autocad-adapter \ IOAutoCADHandler \ myCommands.cs:line 186 at Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorker(MethodInfo mi,Object commandObject,Boolean bLispFunction) at Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorkerWithExceptionFilter(MethodInfo mi,Object commandObject,Boolean bLispFunction) 在Autodesk.AutoCAD.Runtime.PerDocumentCommandClass.Invoke(MethodInfo的MI,布爾bLispFunction) 在Autodesk.AutoCAD.Runtime.CommandClass.CommandThunk.Invoke()

+0

嘗試看我的意見「奧古斯托貢薩爾維斯」。他有正確的答案,但要澄清,您的eInvalidInput異常是您的CommandMethod正在運行的上下文的結果。 – bjhuffine

回答

0

使用此:

Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.SendStringToExecute 
+0

將此代碼置於上下文中會改善答案 – Tyrsius

+0

該方法是同步的。它會一直等到C#方法的結尾發送字符串,此時需要執行該命令 –

+0

@Nick G:您可能不是這個意思,但SendStringToExecute()是異步的。從AutoCAD .NET開發人員指南:「使用SendStringToExecute執行的命令是異步的,直到.NET命令結束纔會被調用」 – bjhuffine

1

的SendStringToExecute會一直工作到AutoCAD 2014.在AutoCAD 2015(和更新版本)上,這被替換爲Editor.Command或Editor.CommandAsync。

關於原代碼,請與

[CommandMethod("MARKPOS")] 
public static void MarkPosition() 
{ 
    Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor; 
    ed.Command(new object[]{"UNDO", "M"}); 
} 
+1

實際上,SendStringToExecute()在2015 API中仍然可用。我已經使用它,你可以在AcCoreMgd.dll中找到它。但是'Nick G'的問題在於,他在應用程序上下文中通過將CommandFlags.Session枚舉添加到他的CommandMethod屬性中來執行此操作。 Editor.Command()僅適用於DocumentContext。真的,他所需要做的就是去除Session枚舉,它將起作用。 – bjhuffine

+0

這是正確的,但Editor.Command和CommandAsync更好,因爲我們有控制(同步或異步),這就是我建議替換的原因。 –