duheng
2025-03-28 e411302bca8857e102443a5250c82b9580ef07a3
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
namespace HydroUI
{
 
    [Serializable]
    public class SelectionSet
    {
        public string Name;
        public MapObjectType filterType = MapObjectType.全部;
 
        public string FilterString { get; set; } = "";
 
        public TagList FilterTags { get; set; } = new TagList();
        public List<Func<IBaseViewModel, bool>> rules = new List<Func<IBaseViewModel, bool>>();
        public List<MapObjectType> FilterTypes = new List<MapObjectType>();
        public MapViewNetWork net { get; set; } = null;
        public bool OnlyViewSelected { get; set; } = true;
 
        public List<IBaseViewModel> selectedObjects = new List<IBaseViewModel>();
        public List<IBaseViewModel> CurrentSelectedObjects = new List<IBaseViewModel>();
        public List<string> View
        {
            get
            {
                List<IBaseViewModel> originList;
                List<IBaseViewModel> list;
                List<string> list_result = new List<string>();
                if (!OnlyViewSelected && net != null)
                {
                    originList = net.MapObjects;
                }
                else
                {
                    originList = selectedObjects;
                }
 
 
                if (filterType == MapObjectType.全部)
                {
                    list = originList;
                }
 
                else
                {
 
                    var filteredSets = from obj in originList
                                       where obj.GetType() == filterType.GetObjType()
                                       select obj;
                    list = filteredSets?.ToList();
                }
 
 
 
                if (FilterString != null && FilterString != "")
                {
                    list = list?.FindAll(o => o.ID.IndexOf(FilterString) >= 0);
                }
 
                if (FilterTags.Count > 0)
                {
                    foreach (var tag in FilterTags)
                    {
                        var filteredSets = from obj in list
                                           where obj.Tags.Contains(tag)
                                           select obj;
                        list = filteredSets?.ToList();
                    }
                }
 
                if (rules.Count > 0)
                {
                    foreach (var rule in rules)
                    {
                        var filteredSets = from obj in list
                                           where rule(obj)
                                           select obj;
                        list = filteredSets?.ToList();
                    }
                }
 
                CurrentSelectedObjects = list;
                list_result = list.Select(o => o.ID)?.ToList();
                return list_result;
 
 
            }
        }
 
    }
}