获取活动Autocad文档中的所有选定对象

时间:2013-07-10 10:27:37

标签: c# autocad-plugin

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

我试图获得如下选择集:

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

foreach (SelectedObject Instance in Selection) ...

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

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

2 个答案:

答案 0 :(得分: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;
    }
}

原谅格式化,我无法让它在堆栈上正常工作

答案 1 :(得分:2)

我得到了解决方案。

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

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

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