1

c# Autocad プラグイン アプリケーションで、アクティブな Autocad 図面で選択したすべてのオブジェクトを取得するにはどうすればよいですか?

次のように選択セットを取得しようとしました。

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

foreach (SelectedObject Instance in Selection) ...

このような選択セットがあれば、選択したオブジェクトを取得できるようです。問題は、行で null 参照例外を取得することです。

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

2 に答える 2

3

私は彼に解決策を得ました。

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

このコードは選択したオブジェクトを提供しますが、質問で指摘したように、null 参照例外が発生します。これは、バックグラウンド スレッドでオブジェクトを取得しようとしていたためです。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 に答える