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;
|
|
|
}
|
}
|
|
}
|
}
|