RevitAPI

【RevitAPI】Document.GetElementで要素選択

ドキュメント内のElementを単独選択するときFilteredElementCollectorクラスのオブジェクトを生成して、FirstElementメソッドやFirstメソッドを使う方法しかないのでしょうか?
なんだか効率が悪いような気がします。。

確かにFilteredElementCollectorクラスで一旦はドキュメント内のElementを全取得して、そこからひとつの部材に絞るのは非効率な感じですね。

Elementを単独で取得するにはDocumentクラスのGetElementメソッドを使う手法もありますよ。

GetElementメソッド
名前のまんまっす!

ここではGetElementメソッドを使ったElement取得の手法を紹介します。

FilteredElementCollectorクラスを使ったElementの単独取得の手法は下記の記事をご覧ください!

【RevitAPI・C#】FilteredElementCollectorで単一部材の選択 可能です! 複数部材でToListメソッドを使用していたものを、単独部材の場合はFirstElementメソッドやFirs...

GetElementメソッドとは

Documentクラスのメソッドで、Elementを取得することができます。

下記のオーバーロードがあり、それぞれの条件でElementを取得することになります。

GetElementメソッド

メソッド 解説
GetElement(Reference) Referenceを引数に設定
GetElement(String) UniqueIdを引数に設定
GetElement(ElementId) ElementIdを引数に設定
詳しくはサンプルのソースコードを通して解説します!

GetElementメソッドの使用例:その1

ソースコード

Sample1

    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;
      
      
      Reference reference = uidoc.Selection.PickObject(ObjectType.Element);
      Element element = doc.GetElement(reference);
      
      string result =
        "Name:" + element.Name + "\n" +
        "ElementId:" + element.Id + "\n" +
        "UniqueId:" + element.UniqueId;
      
      TaskDialog.Show("Message", result);
    }

解説

引数にReferenceを指定するタイプですね。

まずはReferenceクラスのオブジェクトreferenceに、Selection.PickObjectで取得した要素を格納しています。

Selectionクラスの要素選択はこちらです。
【RevitAPI】Selectionで部材選択 RevitAPIを使って部材を選択したい プログラム側で条件指定して選択ではなくて 人が目で見てポチポチっと気軽...

で、GetElementメソッドの引数に預けているわけですね。

これでElementクラスのオブジェクトelementに格納しているだけです。

たったこれだけで、Elementを取得できました。

あとは、Elementクラスのプロパティやメソッドにアクセスして好きなようにやっちゃってください。

GetElementメソッドの使用例:その2

ソースコード

Sample2

    public void Sample2()
    {
      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;
      
      
      Element element = doc.GetElement("1a2b3456-7c89-0123-d4e5-6fg789h01234-5678901i");
      
      string result =
        "Name:" + element.Name + "\n" +
        "ElementId:" + element.Id + "\n" +
        "UniqueId:" + element.UniqueId;
      
      TaskDialog.Show("Message", result);
    }

解説

引数にUniqueIdを指定するタイプですね。

取得したいElementUniqueIdがあらかじめわかっているのなら、Selection.PickObjectを使わずとも直接UniqueIdからElementにアクセスできます。

UniqueIdは唯一無二の値なので直接指定ができるわけですね。

唯一無二とは言っても確率的には、東京のマンションの柱がインドの病院の床とかぶることはあり得ますが笑

使い方としてはSample2のダブルクォーテーション内にUniqueIdがを直接入れちゃって下さい。

そもそもUniqueIdが分かっている時点でElementにアクセスできているのでは??
。。。

GetElementメソッドの使用例:その3

ソースコード

Sample3

    public void Sample3()
    {
      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;
      
      
      Element element = doc.GetElement(new ElementId(1234567));
      
      string result =
        "Name:" + element.Name + "\n" +
        "ElementId:" + element.Id + "\n" +
        "UniqueId:" + element.UniqueId;
      
      TaskDialog.Show("Message", result);
    }

解説

Sample2ElementIdバージョンだと考えてください。

解説は重複するので省きますね。

引数には数字を直接入れるのではなく、ソースコードのように、生成したElementIdクラスのオブジェクトを入れます。

だからElementIdが分かっている時点でElementにアクセスできているのでは??
。。。

GetElementメソッドまとめ

以上DocumentクラスのGetElementメソッドの紹介でした。

使用頻度が高いのは、やっぱりGetElement(Reference)のタイプかなぁ。。

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

 

C#初心者の僕が独学でお世話になった本
プログラミング初心者の僕がコーディング学習でお世話になった本

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください