Revitドキュメント内の要素を選択する方法を紹介します。
モデル上からポチポチとクリック選択するのはSelectionクラスを使えばOKですが、せっかくRevitAPIを使うのならプログラムを使って要素選択したいですよね。
そんな時はFilteredElementCollectorを使うのが有効です。
ここではFilteredElementCollectorを使った要素選択についての紹介します。
Selectionを使った要素選択は下記の記事をご覧ください。
FilteredElementCollectorについて
FilteredElementCollectorクラスは、Revitドキュメントより要素を検索します。
検索対象はElementクラスです。
Elementクラスとは
Revit内に配置・入力できる、
- 壁・床などのシステムファミリ
- ドア・窓などのコンポーネントファミリ
- 通芯やレベル
- マテリアル
- 伏図や断面図などのビュー
はすべてElementです。
よって、FilteredElementCollectorを使うとほとんどすべての要素が選択可能となります。
FilteredElementCollectorの使い方
FilteredElementCollectorには主に2通りの使い方があります。
FilteredElementCollector(Document) | ドキュメントの中からElementを選択する |
---|---|
FilteredElementCollector(Document, ElementId) | 指定したビューの中からElementを選択する |
モデル全体から選択するのか、ビューを絞って選択するのか、って感じですね。
FilteredElementCollectorで要素選択
サンプルとしてFilteredElementCollectorで壁を選択するプログラムを作成してみました。
- FilteredElementCollector(Document)
- FilteredElementCollector(Document, ElementId)
の両方の場合で示します。
FilteredElementCollector(Document)
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(); string result = ""; foreach(Element element in elementList) { result += element.Id + "_" + element.Name + "\n"; } TaskDialog.Show("Message", result); }
FilteredElementCollector(Document, ElementId)
public void Sample2() { UIDocument uidoc = this.ActiveUIDocument; Autodesk.Revit.DB.Document doc = uidoc.Document; FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc, doc.ActiveView.Id); List<Element> elementList = new List<Element>(); elementList = filteredElementCollector.OfClass(typeof(Wall)).ToList(); string result = ""; foreach(Element element in elementList) { result += element.Id + "_" + element.Name + "\n"; } TaskDialog.Show("Message", result); }
サンプルプログラムの解説
どちらのプログラムもすべての壁を選択しています。
違いはモデル全体から選択しているのか、そのビューから選択しているのかです。
そして、選択した壁のIDと名前を表示するようにしています。
どちらのプログラムも10行目以降はIDと名前表示に関わるコードです。
要素選択は6~8行目で完了しています^^
両者の違いは6行目の、
Sample1 | FilteredElementCollector(doc) |
---|---|
Sample2 | FilteredElementCollector(doc, doc.ActiveView.Id) |
この部分ですね。
doc.ActiveView.Idで現在のビューIDを取得できます。
というわけでSample2は、現在のビューに絞って壁を選択しています。
OfClassメソッド
8行目の、
elementList = filteredElementCollector.OfClass(typeof(Wall)).ToList();
で「OfClass(typeof(Wall))」を使って、選択した要素を壁だけに絞っています。
ToListメソッド
最後に、
elementList = filteredElementCollector.OfClass(typeof(Wall)).ToList();
で「ToList()」を使って、選択要素をListクラスのインスタンス「elementList」に格納しています。
これによって、選択した複数要素がList<T>として扱えるので便利です^^
FilteredElementCollectorまとめ
以上、FilteredElementCollectorクラスの紹介でした。
紹介したのは超初級のサンプルなので、さすがにこれだけでは使えるものではないと思います^^;;
いろいろ条件を絞って試してみてください!
RevitAPI独学用教材
最後に教材等を紹介します。
RevitAPIを理解してプログラムを作れるようになるには、C#の知識が必要です。
下記、オススメの参考書です。
プログラムが初心者にオススメのC#教材
プログラムの基礎知識がある人にオススメのC#教材
美しいコードを書きたい人はこちら
Revitアドイン作ります
のんびり学習してる余裕などない!という方にご案内です。
スキル、資格等の詳細はプロフィールをご覧ください。
ご質問などもお気軽にメッセージしていただければと思います。
詳しくは下の記事にまとめています。
最後まで読んでいただき、ありがとうございました^^
以上です。