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

選択する

【FilteredElementCollector】OfClassでクラスでフィルタ

RevitAPI-OfClass

FilteredElementCollectorクラスを使ってRevitドキュメント内すべて要素を取得できます。

ここからさらに条件を絞って特定要素のみ取得ということをやってみます。

今回は特定クラスのみを取得できるOfClassメソッドを紹介します。

OfClassメソッドについて

OfClassはFilteredElementCollectorクラスのメソッドです。

下記コード8行目のように、OfClass(typeof())のカッコ内に取得したいクラス名を直接入力します。

OfClassメソッドの使い方
public void Sample1()
{
  UIDocument uidoc = this.ActiveUIDocument;
  Autodesk.Revit.DB.Document doc = uidoc.Document;
  
  FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc);
  List<Element> elementList = new List<Element>();
  elementList = filteredElementCollector.OfClass(typeof(Wall)).ToList();
}
※上記コードをThisApplication.csにコピペでそのまま使えます。
ここではWallクラス(壁)を取得しています。

OfClassメソッドの要素選択サンプル

OfClassメソッドを使ったサンプルをいくつか紹介します。

各サンプルで取得要素のクラス名とタイプ名を表示するようにしています。

システムファミリ

まずはシステムファミリから。

システムファミリは先ほどの壁取得のサンプルと同じ書き方でOKです^^

床(Floorクラス)の取得
    public void Sample2()
    {
      UIDocument uidoc = this.ActiveUIDocument;
      Autodesk.Revit.DB.Document doc = uidoc.Document;
      
      FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc);
      List<Element> elementList = new List<Element>();
      elementList = filteredElementCollector.OfClass(typeof(Floor)).ToList();
      
      string result = "";
      foreach(Element element in elementList)
      {
        result += element.GetType().Name + "_" + element.Name + "\n";
      }
      TaskDialog.Show("Message", result);
    }
※上記コードをThisApplication.csにコピペでそのまま使えます。
天井(Ceilingクラス)の取得
    public void Sample3()
    {
      UIDocument uidoc = this.ActiveUIDocument;
      Autodesk.Revit.DB.Document doc = uidoc.Document;
      
      FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc);
      List<Element> elementList = new List<Element>();
      elementList = filteredElementCollector.OfClass(typeof(Ceiling)).ToList();
      
      string result = "";
      foreach(Element element in elementList)
      {
        result += element.GetType().Name + "_" + element.Name + "\n";
      }
      TaskDialog.Show("Message", result);
    }
※上記コードをThisApplication.csにコピペでそのまま使えます。
element.GetType().Nameでクラス名を取得しています。

コンポーネントファミリ

コンポーネントファミリはFamilyInstanceクラスとなります。

なのでOfClassメソッドはOfClass(typeof(FamilyInstance))といった記述です。

ただしこのままで実行したら、ドアやら窓やらすべてのコンポーネントファミリが取得されてしまいます。

ドアだけ、窓だけ等を取得したければ、ここからさらにカテゴリでのフィルタが必要です。

特定カテゴリのフィルタにはOfCategoryメソッドを使います。

コンポーネントファミリの取得
    public void Sample4()
    {
      UIDocument uidoc = this.ActiveUIDocument;
      Autodesk.Revit.DB.Document doc = uidoc.Document;
      
      FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc);
      List<Element> elementList = new List<Element>();
      elementList = filteredElementCollector.OfClass(typeof(FamilyInstance)).ToList();
      
      string result = "";
      foreach(Element element in elementList)
      {
        result += element.GetType().Name + "_" + element.Name + "\n";
      }
      TaskDialog.Show("Message", result);
    }
※上記コードをThisApplication.csにコピペでそのまま使えます。

ファミリタイプ

FilteredElementCollectorはモデル上に配置されたファミリインスタンス以外にも、プロジェクトブラウザよりファミリタイプも取得可能です。

ここではプロジェクトブラウザの壁タイプを取得してみます。

壁タイプ
壁タイプ(WallTypeクラス)の取得
    public void Sample5()
    {
      UIDocument uidoc = this.ActiveUIDocument;
      Autodesk.Revit.DB.Document doc = uidoc.Document;
      
      FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc);
      List<Element> elementList = new List<Element>();
      elementList = filteredElementCollector.OfClass(typeof(WallType)).ToList();
      
      string result = "";
      foreach(Element element in elementList)
      {
        result += element.GetType().Name + "_" + element.Name + "\n";
      }
      TaskDialog.Show("Message", result);
    }
※上記コードをThisApplication.csにコピペでそのまま使えます。

OfClassメソッドまとめ

以上、FilteredElementCollectorのOfClassメソッドの使い方でした。

全体で選択した要素からクラスをフィルタリングできたら、無駄な要素を取得しないので効率いいです^^

RevitAPI独学用教材

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

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

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

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

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

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

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

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

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



Revitアドイン作ります

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

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

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

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

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

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

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

以上です。