FilteredElementCollectorクラスを使ってRevitドキュメント内すべてのElementが取得できます。
というように取得するElementをもっと限定したい時もあるかと思いますが、もちろん可能です!
FilteredElementCollectorから、さらに特定カテゴリのみに絞って要素取得するにはOfCategoryメソッドを使用すればOKです。
ここではその手法を紹介していきます^^
FilteredElementCollectorの基本的な使い方は、下記の記事をご覧ください。
また、今回はカテゴリでフィルタリングしますがクラスでフィルタリングする手順は下記に記しています。
OfCategoryメソッドについて
OfCategoryはFilteredElementCollectorクラスのメソッドです。
下記コード8行目のように、OfCategory()のカッコ内に取得したいBuiltInCategoryを入力します。
public void Sample1()
{
Autodesk.Revit.UI.UIDocument uidoc = this.ActiveUIDocument;
Autodesk.Revit.DB.Document doc = uidoc.Document;
FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc);
List<Element> StructuralColumns = new List<Element>();
StructuralColumns = filteredElementCollector.OfCategory(BuiltInCategory.OST_StructuralColumns).ToList();
}
OfCategoryメソッドの要素選択サンプル
OfCategoryメソッドを使ったサンプルをいくつか紹介します。
各サンプルで取得要素のカテゴリ名とタイプ名を表示するようにしています。
OfCategory()のカッコ内を変えるだけなので簡単ですね^^
レベル線
public void Sample2()
{
Autodesk.Revit.UI.UIDocument uidoc = this.ActiveUIDocument;
Autodesk.Revit.DB.Document doc = uidoc.Document;
FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc);
List<Element> Levels = new List<Element>();
Levels = filteredElementCollector.OfCategory(BuiltInCategory.OST_Levels).ToList();
string message = "";
foreach(Element element in Levels)
{
message += element.Category.Name + "_" + element.Name + "\n";
}
TaskDialog.Show("Message", message);
}
ビュー
public void Sample3()
{
Autodesk.Revit.UI.UIDocument uidoc = this.ActiveUIDocument;
Autodesk.Revit.DB.Document doc = uidoc.Document;
FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc);
List<Element> Views = new List<Element>();
Views = filteredElementCollector.OfCategory(BuiltInCategory.OST_Views).ToList();
string message = "";
foreach(Element element in Views)
{
message += element.Category.Name + "_" + element.Name + "\n";
}
TaskDialog.Show("Message", message);
}
部屋
public void Sample4()
{
Autodesk.Revit.UI.UIDocument uidoc = this.ActiveUIDocument;
Autodesk.Revit.DB.Document doc = uidoc.Document;
FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc);
List<Element> Rooms = new List<Element>();
Rooms = filteredElementCollector.OfCategory(BuiltInCategory.OST_Rooms).ToList();
string message = "";
foreach(Element element in Rooms)
{
message += element.Category.Name + "_" + element.Name + "\n";
}
TaskDialog.Show("Message", message);
}
OfCategoryメソッドと他メソッドの組み合わせ
OfCategoryメソッドでカテゴリをフィルタリングするとドキュメント中のすべてのカテゴリを取得します。
そうすると例えばFamilyInstanceクラスのみを取得したいときも同カテゴリのFamilySymbolクラスまで取得するようなことになります。
これを回避してどちらかのクラスのみ取得したいときには、OfCategoryメソッドとOfClassメソッドを組み合わせればよいです。
インスタンス(FamilyInstanceクラス)とタイプ(FamilySymbolクラス)でそれぞれ構造柱を取得するサンプルを下記に示します。
FamilyInstance
public void Sample5()
{
Autodesk.Revit.UI.UIDocument uidoc = this.ActiveUIDocument;
Autodesk.Revit.DB.Document doc = uidoc.Document;
FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc);
List<Element> StructuralColumns = new List<Element>();
StructuralColumns = filteredElementCollector.OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_StructuralColumns).ToList();
string message = "";
foreach(Element element in StructuralColumns)
{
message += element.Category.Name + "_" + element.Name + "\n";
}
TaskDialog.Show("Message", message);
}
FamilySymbol
public void Sample6()
{
Autodesk.Revit.UI.UIDocument uidoc = this.ActiveUIDocument;
Autodesk.Revit.DB.Document doc = uidoc.Document;
FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc);
List<Element> StructuralColumns = new List<Element>();
StructuralColumns = filteredElementCollector.OfClass(typeof(FamilySymbol)).OfCategory(BuiltInCategory.OST_StructuralColumns).ToList();
string message = "";
foreach(Element element in StructuralColumns)
{
message += element.Category.Name + "_" + element.Name + "\n";
}
TaskDialog.Show("Message", message);
}
こんな感じでFilteredElementCollectorクラスのメソッドを必要に応じて繋げていけば、欲しい要素のみに絞り込んで取得することができますね^^
OfCategoryメソッドまとめ
以上、FilteredElementCollectorのOfCategoryメソッドの使い方でした。
RevitAPI独学用教材
最後に教材等を紹介します。
RevitAPIを理解してプログラムを作れるようになるには、C#の知識が必要です。
下記、オススメの参考書です。
プログラムが初心者にオススメのC#教材
プログラムの基礎知識がある人にオススメのC#教材
美しいコードを書きたい人はこちら
Revitアドイン作ります
のんびり学習してる余裕などない!という方にご案内です。
スキル、資格等の詳細はプロフィールをご覧ください。
ご質問などもお気軽にメッセージしていただければと思います。
詳しくは下の記事にまとめています。
最後まで読んでいただき、ありがとうございました^^
以上です。






