如何使用c#获取revit中所有元素的列表

How to get a list of all elements in a revit with c#

我想添加一个插件,读取包含一串 RevitId 的数据文件并绘制它们。

我不知道如何使用 C# 根据字符串 elementId 在 Revit 中查找给定元素。

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

我知道这会给我一个文档,但我不知道如何获取所有 ID。我正在考虑有一个 foreach 循环来检查元素 id 的字符串与文档中所有元素的字符串,直到找到匹配项。然后,我就可以操纵它了。

一种方法是使用 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

的博客 post

您可以使用 Document.GetElement 方法通过 ElementId 获取元素。您的问题的答案在一定程度上取决于您是否有 UniqueIdElementId 字符串表示形式。在这里查看一些说明:https://boostyourbim.wordpress.com/2013/11/18/getting-an-element-from-a-string-id/

假设您有一个 ElementId(不是 GUID,只是一个数字),您可以这样做:

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

或更短:

Element element = doc.GetElement(new ElementId(Convert.ToInt32(idAsString)));