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

選択する

FilteredElementCollectorで単一部材の選択

Revitの開発では要素を取得する機会が多いです。

その際、FilteredElementCollectorクラスは非常に便利な機能を提供します。

特にFirstElementメソッドを活用すると最初の要素を簡単に取得できます。

本記事ではFilteredElementCollectorとFirstElementの使い方を詳しく解説します。

FilteredElementCollectorとは?

FilteredElementCollectorは、Revit内の要素を収集するためのクラスです。

フィルタを適用することで特定の要素だけを抽出できます。

例えば、壁やドア、窓などのカテゴリごとの取得が可能です。

次のコードはドキュメント内のすべての要素を収集する例です。

Autodesk.Revit.UI.UIDocument uidoc = this.ActiveUIDocument;
Autodesk.Revit.DB.Document doc = uidoc.Document;

FilteredElementCollector collector = new FilteredElementCollector(doc);

 

要素のフィルタリングにはさまざまなメソッドを利用できます。

例えばカテゴリごとに取得したり条件を追加したりできます。

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

FirstElementメソッドの概要

FirstElementメソッドはFilteredElementCollectorの先頭の要素を取得するメソッドです。

このメソッドを使うとリスト全体を取得せずに最初の要素のみを取得できます。

Autodesk.Revit.UI.UIDocument uidoc = this.ActiveUIDocument;
Autodesk.Revit.DB.Document doc = uidoc.Document;

FilteredElementCollector collector = new FilteredElementCollector(doc);
Element firstElement = collector.FirstElement();
このメソッドは要素が存在しない場合はnullを返します。そのためnullチェックを行うことが重要です。

FirstElementを使った最初の要素の取得

FirstElementメソッドをFilteredElementCollectorに使用したコードサンプルは以下のようになります。

コードサンプル1
Autodesk.Revit.UI.UIDocument uidoc = this.ActiveUIDocument;
Autodesk.Revit.DB.Document doc = uidoc.Document;

FilteredElementCollector wallCollector = new FilteredElementCollector(doc)
    .OfCategory(BuiltInCategory.OST_Walls)
    .WhereElementIsNotElementType();

Element firstWall = wallCollector.FirstElement();

if (firstWall != null)
{
    TaskDialog.Show("First Wall", $"ID: {firstWall.Id}");
}
else
{
    TaskDialog.Show("First Wall", "壁が見つかりませんでした。");
}
※上記コードをThisApplication.csにコピペでそのまま使えます。

 

  • OfCategoryメソッドで壁のカテゴリを指定しWhereElementIsNotElementTypeでインスタンスのみを取得します。
  • 最初の壁のIDを表示します。
  • もし壁がない場合は、エラーメッセージを表示します。
コードサンプル2
Autodesk.Revit.UI.UIDocument uidoc = this.ActiveUIDocument;
Autodesk.Revit.DB.Document doc = uidoc.Document;

FilteredElementCollector doorCollector = new FilteredElementCollector(doc)
    .OfCategory(BuiltInCategory.OST_Doors)
    .WhereElementIsNotElementType();

Element firstDoor = doorCollector.FirstElement();

if (firstDoor != null)
{
    TaskDialog.Show("First Door", $"ドアID: {firstDoor.Id}");
}
else
{
    TaskDialog.Show("First Door", "ドアが見つかりませんでした。");
}
※上記コードをThisApplication.csにコピペでそのまま使えます。

 

  • OfCategoryメソッドでドアのカテゴリを指定しWhereElementIsNotElementTypeでインスタンスのみを取得します。
  • 最初のドアのIDを表示します。
  • もしドアがない場合は、エラーメッセージを表示します。

 

FirstElementの注意点

FirstElementを使用する際は以下の点に注意が必要です。

  • FirstElementは要素がない場合nullを返す
  • FirstElementはフィルタ適用後の最初の要素を取得する
  • FirstElementは大量の要素を処理する際には最適ではない
例えば、要素が存在しない場合の処理を忘れると、NullReferenceExceptionが発生する可能性があります。

まとめ:FilteredElementCollectorの効率的な活用

FilteredElementCollectorはRevit要素の収集に不可欠なクラスです。

FirstElementを活用すると最初の要素を簡単に取得できます。

適切に使用することでコードの効率を向上させることができます。

また、nullチェックを忘れずに行うことでエラーを防ぐことができます。

ぜひRevit開発において活用してみてください!

RevitAPI独学用教材

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

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

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

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

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

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

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

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

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



Revitアドイン作ります

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

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

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

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

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

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

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

以上です。