zhangyuekai
2024-07-01 0e3464b6adf776686e66bb3189441ab1a65a088e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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;
        }
    }
}