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

選択する

Revitモデル上の部材を選択する【Selectionクラス使用】

Selection
モデル上に配置されている部材を選択する方法は?

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());
}
※上記コードをThisApplication.csにコピペでそのまま使えます。

 

これを実行すると、部材上にカーソルが乗ったときに選択が可能です。

部材選択するとその部材のIDがダイアログ表示されます。

7行目は選択結果をダイアログ表示しているので、部材選択のため必要なのは6行目のコードだけです。

部材の複数選択

部材を複数選択したい時には下記のコードを使います。

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);
}
※上記コードをThisApplication.csにコピペでそのまま使えます。

 

これを実行すると、部材上にカーソルが乗ったときに選択が可能です。

単独選択と異なるのは、1部材を選択したあとにIDダイアログが表示されず、続けて選択できることです。

何個か選択して、「終了」ボタンを押してみてください。

選択したすべての部材IDがダイアログ表示されます。

7行目以降はID取得と表示のためのコードで、部材選択のため必要なのは6行目だけです。

部材の範囲選択

部材を範囲選択したい時には下記のコードを使います。

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);
}
※上記コードをThisApplication.csにコピペでそのまま使えます。

 

これを実行すると、範囲選択による部材の選択が可能です。

範囲選択したすべての部材IDがダイアログ表示されます。

7行目以降はID取得と表示のためのコードで、部材選択のため必要なのは6行目だけです。

サンプルコードの解説

以上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は部材をどのように選択するのかを決定する列挙型です。

ObjectType Enumeration(メンバー|効果)
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#教材

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

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

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



Revitアドイン作ります

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

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

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

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

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

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

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

以上です。