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

選択する

【RevitAPI】ElementMulticategoryFilterで複数カテゴリの取得

  • FilteredElementCollectorで複数のカテゴリを取得したい
  • OfCategoryメソッドは単独カテゴリしか取得できないけど、何か方法はあるの?

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

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

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

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

ElementMulticategoryFilterについて

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

ElementMulticategoryFilterクラスの使い方

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

ここではWallカテゴリとFloorカテゴリを取得するコードを書いています。

ElementMultiicategoryFilterクラスの実装
 List<BuiltInCategory> builtInCategories = new List<BuiltInCategory>(){
        BuiltInCategory.OST_Walls,
        BuiltInCategory.OST_Floors
      };
    ElementMulticategoryFilter elementMulticategoryFilter = new ElementMulticategoryFilter(builtInCategories);
※上記コードをThisApplication.csにコピペでそのまま使えます。

 

  • まずはフィルタにかけるカテゴリのListを作成しています(builtInCategories)
  • Listの中身はBuiltinCategoryのEnumです。
  • 最後に、作成したbuiltInCategoriesを引数にElementMulticategoryFilterを作成しました。

これだけでカテゴリフィルタの出来上がりです。

BuiltInCategoryと日本語カテゴリ名の対応はこちらでご確認ください!

https://kizarukun.com/revitapi-builtincategory

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

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

先ほどと同じく壁(Wallカテゴリ)と床(Floorカテゴリ)を取得します。

複数カテゴリの取得コード
public void Sample1()
{
  Autodesk.Revit.UI.UIDocument uidoc = this.ActiveUIDocument;
  Autodesk.Revit.DB.Document doc = uidoc.Document;
      
  List<BuiltInCategory> builtInCategories = new List<BuiltInCategory>(){
    BuiltInCategory.OST_Walls,         
    BuiltInCategory.OST_Floors       
  };     
  ElementMulticategoryFilter elementMulticategoryFilter = new ElementMulticategoryFilter(builtInCategories);
      
  FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc);
  List<Element> Elements = new List<Element>();
  Elements = filteredElementCollector.WherePasses(elementMulticlassFilter).ToList();
      
  string message = "";
  foreach(Element element in Elements)
  {
    message += element.GetType().Name + "_" + element.Name + "\n";
  }
  TaskDialog.Show("Message", message);
  }
※上記コードをThisApplication.csにコピペでそのまま使えます。
  • 前章で解説したように、まずは取得したいカテゴリのオブジェクトelementMulticategoryFilterを作成
  • あとはOfCategoryメソッドを使ったElement取得と同じ流れ
  • ここではOfCategoryメソッドの代わりにFilteredElementCollectorクラスのWherePassesメソッドを使っている
  • WherePassesメソッドはWherePasses(elementMulticategoryFilter)のように、作成したフィルタを引数に入れて使用するメソッド

ElementMulticategoryFilterまとめ

以上が、FilteredElementCollectorを使った複数カテゴリの選択方法です。

取得したいカテゴリが単独か複数かで使用するクラスやメソッドが変わるので最初は戸惑うかもしれませんが、覚えてしまえば簡単です^^

RevitAPI独学用教材

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

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

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

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

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

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

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

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

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



Revitアドイン作ります

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

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

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

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

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

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

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

以上です。