※当ブログでは商品・サービスのリンク先にプロモーションを含みます。ご了承ください。

選択する

【RevitAPI】ElementMulticlassFilterで複数クラスの取得

RevitAPI-ElementMulticlassFilter
  • FilteredElementCollectorで複数のクラスを取得したい
  • OfClassメソッドは単独クラスしか取得できないけど、何か方法はあるの?

そんな時にはElementMulticlassFilterクラスを使えばOKです!

というわけで、ここではElementMulticlassFilterクラスの基本的な使い方を紹介します。

なおFilteredElementCollectorクラス、OfClassメソッドの使い方は下記の記事をご覧いただければ幸いです。

FilteredElementCollector
FilteredElementCollectorで要素選択RevitAPIでFilteredElementCollectorを使った要素選択方法を紹介します。ドキュメントすべてから選択する方法と、指定したビューから選択する方法がありますよ^^...
RevitAPI-OfClass
【FilteredElementCollector】OfClassでクラスでフィルタRevitAPIでドキュメント内の要素をクラスでフィルタリングして取得する方法を紹介します。FilteredElementCollectorクラスのOfClassメソッドで超簡単です^^...

ElementMulticlassFilterについて

ElementMulticlassFilterクラスは、指定した複数のクラスをフィルタリングするためのクラスです。

ElementMulticlassFilterクラスの使い方

使い方としては下記のように、複数クラスでList<Type>を生成して、それを引数にElementMulticlassFilterクラスのインスタンスを作成します。

ここではWallクラスとFloorクラスを取得するコードを書いています。

ElementMulticlassFilterクラスの実装
      List<Type> classList = new List<Type>(){
        typeof(Wall),
        typeof(Floor)
      };
      ElementMulticlassFilter elementMulticlassFilter = new ElementMulticlassFilter(classList);

 

ElementMulticlassFilterクラスを使ったコード一式

先述のコードを使用してFilteredElementCollectorでの要素選択するには下記のようなコードとなります。

先ほどと同じく壁(Wallクラス)と床(Floorクラス)を取得します。
複数クラスの取得コード
    public void Sample1()
    {
      UIApplication uiapp = this.ActiveUIDocument.Application;
      UIDocument uidoc = uiapp.ActiveUIDocument;
      Autodesk.Revit.ApplicationServices.Application app =
        uiapp.Application as Autodesk.Revit.ApplicationServices.Application;
      Autodesk.Revit.DB.Document doc = uidoc.Document;
      
      
      List<Type> classList = new List<Type>(){
        typeof(Wall),
        typeof(Floor)
      };
      ElementMulticlassFilter elementMulticlassFilter = new ElementMulticlassFilter(classList);
      
      FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc);
      List<Element> elementList = new List<Element>();
      elementList = filteredElementCollector.WherePasses(elementMulticlassFilter).ToList();
      
      string result = "";
      foreach(Element element in elementList)
      {
        result += element.GetType().Name + "_" + element.Name + "\n";
      }
      TaskDialog.Show("Message", result);
    }
※上記コードをThisApplication.csにコピペでそのまま使えます。

 

最初に取得したいクラスのオブジェクトelementMulticlassFilterを生成しているだけで、あとはOfClassメソッドを使ったElement取得と同じ流れですね。

ただし、ここではOfClassメソッドの代わりにWherePassesメソッドを使っています。

使い方としては.WherePasses(elementMulticlassFilter)のように、作成したフィルタを引数に入れて使用する感じです。

ElementMulticlassFilterまとめ

以上が、FilteredElementCollectorを使った複数クラスの選択方法です。

取得したいクラスが単独か複数かで使用するクラスやメソッドが変わるので最初は戸惑うかもしれません。

でも使い方さえ覚えてしまえばあとは楽勝です^^

 

RevitAPI独学用教材

最後に教材等を紹介します。

RevitAPIを理解してプログラムを作れるようになるには、C#の知識が必要です。

下記、オススメの参考書です。

プログラムが初心者にオススメのC#教材

イラストでの解説が分かりやすく、初めてのプログラミング学習にピッタリです。

プログラムの基礎知識がある人にオススメのC#教材

少し踏み込んだ内容まで学習でき、C#の知識が深まります。

美しいコードを書きたい人はこちら

個人的には、プログラマーひとり一冊は持っておくべきと思っている名作です^^
スポンサーリンク



Revitアドイン作ります

のんびり学習してる余裕などない!という方にご案内です。

ランサーズにてRevitのアドイン作成を承っております!

スキル、資格等の詳細はプロフィールをご覧ください。

ご質問などもお気軽にメッセージしていただければと思います。

詳しくは下の記事にまとめています。

【開発依頼】あなただけのRevitアドインを真心込めて作ります!RevitAPIを使ったアドイン開発を承ります。1から学習してアドイン作る余裕がない、外注でアドイン作成を依頼したい、という方はご利用をご検討いただければと思います^^...

最後まで読んでいただき、ありがとうございました^^

以上です。