using Autodesk.Revit.DB; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HStation.RevitDev.RevitDataExport.Utils { public class ElementUtil : Singleton { private static Document _doc; public static void SetDocument(Document value) { _doc = value; } public static List GetElements(List types = null, bool isModel = true, List categories = null, bool isType = false) { var collector = new FilteredElementCollector(_doc); if (categories != null) { var cateFilters = new List(); foreach (var category in categories) { if (isModel && category.CategoryType != CategoryType.Model) { continue; } var cateFilter = new ElementCategoryFilter((BuiltInCategory)category.Id.IntegerValue); cateFilters.Add(cateFilter); } var orFilter = new LogicalOrFilter(cateFilters); collector = collector.WherePasses(orFilter); } if (types != null) { var classFilters = new List(); foreach (var type in types) { ElementClassFilter classFilter = new ElementClassFilter(type); classFilters.Add(classFilter); } var orFilter = new LogicalOrFilter(classFilters); collector = collector.WherePasses(orFilter); } if (isType) { collector = collector.WhereElementIsElementType(); } else { collector = collector.WhereElementIsNotElementType(); } var result = collector.ToElements()?.ToList(); var ids = collector.ToElementIds()?.ToList(); return result; } } }