public void Init(MapColorModes mapColor = MapColorModes.Provs, List <Prov> list = null) { if (list == null) { _children.Clear(); FindDict = new Dictionary <System.Windows.Media.DrawingVisual, Prov>(); //////////////////// var vm = SimpleIoc.Default.GetInstance <MainViewModel>(); this.BeginInit(); foreach (var prov in vm.Provs) { var visual = CreateDrawingVisualProvince(prov, mapColor); _children.Add(visual); FindDict.Add(visual, prov); prov.Visual = visual; } this.EndInit(); /////////////////// var query = vm.Provs.Select( v => new SimpleProv { Name = v.Name, Color = v.Color, Contours = v.Contours }); var str = JsonConvert.SerializeObject(query, Formatting.Indented); System.IO.File.WriteAllText("points.json", str); } else { var visuals = FindDict.Where(v => list.Contains(v.Value)) .Where(v => !v.Value.IsLake && !v.Value.IsSea && !v.Value.IsWaste) .Select(v => v.Key); visuals.ToList().ForEach(v => { FindDict.Remove(v); _children.Remove(v); }); this.BeginInit(); foreach (var prov in list) { var visual = CreateDrawingVisualProvince(prov, mapColor); _children.Add(visual); FindDict.Add(visual, prov); prov.Visual = visual; } this.EndInit(); } }
private System.Windows.Media.DrawingVisual CreateDrawingVisualProvince(Prov prov, MapColorModes mapColor = MapColorModes.Provs) { var drawingVisual = new System.Windows.Media.DrawingVisual(); var dc = drawingVisual.RenderOpen(); Brush brush = null; if (mapColor == MapColorModes.Provs) { var color1 = System.Drawing.Color.FromArgb(prov.Color); brush = new SolidColorBrush(Color.FromRgb(color1.R, color1.G, color1.B)); } else if (mapColor == MapColorModes.Country) { var color = Logic.GetCountryColor(prov.Owner); if (color == null) { if (prov.IsLake || prov.IsSea) { var color1 = System.Drawing.Color.FromArgb(prov.Color); brush = new SolidColorBrush(Color.FromRgb(color1.R, color1.G, color1.B)); } else if (!prov.IsWaste) { brush = new SolidColorBrush(Colors.LightGray); } else { brush = new SolidColorBrush(Colors.DimGray); } } else { brush = new SolidColorBrush(color.Value); } } //dc.DrawGeometry(brush,new Pen(Brushes.Red,0),prov.Geometry ); dc.DrawGeometry(brush, new Pen(brush, 0.45), prov.Geometry); ////////////////////////////////////////// // FormattedText formattedText = new FormattedText( //"11", //CultureInfo.GetCultureInfo("en-us"), //FlowDirection.LeftToRight, //new Typeface(new FontFamily("宋体"), FontStyles.Normal, FontWeights.Normal, FontStretches.Normal), //12, //Brushes.Red); // Geometry textGeometry = formattedText.BuildGeometry(new Point(0, 0)); // var rect = prov.Geometry.Bounds; // var rect1 = textGeometry.Bounds; // var w = rect.Width/rect1.Width; // var h = rect.Height/rect1.Height; // var scale = Math.Min(w, h); // //var max=t // var translateTransform = new ScaleTransform(); // //translateTransform.X = -textGeometry.Bounds.Left; // //translateTransform.Y = -textGeometry.Bounds.Top; // dc.PushTransform(translateTransform); // dc.DrawGeometry(Brushes.Red, new Pen(Brushes.Red, 1.0), textGeometry); dc.Close(); return(drawingVisual); }