なんだか効率が悪いような気がします。。
確かにFilteredElementCollectorクラスで一旦はドキュメント内のElementを全取得して、そこからひとつの部材に絞るのは非効率な感じですね。
Elementを単独で取得するにはDocumentクラスのGetElementメソッドを使う手法もありますよ。
名前のまんまっす!
ここではGetElementメソッドを使ったElement取得の手法を紹介します。
FilteredElementCollectorクラスを使ったElementの単独取得の手法は下記の記事をご覧ください!
もくじ
GetElementメソッドとは
Documentクラスのメソッドで、Elementを取得することができます。
下記のオーバーロードがあり、それぞれの条件でElementを取得することになります。
GetElementメソッド
メソッド | 解説 |
GetElement(Reference) | Referenceを引数に設定 |
GetElement(String) | UniqueIdを引数に設定 |
GetElement(ElementId) | ElementIdを引数に設定 |
GetElementメソッドの使用例:その1
ソースコード
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で取得した要素を格納しています。
https://kizarukun.com/revitapi-selection
で、GetElementメソッドの引数に預けているわけですね。
これでElementクラスのオブジェクトelementに格納しているだけです。
たったこれだけで、Elementを取得できました。
GetElementメソッドの使用例:その2
ソースコード
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を指定するタイプですね。
取得したいElementのUniqueIdがあらかじめわかっているのなら、Selection.PickObjectを使わずとも直接UniqueIdからElementにアクセスできます。
UniqueIdは唯一無二の値なので直接指定ができるわけですね。
使い方としてはSample2のダブルクォーテーション内にUniqueIdがを直接入れちゃって下さい。
GetElementメソッドの使用例:その3
ソースコード
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);
}
解説
Sample2のElementIdバージョンだと考えてください。
解説は重複するので省きますね。
引数には数字を直接入れるのではなく、ソースコードのように、生成したElementIdクラスのオブジェクトを入れます。
GetElementメソッドまとめ
以上DocumentクラスのGetElementメソッドの紹介でした。
最後まで読んでいただき、ありがとうございました!