using Autodesk.Revit.DB;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace HStation.RevitDev.RevitRelationMap.Utils
|
{
|
public class ElementUtil : Singleton<ElementUtil>
|
{
|
private static Document _doc;
|
public static void SetDocument(Document value)
|
{
|
_doc = value;
|
}
|
|
public static List<Element> GetElements(List<Type> types = null, bool isModel = true, List<Category> categories = null, bool isType = false)
|
{
|
var collector = new FilteredElementCollector(_doc);
|
|
if (categories != null)
|
{
|
var cateFilters = new List<ElementFilter>();
|
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<ElementFilter>();
|
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;
|
}
|
}
|
}
|