1

我想添加一个插件,它读取具有 RevitId 字符串的数据文件并绘制它们。

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

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

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

4

2 回答 2

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 的这篇博文:不要过滤所有元素

于 2015-01-21T15:29:18.380 回答
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)));
于 2015-01-22T09:01:25.580 回答