如何使用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
获取元素。您的问题的答案在一定程度上取决于您是否有 UniqueId
或 ElementId
字符串表示形式。在这里查看一些说明: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)));
我想添加一个插件,读取包含一串 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
获取元素。您的问题的答案在一定程度上取决于您是否有 UniqueId
或 ElementId
字符串表示形式。在这里查看一些说明: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)));