使用AutoCAD中的Editor类执行命令

问题描述 投票:0回答:4

我正在尝试创建一个按钮,按下该按钮即可标记绘图的位置。现在的方法看起来像这样。

[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(对象[]参数) 在 c:\Users 中的 AutoCAD_Adapter.MyCommands.MarkPosition() 处 ickg\Documents\所有代码 utocad-adapter\IOAutoCADHandler\myCommands.cs:第 186 行 在 Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorker(MethodInfo mi、对象 commandObject、布尔 bLispFunction) 在 Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorkerWithExceptionFilter(MethodInfo mi,对象 commandObject,布尔 bLispFunction) 在 Autodesk.AutoCAD.Runtime.PerDocumentCommandClass.Invoke(MethodInfo mi,布尔 bLispFunction) 在 Autodesk.AutoCAD.Runtime.CommandClass.CommandThunk.Invoke()

c# command autocad autocad-plugin
4个回答
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
投票

使用 CommandFlags.Session

时不能使用 ed.command()

0
投票

使用这个:

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

0
投票

您可以尝试的另一个想法是

static void Invoke(Action action)
{
   var docmgr = Application.DocumentManager;
   if(docmgr.IsApplicationContext)
   {
      docmgr.ExecuteInCommandContextAsync(unused =>
      {
         action();
         return Task.CompletedTask;
      }, null);
   }
   else
   {
      action();
   }
}

这就是您的称呼:

Invoke(() => YourMethod());

按照这里

© www.soinside.com 2019 - 2024. All rights reserved.