そんな時にはElementMulticlassFilterクラスを使えばOKです!
というわけで、ここではElementMulticlassFilterクラスの基本的な使い方を紹介します。
なおFilteredElementCollectorクラス、OfClassメソッドの使い方は下記の記事をご覧いただければ幸いです。
ElementMulticlassFilterについて
ElementMulticlassFilterクラスは、指定した複数のクラスをフィルタリングするためのクラスです。
ElementMulticlassFilterクラスの使い方
使い方としては下記のように、複数クラスでList<Type>を生成して、それを引数にElementMulticlassFilterクラスのインスタンスを作成します。
ここではWallクラスとFloorクラスを取得するコードを書いています。
List<Type> classList = new List<Type>(){ typeof(Wall), typeof(Floor) }; ElementMulticlassFilter elementMulticlassFilter = new ElementMulticlassFilter(classList);
ElementMulticlassFilterクラスを使ったコード一式
先述のコードを使用してFilteredElementCollectorでの要素選択するには下記のようなコードとなります。
public void 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; List<Type> classList = new List<Type>(){ typeof(Wall), typeof(Floor) }; ElementMulticlassFilter elementMulticlassFilter = new ElementMulticlassFilter(classList); FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc); List<Element> elementList = new List<Element>(); elementList = filteredElementCollector.WherePasses(elementMulticlassFilter).ToList(); string result = ""; foreach(Element element in elementList) { result += element.GetType().Name + "_" + element.Name + "\n"; } TaskDialog.Show("Message", result); }
最初に取得したいクラスのオブジェクトelementMulticlassFilterを生成しているだけで、あとはOfClassメソッドを使ったElement取得と同じ流れですね。
ただし、ここではOfClassメソッドの代わりにWherePassesメソッドを使っています。
使い方としては.WherePasses(elementMulticlassFilter)のように、作成したフィルタを引数に入れて使用する感じです。
ElementMulticlassFilterまとめ
以上が、FilteredElementCollectorを使った複数クラスの選択方法です。
取得したいクラスが単独か複数かで使用するクラスやメソッドが変わるので最初は戸惑うかもしれません。
でも使い方さえ覚えてしまえばあとは楽勝です^^
RevitAPI独学用教材
最後に教材等を紹介します。
RevitAPIを理解してプログラムを作れるようになるには、C#の知識が必要です。
下記、オススメの参考書です。
プログラムが初心者にオススメのC#教材
プログラムの基礎知識がある人にオススメのC#教材
美しいコードを書きたい人はこちら
Revitアドイン作ります
のんびり学習してる余裕などない!という方にご案内です。
スキル、資格等の詳細はプロフィールをご覧ください。
ご質問などもお気軽にメッセージしていただければと思います。
詳しくは下の記事にまとめています。
最後まで読んでいただき、ありがとうございました^^
以上です。