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

问题描述 投票:0回答:2

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

我尝试了以下几点:

    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"

c# revit-api revit
2个回答
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);

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();
© www.soinside.com 2019 - 2024. All rights reserved.