我想添加一个插件,用于读取包含RevitIds字符串并绘制它们的数据文件。
我无法弄清楚如何使用C#基于字符串elementId在Revit中查找给定元素。
UIApplication uiApp = commandData.Application;
Document doc = uiApp.ActiveUIDocument.Document;
我知道这给了我一份文件,但我不知道如何获得所有的ID。我正在考虑使用foreach循环来检查元素id的字符串与文档中的所有元素的字符串,直到找到匹配为止。然后,我可以操纵它。
答案 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
获取元素。您的问题的答案取决于您是否在字符串表示中有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)));