FilteredElementCollectorクラスを使ってRevitドキュメント内すべて要素を取得できます。
ここからさらに条件を絞って特定要素のみ取得ということをやってみます。
今回は特定クラスのみを取得できるOfClassメソッドを紹介します。
FilteredElementCollectorの基本的な使い方は、下記の記事をご覧ください^^
OfClassメソッドについて
OfClassはFilteredElementCollectorクラスのメソッドです。
下記コード8行目のように、OfClass(typeof())のカッコ内に取得したいクラス名を直接入力します。
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(); }
OfClassメソッドの要素選択サンプル
OfClassメソッドを使ったサンプルをいくつか紹介します。
各サンプルで取得要素のクラス名とタイプ名を表示するようにしています。
システムファミリ
まずはシステムファミリから。
システムファミリは先ほどの壁取得のサンプルと同じ書き方でOKです^^
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); }
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); }
コンポーネントファミリ
コンポーネントファミリは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); }
ファミリタイプ
FilteredElementCollectorはモデル上に配置されたファミリインスタンス以外にも、プロジェクトブラウザよりファミリタイプも取得可能です。
ここではプロジェクトブラウザの壁タイプを取得してみます。
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); }
OfClassメソッドまとめ
以上、FilteredElementCollectorのOfClassメソッドの使い方でした。
全体で選択した要素からクラスをフィルタリングできたら、無駄な要素を取得しないので効率いいです^^
RevitAPI独学用教材
最後に教材等を紹介します。
RevitAPIを理解してプログラムを作れるようになるには、C#の知識が必要です。
下記、オススメの参考書です。
プログラムが初心者にオススメのC#教材
プログラムの基礎知識がある人にオススメのC#教材
美しいコードを書きたい人はこちら
Revitアドイン作ります
のんびり学習してる余裕などない!という方にご案内です。
スキル、資格等の詳細はプロフィールをご覧ください。
ご質問などもお気軽にメッセージしていただければと思います。
詳しくは下の記事にまとめています。
最後まで読んでいただき、ありがとうございました^^
以上です。