Example #1
0
 public SvgCircle(float x, float y, float radius, SvgStyle style)
 {
     X      = x;
     Y      = y;
     Radius = radius;
     Style  = style;
 }
Example #2
0
        internal static SvgEllipseElement CreateCenteredCircle(double radius, SvgStyle style)
        {
            SvgEllipseElement circleElement = new SvgEllipseElement(
                0, 0,
                (float)radius, (float)radius);

            circleElement.Style = style;
            return(circleElement);
        }
Example #3
0
 public SvgEllipse(float x, float y, float radiusX, float radiusY, SvgStyle style)
 {
     X         = x;
     Y         = y;
     RadiusX   = radiusX;
     RadiusY   = radiusY;
     Style     = style;
     Transform = null;
 }
Example #4
0
        Expression CreateFill(SvgStyle style, SvgRendererContext context)
        {
            if (style == null)
            {
                return(CreateFill(null, null, context));
            }
            var fill    = (string)style.Get("fill");
            var opacity = (string)style.Get("fill-opacity");

            return(CreateFill(fill, opacity, context));
        }
Example #5
0
        Expression CreateStroke(SvgStyle style, SvgRendererContext context)
        {
            if (style == null)
            {
                return(null);
            }
            var stroke        = (string)style.Get("stroke");
            var strokeWidth   = (string)style.Get("stroke-width");
            var strokeOpacity = (string)style.Get("stroke-opacity");

            return(CreateStroke(stroke, strokeWidth, strokeOpacity, context));
        }
Example #6
0
        public static SvgEllipseElement CreateCircle(Point center, double radius, SvgStyle style)
        {
            SvgEllipseElement circleElement = new SvgEllipseElement(
                center.X, center.Y,
                radius, radius);

            if (style != null)
            {
                circleElement.Style = style;
            }
            return(circleElement);
        }
Example #7
0
        static void SetStyleAttribute(ref SvgStyle style, SvgElement element, string attribute)
        {
            var value = (string)element.Attributes[attribute];

            if (value != null)
            {
                if (style == null)
                {
                    style = new SvgStyle();
                }
                style.Set(attribute, value);
            }
        }
 private void WriteStyle(XmlDocument doc, XmlElement me, object o)
 {
     if (o.GetType() != typeof(SvgStyle))
     {
         me.SetAttribute("style", doc.NamespaceURI, o.ToString());
     }
     else
     {
         SvgStyle svgStyle = (SvgStyle)o;
         me.SetAttribute("style", doc.NamespaceURI, svgStyle.ToString());
         doc.CreateEntityReference("pingu");
     }
 }
Example #9
0
 /// <summary>
 /// Given a document and a current node, read this element from the node.
 /// </summary>
 /// <param name="doc"></param>
 /// <param name="el"></param>
 public override void ReadXmlElement(XmlDocument doc, XmlElement el)
 {
     foreach (XmlAttribute att in el.Attributes)
     {
         if (att.Name == "style")
         {
             Style = new SvgStyle(att.Value);
         }
         else if (att.Name == "transform")
         {
             Transform = new SvgTransformList(att.Value);
         }
         else
         {
             this[att.Name] = att.Value;
         }
     }
 }
Example #10
0
        public static SKPaint ToSKPaint(this SvgStyle style)
        {
            var paint = new SKPaint();

            paint.IsAntialias = true;

            if (style.Fill != null)
            {
                paint.Style = SKPaintStyle.Fill;
                paint.Color = style.Fill.ToSKColor();
            }

            if (style.Stroke != null)
            {
                paint.Style       = SKPaintStyle.Stroke;
                paint.Color       = style.Stroke.ToSKColor();
                paint.StrokeWidth = style.StrokeThickness;
            }

            return(paint);
        }
Example #11
0
        private void WriteStyle(XmlDocument doc, XmlElement me, object o)
        {
            if (o.GetType() != typeof(SvgStyle))
            {
                me.SetAttribute("style", doc.NamespaceURI, o.ToString());
                return;
            }

            SvgStyle style = (SvgStyle)o;

            /*
             * foreach(string s in style.Keys)
             * {
             *      me.SetAttribute(s, doc.NamespaceURI, style.Get(s).ToString());
             * }
             */

            me.SetAttribute("style", doc.NamespaceURI, style.ToString());

            doc.CreateEntityReference("pingu");
        }
Example #12
0
        SvgStyle GetElementStyle(SvgElement element)
        {
            SvgStyle style = null;

            do
            {
                var elementStyle = ParseStyle(element, "style");
                if (style == null)
                {
                    style = elementStyle;
                }
                else if (elementStyle != null)
                {
                    style += elementStyle;
                }
                SetStyleAttribute(ref style, element, "fill");
                SetStyleAttribute(ref style, element, "fill-opacity");
                SetStyleAttribute(ref style, element, "stroke");
                SetStyleAttribute(ref style, element, "stroke-width");
                SetStyleAttribute(ref style, element, "stroke-opacity");
            } while (style == null && (element = element.Parent) != null && element.Name == "g");
            return(style);
        }
Example #13
0
        private void GenerateLayers(List <Helper.SvgLayer> layers)
        {
            List <Task> layerLoadTasks = new List <Task>();
            int         terrainWidth   = 0;

            foreach (var svgLayer in layers)
            {
                var layer = new Mapsui.Layers.MemoryLayer(svgLayer.name);

                if (
                    svgLayer.name == "forests" ||
                    svgLayer.name == "countLines" ||
                    svgLayer.name == "rocks" ||
                    svgLayer.name == "grid"
                    )
                {
                    layer.Enabled = false;
                    if (System.Environment.OSVersion.Platform == PlatformID.Unix) //Android
                    {
                        continue;
                    }
                }

                terrainWidth = svgLayer.width;

                currentBounds = new Mapsui.Geometries.BoundingBox(0, 0, terrainWidth, terrainWidth);

                var features = new Features();
                var feature  = new Feature {
                    Geometry = new BoundBox(currentBounds), ["Label"] = svgLayer.name
                };

                var x = new SvgStyle {
                    image = new Svg.Skia.SKSvg()
                };

                layerLoadTasks.Add(
                    Task.Run(() =>
                {
                    using (var stream = svgLayer.content.GetStream())
                    {
                        x.image.Load(stream);
                    }
                }));

                feature.Styles.Add(x);
                features.Add(feature);

                //
                layer.DataSource = new MemoryProvider(features);
                MapControl.Map.Layers.Add(layer);
            }

            Task.WaitAll(layerLoadTasks.ToArray());
            //var layer = new Mapsui.Layers.ImageLayer("Base");
            //layer.DataSource = CreateMemoryProviderWithDiverseSymbols();
            //MapControl.Map.Layers.Add(layer);

            MapControl.Map.Limiter            = new ViewportLimiter();
            MapControl.Map.Limiter.PanLimits  = new Mapsui.Geometries.BoundingBox(0, 0, terrainWidth, terrainWidth);
            MapControl.Map.Limiter.ZoomLimits = new MinMax(0.01, 10);

            GPSTrackerLayer.IsMapInfoLayer = true;
            GPSTrackerLayer.DataSource     = new GPSTrackerProvider(GPSTrackerLayer, currentBounds);
            GPSTrackerLayer.Style          = null; // remove white circle https://github.com/Mapsui/Mapsui/issues/760
            MapControl.Map.Layers.Add(GPSTrackerLayer);
            GPSTrackerLayer.DataChanged += (a, b) => MapControl.RefreshData();
            // ^ without this create/delete only updates when screen is moved

            MapMarkersLayer.IsMapInfoLayer = true;
            MapMarkersLayer.DataSource     = new MapMarkerProvider(MapMarkersLayer, currentBounds, MarkerVisibilityManager);
            MapMarkersLayer.Style          = null; // remove white circle https://github.com/Mapsui/Mapsui/issues/760
            MapControl.Map.Layers.Add(MapMarkersLayer);
            MapMarkersLayer.DataChanged += (a, b) => MapControl.RefreshData();
            // ^ without this create/delete only updates when screen is moved

            //LayerList.Initialize(MapControl.Map.Layers);
            //MapControl.ZoomToBox(new Point(0, 0), new Point(8192, 8192));
            MapControl.Navigator.ZoomTo(1, 0);
        }
Example #14
0
        private void GenerateLayers(List <Helper.SvgLayer> layers)
        {
            List <(MemoryLayer, Task)> layerLoadTasks = new List <(MemoryLayer, Task)>();
            int terrainWidth = 0;
            int index        = 0;

            foreach (var svgLayer in layers)
            {
                if (svgLayer.content.GetSize() > 5e7) //> 50MB
                {
                    //#TODO tell the user, this layer is too big and is skipped for safety. TacControl would use TONS of ram, very bad, usually an issue with Forest layer

                    continue;
                }



                var layer = new MemoryLayer(svgLayer.name);

                if (svgLayer.name == "forests" || svgLayer.name == "countLines" || svgLayer.name == "rocks" ||
                    svgLayer.name == "grid")
                {
                    layer.Enabled = false;
                }

                terrainWidth = svgLayer.width;

                currentBounds = new Mapsui.Geometries.BoundingBox(0, 0, terrainWidth, terrainWidth);

                var features = new Features();
                var feature  = new Feature {
                    Geometry = new BoundBox(currentBounds), ["Label"] = svgLayer.name
                };


                if (layer.Enabled)
                {
                    var x = new SvgStyle {
                        image = new Svg.Skia.SKSvg()
                    };
                    layer.Enabled = false;
                    layerLoadTasks.Add((layer,
                                        Task.Run(() =>
                    {
                        using (var stream = svgLayer.content.GetStream())
                        {
                            //var file = File.Create($"P:/{layer.Name}.svg");
                            //stream.CopyTo(file);
                            //file.Dispose();

                            x.image.Load(stream);
                        }
                    })));

                    feature.Styles.Add(x);
                }
                else
                {
                    var x = new SvgStyleLazy {
                        data = svgLayer.content
                    };
                    x.DoLoad = () =>
                    {
                        using (var stream = svgLayer.content.GetStream())
                        {
                            var image = new Svg.Skia.SKSvg();
                            image.Load(stream);
                            x.image = image;
                        }

                        layer.DataHasChanged();
                    };

                    feature.Styles.Add(x);
                }

                features.Add(feature);


                layer.DataSource = new MemoryProvider(features);
                layer.MinVisible = 0;
                layer.MaxVisible = double.MaxValue;
                MapControl.Map.Layers.Insert(index++, layer);
            }

            MapControl.Map.Limiter.PanLimits = new Mapsui.Geometries.BoundingBox(0, 0, terrainWidth, terrainWidth);


            Task.WhenAll(layerLoadTasks.Select(x => x.Item2).ToArray()).ContinueWith(x =>
            {
                Networking.Instance.MainThreadInvoke(() =>
                {
                    foreach (var(memoryLayer, item2) in layerLoadTasks)
                    {
                        memoryLayer.Enabled = true;
                    }

                    LayerList.Initialize(MapControl.Map.Layers);
                });
            });



            foreach (var markerMarkerType in GameState.Instance.marker.markerTypes)
            {
                markNum++;
                MarkerCache.Instance.GetImage(markerMarkerType.Value, (MarkerColor)null).ContinueWith((x) =>
                {
                    markerMarkerType.Value.iconImage = x.Result; //#TODO use this for markerCache caching in general, store cached images in there
                    markNum--;
                });
            }
        }
Example #15
0
        private void GenerateLayers(List <Helper.SvgLayer> layers)
        {
            Console.WriteLine($"MapView Layerdata arrived, creating layers...");
            List <(BaseLayer, Task)> layerLoadTasks = new List <(BaseLayer, Task)>();
            int terrainWidth = 0;
            int index        = 0;

            foreach (var svgLayer in layers)
            {
                if (svgLayer.content.GetSize() > 5e7) //> 50MB
                {
                    Console.WriteLine($"MapView !! Layer is too big, skipping layer {svgLayer.name}");
                    //#TODO tell the user, this layer is too big and is skipped for safety. TacControl would use TONS of ram, very bad, usually an issue with Forest layer

                    continue;
                }



                var layer       = new MemoryLayer(svgLayer.name);
                var renderLayer = new RasterizingLayer(layer, 100, 1D, MapControl.Renderer);

                if (svgLayer.name == "forests" || svgLayer.name == "countLines" || svgLayer.name == "rocks" ||
                    svgLayer.name == "grid")
                {
                    renderLayer.Enabled = false;
                }

                terrainWidth = svgLayer.width;

                currentBounds = new Mapsui.Geometries.BoundingBox(0, 0, terrainWidth, terrainWidth);

                var features = new Features();
                var feature  = new Feature {
                    Geometry = new BoundBox(currentBounds), ["Label"] = svgLayer.name
                };


                if (renderLayer.Enabled)
                {
                    var x = new SvgStyle {
                        image = new Svg.Skia.SKSvg()
                    };
                    renderLayer.Enabled = false;
                    layerLoadTasks.Add((renderLayer,
                                        Task.Run(() =>
                    {
                        using (var stream = svgLayer.content.GetStream())
                        {
                            //var file = File.Create($"P:/{layer.Name}.svg");
                            //stream.CopyTo(file);
                            //file.Dispose();

                            x.image.Load(stream);
                        }
                    })));

                    feature.Styles.Add(x);
                }
                else
                {
                    var x = new SvgStyleLazy {
                        data = svgLayer.content
                    };
                    x.DoLoad = () =>
                    {
                        using (var stream = svgLayer.content.GetStream())
                        {
                            var image = new Svg.Skia.SKSvg();
                            image.Load(stream);
                            x.image = image;
                        }

                        layer.DataHasChanged();
                    };

                    feature.Styles.Add(x);
                }

                features.Add(feature);


                layer.DataSource = new MemoryProvider(features);
                layer.MinVisible = 0;
                layer.MaxVisible = double.MaxValue;
                MapControl.Map.Layers.Insert(index++, renderLayer);
            }

            MapControl.Map.Limiter.PanLimits = new Mapsui.Geometries.BoundingBox(0, 0, terrainWidth, terrainWidth);


            Task.WhenAll(layerLoadTasks.Select(x => x.Item2).ToArray()).ContinueWith(x =>
            {
                Networking.Instance.MainThreadInvoke(() =>
                {
                    foreach (var(memoryLayer, item2) in layerLoadTasks)
                    {
                        memoryLayer.Enabled = true;

                        memoryLayer.DataHasChanged();
                    }

                    LayerList.Initialize(MapControl.Map.Layers);

                    MapControl.Navigator.NavigateTo(new BoundingBox(new Point(0, 0), new Point(terrainWidth, terrainWidth)));
                    MapControl.RefreshGraphics();
                });
            });

            Console.WriteLine($"MapView Layers loaded, preloading marker images from Arma...");

            foreach (var markerMarkerType in GameState.Instance.marker.markerTypes)
            {
                markNum++;
                MarkerCache.Instance.GetImage(markerMarkerType.Value, (MarkerColor)null).ContinueWith((x) =>
                {
                    markerMarkerType.Value.iconImage = x.Result; //#TODO use this for markerCache caching in general, store cached images in there
                    markNum--;
                    //if (markNum == 3) // && !ImageDirectory.Instance.HasPendingRequests()
                    //{
                    //    // all markers loaded
                    //    ImageDirectory.Instance.ExportImagesToZip("P:/markers.zip");
                    //}
                });
            }

            // hacky, we might not have markerColors available before this method.
            cmbColors.ItemsSource = GameState.Instance.marker.markerColors.Values;
            DefaultMarkerColor    = "Default";

            cmbColors.DropDownClosed += (x, y) =>
            {
                var conv = new MarkerColorStringConverter();
                DefaultMarkerColor = conv.Convert(cmbColors.SelectedItem as MarkerColor, typeof(string), null, null) as string;
            };
        }