如何在revit中获取某个类别,类型和家族的所有元素

时间:2016-09-30 09:03:21

标签: c# revit-api revit

我有一个功能,我希望获得属于某个类别,类型和系列的所有元素。我将他们的名字作为字符串,并希望获得符合标准的实际元素。

我尝试了以下几点:

    internal static void getElemetWithId(Document doc,string catName, string famname, string symbname)
    {

        Category category=null;
        foreach (var cat in  doc.Settings.Categories){
            if (((Category)cat).Name.Contains(catName))
            {
                category = (Category)cat;
                break;
            }
        }
        HashSet<Element> elements = new HashSet<Element>();
        elements.AddRange(GetFilteredElementCollector(doc, new ElementRetrievalOptions())
          .OfCategory(category).WhereElementIsElementType(famname).ToElements());
            }

然而,这并不起作用,因为OfCategory不接受Category作为参数(它确实适用于builtInCategory)并且WhereElementIsElementType似乎不接受任何参数。

此功能的可能输入为document, "Doors" , "M_Single-Flush" , "0915 x 2134mm"

2 个答案:

答案 0 :(得分:3)

您应该查看Revit SDK http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=16777469,并查看一些示例代码。您还可以查看Jeremy的页面:http://thebuildingcoder.typepad.com和Harry的页面:https://boostyourbim.wordpress.com以获取更多示例代码。

您应该使用FilteredElementCollector类来查找您要查找的所有元素:

FilteredElementCollector allInstances = new FilteredElementCollector(doc).OfClass(typeof(FamilyInstance)‌​).Where(q => q.Symbol.Name == symbname);

答案 1 :(得分:0)

您可以使用FilteredElementCollector类获取属于特定类别的所有元素。在查询中传递某个姓氏的名称,您将获得所需姓氏和类型的所有元素。我最近在Revit 2019上尝试过此操作。

List<Element> listOfElements = new FilteredElementCollector(doc).OfClass(typeof(FamilySymbol)).WhereElementIsElementType()
                .ToElements().Where(e => e.Name == elementName).ToList<Element>();

        ElementId symbolId = listOfElements[0].Id;

        FamilyInstanceFilter familyInstanceFilter= new FamilyInstanceFilter(doc, symbolId);
        IList<Element> familyInstances = new FilteredElementCollector(doc).WherePasses(familyInstanceFilter).ToElements();