RevitAPIを使ってあれこれやっていくためには、まずはその対象となる部材を選択する必要があります。
ここでは、
- クリック選択(単独)でモデル上の部材を選択する手法
- クリック選択(複数)でモデル上の部材を選択する手法
- 範囲選択でモデル上の部材を選択する手法
を紹介していきます。
部材選択で使用するクラス
モデル上で部材を選択したい時にはReferenceクラスが有効です。
【参考】Selection Class | Revit API Docs
部材の単独選択
部材を単独選択したい時には下記のコードを使います。
public void Sample01() { UIDocument uidoc = this.ActiveUIDocument; Reference reference = uidoc.Selection.PickObject(ObjectType.Element); TaskDialog.Show("Message", reference.ElementId.ToString()); }
これを実行すると、部材上にカーソルが乗ったときに選択が可能です。
部材選択するとその部材のIDがダイアログ表示されます。
部材の複数選択
部材を複数選択したい時には下記のコードを使います。
public void Sample02() { UIDocument uidoc = this.ActiveUIDocument; IList<Reference> referenceList = uidoc.Selection.PickObjects(ObjectType.Element); string referenceIds = ""; foreach(Reference reference in referenceList) { referenceIds += reference.ElementId.ToString() + "\n"; } TaskDialog.Show("Message", referenceIds); }
これを実行すると、部材上にカーソルが乗ったときに選択が可能です。
単独選択と異なるのは、1部材を選択したあとにIDダイアログが表示されず、続けて選択できることです。
何個か選択して、「終了」ボタンを押してみてください。
選択したすべての部材IDがダイアログ表示されます。
部材の範囲選択
部材を範囲選択したい時には下記のコードを使います。
public void Sample03() { UIDocument uidoc = this.ActiveUIDocument; IList<Element> elementList = uidoc.Selection.PickElementsByRectangle(); string elementIds = ""; foreach(Element element in elementList) { elementIds += element.Id.ToString() + "\n"; } TaskDialog.Show("Message", elementIds); }
これを実行すると、範囲選択による部材の選択が可能です。
範囲選択したすべての部材IDがダイアログ表示されます。
サンプルコードの解説
以上3つのサンプルコードを示しました。
上記コードをコピペするだけでプログラムは動きますが、詳しく知りたい方は以下もご覧ください。
Selectionクラスのメソッド
サンプルコードの中では、どれもUIDocumentクラスのインスタンス「uidoc」を生成しています。
そして、uidocのプロパティとしてSelectionクラスにアクセスしているまでが共通コードですね。
その後に、Selectionクラスのどのメソッドを使うかで選択方法が変わってきています。
ここで使っているメソッドは以下のとおりです。
メソッド | 引数 | 選択方法 | 戻り値 |
---|---|---|---|
PickObject | ObjectType | クリック選択(単独部材を選択) | Reference |
PickObjects | ObjectType | クリック選択(複数部材を選択) | IList<Reference> |
PickElementsByRectangle | なし | 範囲選択 | IList<Element> |
それぞれ解説します。
PickObjectとPickObjects
名前のとおり部材をポチポチと選択していくメソッドです。
サンプルで使った引数はObjectTypeですが、そのほかに以下のオーバーロードがあります。
- PickObject(ObjectType)
- PickObject(ObjectType, ISelectionFilter)
- PickObject(ObjectType, String)
- PickObject(ObjectType, ISelectionFilter, String)
PickObject(ObjectType)
ObjectTypeは部材をどのように選択するのかを決定する列挙型です。
Nothing | 何も選択できません |
---|---|
Element | 通常の要素選択 |
PointOnElement | 要素上の点を選択する |
Edge | 要素をエッジで選択する |
Face | 要素を面で選択する |
LinkedElement | リンクファイルの要素を選択する |
PickObject(ObjectType, ISelectionFilter)
ObjectTypeは先述のとおりです。
さらにISelectionFilterで特殊なフィルタリングができます。
PickObject(ObjectType, String)
ObjectTypeは先述のとおりです。
さらにStringで指定した文字を、プログラム実行中に画面左下に表示されることができます。
PickObject(ObjectType, ISelectionFilter, String)
PickObject(ObjectType, ISelectionFilter)とPickObject(ObjectType, String)の組み合わせです。
PickElementsByRectangle
範囲選択が実行されるメソッドです。
引数なしでも実行できますが、以下のオーバーロードがあります。
- PickElementsByRectangle()
- PickElementsByRectangle(String)
- PickElementsByRectangle(ISelectionFilter)
- PickElementsByRectangle(ISelectionFilter, String)
それぞれの効果は、PickObjectやPickObjectsと同様です。
Revitモデル上の部材選択|まとめ
以上、Selectionクラスを利用した部材選択あれこれでした。
ここで紹介したものの他にもいろいろな選択方法があります。
気になった方はお試しください^^
【参考】Selectionクラスのメソッド | Revit API Docs
ここで紹介したコードはただ部材選択しているだけです。
このサンプルを単独で使う機会は、まずないでしょうw
その他のプログラムと組み合わせてご自由にお使いください。
以上です。
RevitAPI独学用教材
最後に教材等を紹介します。
RevitAPIを理解してプログラムを作れるようになるには、C#の知識が必要です。
下記、オススメの参考書です。
プログラムが初心者にオススメのC#教材
プログラムの基礎知識がある人にオススメのC#教材
美しいコードを書きたい人はこちら
Revitアドイン作ります
のんびり学習してる余裕などない!という方にご案内です。
スキル、資格等の詳細はプロフィールをご覧ください。
ご質問などもお気軽にメッセージしていただければと思います。
詳しくは下の記事にまとめています。
最後まで読んでいただき、ありがとうございました^^
以上です。