1

如何在我的 c# Autocad 插件应用程序中获取活动 Autocad 图形上的所有选定对象?

我试图得到一个选择集,如下所示:

SelectionSet Selection = AcadApp.DocumentManager.MdiActiveDocument.Editor.SelectImplied().Value;

foreach (SelectedObject Instance in Selection) ...

如果我有这样的选择集,我似乎可以获得选定的对象。问题是我在行中得到空引用异常:

AcadApp.DocumentManager.MdiActiveDocument.Editor.SelectImplied().Value
4

2 回答 2

3

我得到了他的解决方案。

AcadApp.DocumentManager.MdiActiveDocument.Editor.SelectImplied().Value

此代码给出了选定的对象,但正如我在问题中指出的那样,我得到空引用异常。这是因为我试图在后台线程中获取对象。http://adndevblog.typepad.com/autocad/2012/06/use-thread-for-background-processing.html提到了这个问题。

当我在主线程中调用 MdiActiveDocument 然后我将结果发送到我的后台线程进行处理时,问题就解决了。

于 2013-07-11T09:43:03.537 回答
2

我想这就是你要找的。我在没有 IDE 的情况下录制了这个,所以检查一下。

using AcApp = Autodesk.Autocad.ApplicationServices.Application;


public class yourclass 
{
  public Document AcDoc {
        get { return AcApp.DocumentManager.MdiActiveDocument;} 
    }     
  public static void getSelectionSet()
  {
    var _editor = AcDoc.Editor;
    var _selAll = ed.SelectAll();
    var _SelectionSet = _selAll.Value;

    using(var trans = AcDoc.TransactionManager.StartTransaction()){
      foreach(var ObjId in _SelectionSet.GetObjectIds()){
        // apply logic
      }
      trans.Commit();
    } 
  }

或者如果你想返回一个 SelectionSet

    public class yourclass
{
public Document AcDoc {
    get { return AcApp.DocumentManager.MdiActiveDocument;}
}

    public static SelectionSet getSelectionSet()
    {
        var _editor = AcDoc.Editor;
        var _selAll = ed.SelectAll();
        return _selAll.Value;
    }
}

原谅格式,我不能让它在堆栈上正常工作

于 2013-07-11T00:01:52.770 回答