In this class there are a lot of collistions in class names between Mapsui and the .net framework libaries I use for Xaml rendering. I resolve this by using namespace aliases. I will use 'Xaml' in namespace and method names to refer to all .net framework classes related to Xaml, even if they are not.
Exemplo n.º 1
0
 private static Shape RenderGeometry(IViewport viewport, IStyle style, IFeature feature,
                                     BrushCache brushCache = null)
 {
     if (feature.Geometry is Geometries.Point)
     {
         return(PointRenderer.RenderPoint(feature.Geometry as Geometries.Point, style, viewport, brushCache));
     }
     if (feature.Geometry is MultiPoint)
     {
         return(GeometryRenderer.RenderMultiPoint(feature.Geometry as MultiPoint, style, viewport));
     }
     if (feature.Geometry is LineString)
     {
         return(GeometryRenderer.RenderLineString(feature.Geometry as LineString, style, viewport));
     }
     if (feature.Geometry is MultiLineString)
     {
         return(GeometryRenderer.RenderMultiLineString(feature.Geometry as MultiLineString, style, viewport));
     }
     if (feature.Geometry is Polygon)
     {
         return(GeometryRenderer.RenderPolygon(feature.Geometry as Polygon, style, viewport, brushCache));
     }
     if (feature.Geometry is MultiPolygon)
     {
         return(GeometryRenderer.RenderMultiPolygon(feature.Geometry as MultiPolygon, style, viewport));
     }
     if (feature.Geometry is IRaster)
     {
         return(GeometryRenderer.RenderRaster(feature.Geometry as IRaster, style, viewport));
     }
     return(null);
 }
Exemplo n.º 2
0
 private static void PositionGeometry(Shape renderedGeometry, IViewport viewport, IStyle style, IFeature feature)
 {
     if (feature.Geometry is Geometries.Point)
     {
         PointRenderer.PositionPoint(renderedGeometry, feature.Geometry as Geometries.Point, style, viewport);
     }
     else if (feature.Geometry is MultiPoint)
     {
         GeometryRenderer.PositionGeometry(renderedGeometry, viewport);
     }
     else if (feature.Geometry is LineString)
     {
         GeometryRenderer.PositionGeometry(renderedGeometry, viewport);
     }
     else if (feature.Geometry is MultiLineString)
     {
         GeometryRenderer.PositionGeometry(renderedGeometry, viewport);
     }
     else if (feature.Geometry is Polygon)
     {
         GeometryRenderer.PositionGeometry(renderedGeometry, viewport);
     }
     else if (feature.Geometry is MultiPolygon)
     {
         GeometryRenderer.PositionGeometry(renderedGeometry, viewport);
     }
     else if (feature.Geometry is IRaster)
     {
         GeometryRenderer.PositionRaster(renderedGeometry, feature.Geometry.GetBoundingBox(), viewport);
     }
 }
Exemplo n.º 3
0
        public static XamlShapes.Shape RenderPoint(Point point, IStyle style, IViewport viewport,
                                                   BrushCache brushCache = null)
        {
            XamlShapes.Shape symbol;
            var matrix = XamlMedia.Matrix.Identity;

            if (style is SymbolStyle)
            {
                var symbolStyle = style as SymbolStyle;

                if (symbolStyle.BitmapId < 0)
                {
                    symbol = CreateSymbolFromVectorStyle(symbolStyle, symbolStyle.Opacity, symbolStyle.SymbolType);
                }
                else
                {
                    symbol = CreateSymbolFromBitmap(symbolStyle.BitmapId, symbolStyle.Opacity, brushCache);
                }
                matrix = CreatePointSymbolMatrix(viewport.Resolution, symbolStyle);
            }
            else
            {
                symbol = CreateSymbolFromVectorStyle((style as VectorStyle) ?? new VectorStyle());
                MatrixHelper.ScaleAt(ref matrix, viewport.Resolution, viewport.Resolution);
            }

            MatrixHelper.Append(ref matrix, GeometryRenderer.CreateTransformMatrix(point, viewport));

            symbol.RenderTransform = new XamlMedia.MatrixTransform {
                Matrix = matrix
            };
            symbol.IsHitTestVisible = false;

            return(symbol);
        }
Exemplo n.º 4
0
        public static XamlShapes.Shape RenderPoint(Point point, IStyle style, IReadOnlyViewport viewport,
                                                   SymbolCache symbolCache)
        {
            XamlShapes.Shape symbol;
            var matrix = XamlMedia.Matrix.Identity;

            var symbolStyle = style as SymbolStyle;

            if (symbolStyle != null)
            {
                if (symbolStyle.BitmapId < 0)
                {
                    symbol = CreateSymbolFromVectorStyle(symbolStyle, symbolStyle.Opacity, symbolStyle.SymbolType, symbolCache, (float)viewport.Rotation);
                }
                else
                {
                    symbol = CreateSymbolFromBitmap(symbolStyle.BitmapId, symbolStyle.Opacity, symbolCache);
                }
                matrix = CreatePointSymbolMatrix(viewport.Resolution, viewport.Rotation, symbolStyle, symbol.Width, symbol.Height);
            }
            else
            {
                symbol = CreateSymbolFromVectorStyle((style as VectorStyle) ?? new VectorStyle(), symbolCache: symbolCache, rotate: (float)viewport.Rotation);
                MatrixHelper.ScaleAt(ref matrix, viewport.Resolution, viewport.Resolution);
            }

            MatrixHelper.Append(ref matrix, GeometryRenderer.CreateTransformMatrix(viewport, point));

            symbol.RenderTransform = new XamlMedia.MatrixTransform {
                Matrix = matrix
            };
            symbol.IsHitTestVisible = false;

            return(symbol);
        }
Exemplo n.º 5
0
        public static System.Windows.Shapes.Shape RenderLineString(LineString lineString, IStyle style, IReadOnlyViewport viewport)
        {
            if (!(style is VectorStyle))
            {
                throw new ArgumentException("Style is not of type VectorStyle");
            }
            var vectorStyle = style as VectorStyle;

            System.Windows.Shapes.Path path = CreateLineStringPath(vectorStyle);
            path.Data            = lineString.ToXaml();
            path.RenderTransform = new MatrixTransform {
                Matrix = GeometryRenderer.CreateTransformMatrix(viewport)
            };
            GeometryRenderer.CounterScaleLineWidth(path, viewport.Resolution);
            return(path);
        }
Exemplo n.º 6
0
        public static void PositionPoint(UIElement renderedGeometry, Point point, IStyle style, IViewport viewport)
        {
            var matrix = XamlMedia.Matrix.Identity;

            if (style is SymbolStyle)
            {
                matrix = CreatePointSymbolMatrix(viewport.Resolution, style as SymbolStyle);
            }
            else
            {
                MatrixHelper.ScaleAt(ref matrix, viewport.Resolution, viewport.Resolution);
            }
            MatrixHelper.Append(ref matrix, GeometryRenderer.CreateTransformMatrix(point, viewport));
            renderedGeometry.RenderTransform = new XamlMedia.MatrixTransform {
                Matrix = matrix
            };
        }
Exemplo n.º 7
0
        public static void PositionPoint(UIElement renderedGeometry, Point point, IStyle style, IViewport viewport)
        {
            var matrix      = XamlMedia.Matrix.Identity;
            var symbolStyle = style as SymbolStyle;

            if (symbolStyle != null)
            {
                matrix = CreatePointSymbolMatrix(viewport.Resolution, viewport.Rotation, symbolStyle, renderedGeometry.RenderSize.Width, renderedGeometry.RenderSize.Height);
            }
            else
            {
                MatrixHelper.ScaleAt(ref matrix, viewport.Resolution, viewport.Resolution);
            }
            MatrixHelper.Append(ref matrix, GeometryRenderer.CreateTransformMatrix(viewport, point));
            renderedGeometry.RenderTransform = new XamlMedia.MatrixTransform {
                Matrix = matrix
            };
        }
Exemplo n.º 8
0
        private static UIElement RenderBox(BoundingBox box, IViewport viewport)
        {
            const int symbolSize = 32; // todo: determine margin by symbol size
            const int boxMargin  = symbolSize / 2;

            var path = new Path
            {
                Stroke          = new SolidColorBrush(Colors.White),
                StrokeThickness = 2,
                Data            = new RectangleGeometry()
            };

            // offset the bounding box left and up by the box margin
            var offsetBox = box.Grow(boxMargin * viewport.Resolution);

            GeometryRenderer.PositionRaster(path, offsetBox, viewport);

            return(path);
        }
Exemplo n.º 9
0
 private static Shape RenderGeometry(IViewport viewport, IStyle style, IFeature feature,
     SymbolCache symbolCache)
 {
     if (feature.Geometry is Geometries.Point)
         return PointRenderer.RenderPoint(feature.Geometry as Geometries.Point, style, viewport, symbolCache);
     if (feature.Geometry is MultiPoint)
         return GeometryRenderer.RenderMultiPoint(feature.Geometry as MultiPoint, style, viewport, symbolCache);
     if (feature.Geometry is LineString)
         return LineStringRenderer.RenderLineString(feature.Geometry as LineString, style, viewport);
     if (feature.Geometry is MultiLineString)
         return MultiLineStringRenderer.Render(feature.Geometry as MultiLineString, style, viewport);
     if (feature.Geometry is Polygon)
         return PolygonRenderer.RenderPolygon(feature.Geometry as Polygon, style, viewport, symbolCache);
     if (feature.Geometry is MultiPolygon)
         return MultiPolygonRenderer.RenderMultiPolygon(feature.Geometry as MultiPolygon, style, viewport, symbolCache);
     if (feature.Geometry is IRaster)
         return GeometryRenderer.RenderRaster(feature.Geometry as IRaster, style, viewport);
     return null;
 }
Exemplo n.º 10
0
        public static System.Windows.Shapes.Shape RenderPolygon(Polygon polygon, IStyle style, IReadOnlyViewport viewport, SymbolCache symbolCache)
        {
            if (!(style is VectorStyle))
            {
                throw new ArgumentException("Style is not of type VectorStyle");
            }
            var vectorStyle = style as VectorStyle;

            System.Windows.Shapes.Path path = CreatePolygonPath(vectorStyle, viewport.Resolution, symbolCache, (float)viewport.Rotation);
            path.Data = polygon.ToXaml();

            var matrixTransform = new System.Windows.Media.MatrixTransform {
                Matrix = GeometryRenderer.CreateTransformMatrix(viewport)
            };

            path.RenderTransform = matrixTransform;

            if (path.Fill != null)
            {
                path.Fill.Transform = matrixTransform.Inverse as System.Windows.Media.MatrixTransform;
            }
            path.UseLayoutRounding = true;
            return(path);
        }
Exemplo n.º 11
0
        public static System.Windows.Shapes.Path RenderMultiPolygon(MultiPolygon geometry, IStyle style,
                                                                    IViewport viewport, SymbolCache symbolCache)
        {
            if (!(style is VectorStyle))
            {
                throw new ArgumentException("Style is not of type VectorStyle");
            }
            var vectorStyle = (VectorStyle)style;
            var path        = PolygonRenderer.CreatePolygonPath(vectorStyle, viewport.Resolution, symbolCache);

            path.Data = geometry.ToXaml();
            var matrixTransform = new System.Windows.Media.MatrixTransform {
                Matrix = GeometryRenderer.CreateTransformMatrix1(viewport)
            };

            path.RenderTransform = matrixTransform;

            if (path.Fill != null)
            {
                path.Fill.Transform = matrixTransform.Inverse as System.Windows.Media.MatrixTransform;
            }

            return(path);
        }