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

選択する

FilteredElementCollectorのWhereの使い方を解説

RevitAPIではモデル内の要素を取得する方法が重要です。

その中でもFilteredElementCollectorクラスは広く使われます。

本記事ではWhereメソッドを活用したフィルタリングの方法を解説します。

FilteredElementCollectorとは

FilteredElementCollectorは、Revitモデル内の要素を取得するためのクラスです。

このクラスを使うと、特定のカテゴリやパラメータを持つ要素を絞り込むことができます。

以下のコードは、すべての要素を取得する基本的な使い方です。

FilteredElementCollector collector = new FilteredElementCollector(doc);
ICollection<Element> elements = collector.ToElements();

このコードでは、モデル内のすべての要素を取得しています。

FilteredElementCollector
FilteredElementCollectorで要素選択RevitAPIでFilteredElementCollectorを使った要素選択方法を紹介します。ドキュメントすべてから選択する方法と、指定したビューから選択する方法がありますよ^^...

Whereメソッドの概要

WhereメソッドはFilteredElementCollectorで収集した要素に対して条件を追加するためのメソッドです。

このメソッドを使うと条件に合致する要素だけを取得できます。

Whereメソッドの基本的な構文は以下のようになります。

collector.Where(e => 条件式);

この条件式の部分で要素のプロパティをチェックできます。

Whereメソッドの基本的な使い方

Whereメソッドを使うと特定の条件に合致する要素のみを取得できます。

例えば、名前が"ドア"を含む要素を取得する場合次のように記述します。

FilteredElementCollector collector = new FilteredElementCollector(doc);
var filteredElements = collector.Where(e => e.Name.Contains("ドア"));

このコードでは、すべての要素の中から、名前に"ドア"を含む要素を抽出しています。

Whereメソッドの条件設定のコツ

Whereメソッドを使用するときは条件を適切に指定することが重要です。

条件を明確に設定することで検索結果を効率的に取得できます。

例えば、要素のカテゴリが"壁"のものだけを取得する場合、次のように記述します。

FilteredElementCollector collector = new FilteredElementCollector(doc);
var walls = collector.Where(e => e.Category.Name == "壁");

このコードでは、カテゴリ名が"壁"の要素のみを取得しています。

複数条件を組み合わせる方法

Whereメソッドを使うと、複数の条件を組み合わせることもできます。

例えば"壁"カテゴリで、かつ名前が"コンクリート"を含む要素を取得する場合は、以下のように記述します。

FilteredElementCollector collector = new FilteredElementCollector(doc);
var concreteWalls = collector.Where(e => e.Category.Name == "壁" && e.Name.Contains("コンクリート"));

このように、「&&(AND条件)」や「||(OR条件)」を組み合わせることで、より柔軟な検索が可能になります。

Whereメソッドの使用例(コード付き)

実際にWhereメソッドを活用して、壁のリストを取得するコードを紹介します。

public void Sample()
{
  Autodesk.Revit.UI.UIDocument uidoc = this.ActiveUIDocument;
  Autodesk.Revit.DB.Document doc = uidoc.Document;
  
  FilteredElementCollector collector = new FilteredElementCollector(doc);
  var walls = collector.OfClass(typeof(Wall)).Where(e => e.Category.Name == "壁").ToList();
  
  foreach (var wall in walls)
  {
    TaskDialog.Show("Wall Info", wall.Name);
  }
}
※上記コードをThisApplication.csにコピペでそのまま使えます。

 

このコードでは、カテゴリが"壁"の要素を取得し、それぞれの名前を表示しています。

Whereメソッドの注意点と制限

Whereメソッドを使用する際には、以下の点に注意が必要です。

  • 処理速度の影響:フィルタリング対象が多いと処理が遅くなる可能性があります。
  • メモリ使用量:大量の要素を扱うと、メモリ消費が増える場合があります。
  • 条件の適用範囲:Whereメソッドはすでに収集した要素に対してのみ適用されます。

OfClassやOfCategoryなど適切な条件設定を行い、パフォーマンスを考慮した使い方を心掛けましょう。

RevitAPI-OfClass
【FilteredElementCollector】OfClassでクラスでフィルタRevitAPIでドキュメント内の要素をクラスでフィルタリングして取得する方法を紹介します。FilteredElementCollectorクラスのOfClassメソッドで超簡単です^^...
【FilteredElementCollector】カテゴリでフィルタリング【OfCategory】RevitAPIでドキュメント内の要素をカテゴリでフィルタリングして取得するにはFilteredElementCollectorクラスのOfClassメソッドを使うのが有効です。...

FilteredElementCollectorの応用テクニック

Whereメソッドと他のメソッドを組み合わせることで、より高度な検索が可能になります。

例えば、パラメータ値を条件にする場合、次のように記述できます。

FilteredElementCollector collector = new FilteredElementCollector(doc);
var elements = collector.Where(e => e.LookupParameter("Height").AsDouble() > 3.0);

このコードでは、高さが3.0フィート以上の要素のみを取得しています。

FilteredElementCollectorのWhereの使い方まとめ

本記事ではFilteredElementCollectorのWhereメソッドについて解説しました。

Whereメソッドを使うと特定の条件に合致する要素を効率的に取得できます。

また、複数条件の組み合わせや応用テクニックを活用することで、より柔軟な検索が可能です。

RevitAPIを活用して、効率的なデータ取得を実現しましょう!

RevitAPI独学用教材

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

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

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

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

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

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

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

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

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



Revitアドイン作ります

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

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

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

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

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

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

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

以上です。