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); }
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); } }
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); }
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); }
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); }
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 }; }
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 }; }
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); }
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; }
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); }
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); }