public SvgCircle(float x, float y, float radius, SvgStyle style) { X = x; Y = y; Radius = radius; Style = style; }
internal static SvgEllipseElement CreateCenteredCircle(double radius, SvgStyle style) { SvgEllipseElement circleElement = new SvgEllipseElement( 0, 0, (float)radius, (float)radius); circleElement.Style = style; return(circleElement); }
public SvgEllipse(float x, float y, float radiusX, float radiusY, SvgStyle style) { X = x; Y = y; RadiusX = radiusX; RadiusY = radiusY; Style = style; Transform = null; }
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)); }
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)); }
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); }
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"); } }
/// <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; } } }
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); }
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"); }
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); }
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); }
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--; }); } }
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; }; }