ここで取得したいElementが複数ではなく単一の場合はFilteredElementCollectorクラスは使用可能なの?
可能です!
複数部材でToListメソッドを使用していたものを、単独部材の場合はFirstElementメソッドやFirstメソッドに置き換えるだけです。
ここではサンプルを確認しながら、FilteredElementCollectorクラスでの単一Elementの取得方法を解説します。
なおFilteredElementCollectorクラスの使い方は下記の記事をご覧ください。
https://kizarukun.com/revitapi-filteredelementcollector
もくじ
単一Element取得のためのメソッド
先述のようにFirstElementメソッドやFirstメソッドが単一Elementの取得に有効です。
単一Elementの取得に有効なメソッド
メソッド | 解説 |
FirstElement | FilteredElementCollectorクラスのメソッド |
First | .NET FrameworkよりEnumerableクラスのメソッド |
FirstElementメソッド
サンプルソースコード
下記Sample1がFirstElementメソッドを使用したサンプルのソースコードです。
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;
FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc);
Element element = filteredElementCollector.OfClass(typeof(Wall)).FirstElement();
TaskDialog.Show(“Message”, element.GetType().Name + “_” + element.Name);
}
解説
FilteredElementCollectorクラスで複数の部材を取得する場合はElementクラスのList型でオブジェクトを生成していました。
ここではElementクラス単品取得なので、Elementクラスのオブジェクトelementを生成しています。
そしてFilteredElementCollectorクラスのオブジェクトfilteredElementCollectorにあれこれ条件を指定して、最後にFirstElementメソッドを使います。
FirstElementメソッドは条件に一致する、最初のElementを取得できます。
Whereメソッドを組み合わせると、特定タイプ名の壁を単一選択、ってこともできますね。
Whereメソッドの使い方は下記をご覧ください!
Firstメソッド
サンプルソースコード
下記Sample2がFirstメソッドを使用したサンプルのソースコードです。
Sample2
{
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;
FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc);
Element element = filteredElementCollector.OfClass(typeof(Wall)).First(element => element.Name == “タイプ名”);
TaskDialog.Show(“Message”, element.GetType().Name + “_” + element.Name);
}
解説
基本的にはSample1と同じです。
Sample1でFirstElementメソッドを使用していた箇所をFirstメソッドに置き換えているだけです。
Firstメソッドは引数なしで使用した場合、条件に一致する最初のElementを取得できます。
FirstElementメソッドと同じ効果ですね。
Firstメソッドの特徴としては、Sample2のように引数をラムダ式で描くことでWhereメソッドと組み合わせたような使い方もできます。
これをFirstElementメソッドを使ってやろうとするとWhereメソッドも使用することになるので、Firstメソッドよりもひと手間かかるわけですね。
単一Element取得まとめ
以上、FilteredElementCollectorクラスでの単一Elementの取得方法の紹介でした。
ちょっとイケてない気もしますね笑
最後まで読んでいただき、ありがとうございました!