コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            });
        }