1

RevitIds の文字列を持つデータ ファイルを読み取り、それらをペイントするプラグインを追加したいと考えています。

C# を使用して、文字列 elementId に基づいて Revit で特定の要素を検索する方法がわかりません。

UIApplication uiApp = commandData.Application;
 Document doc = uiApp.ActiveUIDocument.Document;

これでドキュメントが得られることはわかっていますが、すべての ID を取得する方法がわかりません。一致するものが見つかるまで、要素 ID の文字列とドキュメント内のすべての文字列をチェックする foreach ループを持つことを考えていました。その後、私はそれを操作することができます。

4

2 に答える 2

2

メソッドを使用してDocument.GetElement、それによって要素を取得できますElementId。あなたの質問への答えは、文字列表現であるUniqueIdかどうかによって少し異なります。ElementId明確にするためにここをチェックしてください:https ://boostyourbim.wordpress.com/2013/11/18/getting-an-element-from-a-string-id/

(GUID ではなく、数字のみ)があると仮定するとElementId、次のことができます。

int idInt = Convert.ToInt32(idAsString);
ElementId id = new ElementId(idInt);
Element eFromId = doc.GetElement(id);

またはさらに短い:

Element element = doc.GetElement(new ElementId(Convert.ToInt32(idAsString)));
于 2015-01-22T09:01:25.580 に答える
2

1 つの方法は、FilteredElementCollectorを使用して特定の要素タイプを反復処理し、それらの elementId を取得することです。

FilteredElementCollector docCollector = new FilteredElementCollector(document).OfCategory(BuiltInCategory.OST_Walls);

続いて(あなたが提案したように):

foreach(Element el in docCollector)
{
ElementId elID = el.Id;
//....
}

修正版:

List<ElementId> ids = new FilteredElementCollector(document).OfCategory(BuiltInCategory.OST_Walls).ToElementIds().ToList();

続いて(あなたが提案したように):

foreach(ElementId elId in ids)
{
//....
}

すべての要素を反復処理することを検討している場合は、The Building Coder のブログ投稿: Do Not Filter For All Elementsを参照することをお勧めします。

于 2015-01-21T15:29:18.380 に答える