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

时间:2015-01-21 04:49:53

标签: c# revit revit-api

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

我无法弄清楚如何使用C#基于字符串elementId在Revit中查找给定元素。

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

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

2 个答案:

答案 0 :(得分:2)

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

查看此博文

答案 1 :(得分:2)

您可以使用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)));