private GeoMapSet CreateExportFile() { var filtered = new GeoMapSet(); var checkedMaps = new Dictionary <string, List <string> >(); var x = myTreeView.Nodes.Cast <TreeNode>() .Sum(node => node.Nodes.Cast <TreeNode>().Count(child => child.Checked)); if (x == 0) { return(null); } foreach (TreeNode node in myTreeView.Nodes) { var key = node.Text; if (node.Checked) { checkedMaps.Add(key, new List <string>()); foreach (TreeNode child in node.Nodes) { if (child.Checked) { checkedMaps[key].Add(child.Tag.ToString()); } } } } var clone = mGeoMapSet.DeepClone(); foreach (var chk in checkedMaps) { filtered.BcgMenus.AddRange(clone.BcgMenus.Where(t => t.Name == chk.Key)); filtered.FilterMenus.AddRange(clone.FilterMenus.Where(t => t.Name == chk.Key)); var maps = clone.GeoMaps.Where(t => t.FilterMenuName == chk.Key); foreach (var map in maps) { var filteredMap = new GeoMap { Name = map.Name, BcgGroup = map.BcgGroup, BcgMenuName = map.BcgMenuName, FilterMenuName = map.FilterMenuName, LabelLine1 = map.LabelLine1, LabelLine2 = map.LabelLine2, Objects = new List <Vatsim.GeoMapObject>() }; foreach (var obj in map.Objects) { if (chk.Value.Contains(obj.Filter)) { var mapObj = new Vatsim.GeoMapObject() { Description = obj.Description, TdmOnly = obj.TdmOnly, }; if (obj.TextDefaults != null) { if (chk.Value.Contains(obj.TextDefaults.Filters.ToString())) { mapObj.TextDefaults = obj.TextDefaults; } } if (obj.SymbolDefaults != null) { if (chk.Value.Contains(obj.SymbolDefaults.Filters.ToString())) { mapObj.SymbolDefaults = obj.SymbolDefaults; } } if (obj.LineDefaults != null) { if (chk.Value.Contains(obj.LineDefaults.Filters.ToString())) { mapObj.LineDefaults = obj.LineDefaults; } } foreach (Element elem in obj.Elements) { if (mapObj.LineDefaults != null && elem is Line) { mapObj.Elements.Add(elem); } if (mapObj.TextDefaults != null && elem is Text) { mapObj.Elements.Add(elem); } if (mapObj.SymbolDefaults != null && elem is Symbol) { mapObj.Elements.Add(elem); } } filteredMap.Objects.Add(mapObj); } } if (filteredMap.Objects.Count > 0) { filtered.GeoMaps.Add(filteredMap); } } } foreach (var map in filtered.GeoMaps) { foreach (var obj in map.Objects) { if (obj.LineDefaults != null) { var newFilter = filtered.FilterMenus.Where(t => t.Name == map.FilterMenuName) .SelectMany(t => t.Items).FirstOrDefault(t => t.FilterGroup == obj.LineDefaults.Filters); if (newFilter != null) { obj.LineDefaults.Filters = newFilter.OurId; } var newBcgFilter = filtered.BcgMenus.Where(t => t.Name == map.BcgMenuName) .SelectMany(t => t.Items).FirstOrDefault(t => t.BcgGroups == obj.LineDefaults.BcgGroup); if (newBcgFilter != null) { obj.LineDefaults.BcgGroup = newBcgFilter.OurId; } } if (obj.SymbolDefaults != null) { var newFilter = filtered.FilterMenus.Where(t => t.Name == map.FilterMenuName) .SelectMany(t => t.Items).FirstOrDefault(t => t.FilterGroup == obj.SymbolDefaults.Filters); if (newFilter != null) { obj.SymbolDefaults.Filters = newFilter.OurId; } var newBcgFilter = filtered.BcgMenus.Where(t => t.Name == map.BcgMenuName) .SelectMany(t => t.Items).FirstOrDefault(t => t.BcgGroups == obj.SymbolDefaults.BcgGroup); if (newBcgFilter != null) { obj.SymbolDefaults.BcgGroup = newBcgFilter.OurId; } } if (obj.TextDefaults != null) { var newFilter = filtered.FilterMenus.Where(t => t.Name == map.FilterMenuName) .SelectMany(t => t.Items).FirstOrDefault(t => t.FilterGroup == obj.TextDefaults.Filters); if (newFilter != null) { obj.TextDefaults.Filters = newFilter.OurId; } var newBcgFilter = filtered.BcgMenus.Where(t => t.Name == map.BcgMenuName) .SelectMany(t => t.Items).FirstOrDefault(t => t.BcgGroups == obj.TextDefaults.BcgGroup); if (newBcgFilter != null) { obj.TextDefaults.BcgGroup = newBcgFilter.OurId; } } } } return(filtered); }
private void ProcessGeoMapsFile() { var xml = SerializationUtils.DeserializeObjectFromFile <GeoMapRecords>(dlgGeoMaps.FileName); mGeoMapSet.BcgMenus = mBcgMenus; mGeoMapSet.FilterMenus = mFilterMenus; xml.GeoMapRecordList.ForEach(geomap => { var map = new Vatsim.GeoMap { Name = geomap.GeomapId, LabelLine1 = geomap.LabelLine1, LabelLine2 = geomap.LabelLine2, BcgMenuName = geomap.BcgMenuName, FilterMenuName = geomap.FilterMenuName }; geomap.GeoMapObjectList.ForEach(obj => { var mapobj = new Vatsim.GeoMapObject(); if (obj.DefaultLineProperties != null) { mapobj.LineDefaults = new LineDefaults { Style = obj.DefaultLineProperties.LineStyle, Thickness = obj.DefaultLineProperties.Thickness, BcgGroup = obj.DefaultLineProperties.BcgGroup, Filters = obj.DefaultLineProperties.GeoLineFilters.Id }; } if (obj.DefaultSymbolProperties != null) { mapobj.SymbolDefaults = new SymbolDefaults() { Style = obj.DefaultSymbolProperties.SymbolStyle, Size = obj.DefaultSymbolProperties.FontSize, BcgGroup = obj.DefaultSymbolProperties.BcgGroup, Filters = obj.DefaultSymbolProperties.GeoSymbolFilters.Id }; } if (obj.TextDefaultProperties != null) { mapobj.TextDefaults = new TextDefaults() { Opaque = false, Size = obj.TextDefaultProperties.FontSize, Underline = obj.TextDefaultProperties.Underline, XOffset = obj.TextDefaultProperties.XPixelOffset, YOffset = obj.TextDefaultProperties.YPixelOffset, BcgGroup = obj.TextDefaultProperties.BcgGroup, Filters = obj.TextDefaultProperties.GeoTextFilters.Id }; } obj.GeoMapSymbolList.ForEach(geosymbol => { if (geosymbol.GeoMapText != null) { var offset = 0; foreach (var text in geosymbol.GeoMapText.GeoTextStrings.Select(line => new Vatsim.Text { Lat = geosymbol.Latitude.ToDecimalDegrees(), Lon = geosymbol.Longitude.ToDecimalDegrees(false), Lines = line, Size = geosymbol.FontSize, YOffset = offset += (5 * geosymbol.FontSize) })) { mapobj.Elements.Add(text); } } var symbol = new Vatsim.Symbol() { Lat = geosymbol.Latitude.ToDecimalDegrees(), Lon = geosymbol.Longitude.ToDecimalDegrees(false), Size = geosymbol.FontSize, Style = (SymbolStyle)geosymbol.SymbolStyle }; mapobj.Elements.Add(symbol); }); obj.GeoMapLineList.ForEach(geoline => { var line = new Vatsim.Line { StartLat = geoline.StartLatitude.ToDecimalDegrees(), StartLon = geoline.StartLongitude.ToDecimalDegrees(false), EndLat = geoline.EndLatitude.ToDecimalDegrees(), EndLon = geoline.EndLongitude.ToDecimalDegrees(false) }; mapobj.Elements.Add(line); }); obj.GeoMapTextList.ForEach(geotext => { foreach (var text in geotext.GeoTextStrings.Select(line => new Vatsim.Text { Lat = geotext.Latitude.ToDecimalDegrees(), Lon = geotext.Longitude.ToDecimalDegrees(false), Lines = line, Underline = geotext.Underline, Size = geotext.FontSize })) { mapobj.Elements.Add(text); } }); mapobj.Description = $"Object #{obj.MapGroupId} ({obj.MapObjectType})"; map.Objects.Add(mapobj); }); mGeoMapSet.GeoMaps.Add(map); }); }