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アドイン作ります
のんびり学習してる余裕などない!という方にご案内です。
スキル、資格等の詳細はプロフィールをご覧ください。
ご質問などもお気軽にメッセージしていただければと思います。
詳しくは下の記事にまとめています。
最後まで読んでいただき、ありがとうございました^^
以上です。






