internal static void Transform(drawing.Graphics graphics, sb.Primitives.Geometry original, sb.Point location, drawing.Pen pen, drawing.Brush brush) { if (original.Geometries != null) { foreach (var geometry in original.Geometries) { Transform(graphics, geometry, location, pen, brush); } } else { if (original.NumberOfPoints < 1) { return; } var firstPoint = original.Points[0]; if (original.Type == sb.Primitives.GeometryType.Point) { graphics.DrawEllipse(pen, (float)(firstPoint.X + location.X), (float)(firstPoint.Y + location.Y), pointSize, pointSize); } else if (original.Type == Ham.SpatialBase.Primitives.GeometryType.LineString) { AddLineString(graphics, original, location, pen, brush); } } }
internal static void Transform(WriteableBitmap context, sb.Primitives.Geometry original, sb.Point location, int border, int fill) { if (original.Geometries != null) { foreach (var geometry in original.Geometries) { Transform(context, geometry, location, border, fill); } } else { if (original.NumberOfPoints < 1) { return; } var firstPoint = original.Points[0]; if (original.Type == sb.Primitives.GeometryType.Point) { context.DrawEllipseCentered(border, (int)(firstPoint.X + location.X), (int)(firstPoint.Y + location.Y), pointSize, pointSize); } else if (original.Type == Ham.SpatialBase.Primitives.GeometryType.LineString) { AddLineString(context, original, location, border, fill); } } }
private static void AddLineString(drawing.Graphics graphics, sb.Primitives.Geometry original, sb.Point location, drawing.Pen pen, drawing.Brush brush) { if (original.NumberOfPoints < 1) { return; } for (int i = 1; i < original.NumberOfPoints; i++) { graphics.DrawLine(pen, (float)(original.Points[i - 1].X + location.X), (float)(original.Points[i - 1].Y + location.Y), (float)(original.Points[i].X + location.X), (float)(original.Points[i].Y + location.Y)); } }
private static void AddLineString(WriteableBitmap context, sb.Primitives.Geometry original, sb.Point location, int border, int fill) { if (original.NumberOfPoints < 1) { return; } for (int i = 1; i < original.NumberOfPoints; i++) { context.DrawLine( (int)(original.Points[i - 1].X + location.X), (int)(original.Points[i - 1].Y + location.Y), (int)(original.Points[i].X + location.X), (int)(original.Points[i].Y + location.Y), border); } }
private void AddPoint(WriteableBitmap context, SqlGeometry point, Func <Point, Point> transform, int border, int fill, ImageSource imageSymbol, sb.Primitives.Geometry geometrySymbol) { var center = transform(point.AsWpfPoint()).AsPoint(); if (geometrySymbol != null) { GeometryHelper.Transform(context, geometrySymbol, center, border, fill); } else if (imageSymbol != null) { throw new NotImplementedException(); } else { context.DrawEllipseCentered((int)center.X, (int)center.Y, pointSize, pointSize, border); } }
private int AddGeometry(WriteableBitmap context, SqlGeometry geometry, Func <Point, Point> transform, int border, int fill, ImageSource imageSymbol, sb.Primitives.Geometry geometrySymbol) { if (geometry.IsNotValidOrEmpty()) { return(1); } var type = geometry.GetOpenGisType(); switch (type) { case OpenGisGeometryType.Point: AddPoint(context, geometry, transform, border, fill, imageSymbol, geometrySymbol); break; case OpenGisGeometryType.LineString: AddLineString(context, geometry, transform, border, fill); break; case OpenGisGeometryType.Polygon: AddPolygon(context, geometry, transform, border, fill); break; case OpenGisGeometryType.MultiPoint: AddMultiPoint(context, geometry, transform, border, fill, imageSymbol, geometrySymbol); break; case OpenGisGeometryType.MultiLineString: AddMultiLineString(context, geometry, transform, border, fill); break; case OpenGisGeometryType.MultiPolygon: AddMultiPolygon(context, geometry, transform, border, fill); break; case OpenGisGeometryType.GeometryCollection: case OpenGisGeometryType.CircularString: case OpenGisGeometryType.CompoundCurve: case OpenGisGeometryType.CurvePolygon: default: break; } return(0); }
//int intBorderColor; //int intFillColor; public WriteableBitmap ParseSqlGeometry(List <SqlGeometry> geometries, Func <Point, Point> transform, int width, int height, Color border, Color fill, ImageSource pointSymbol = null, sb.Primitives.Geometry symbol = null) { //int? intBorderColor = border.HasValue ? WriteableBitmapExtensions.ConvertColor(border.Value) : (int?)null; //int? intFillColor = fill.HasValue ? WriteableBitmapExtensions.ConvertColor(fill.Value) : (int?)null; int intBorderColor = WriteableBitmapExtensions.ConvertColor(border); int intFillColor = WriteableBitmapExtensions.ConvertColor(fill); WriteableBitmap result = new WriteableBitmap(width, height, 96, 96, PixelFormats.Pbgra32, null); if (geometries != null) { using (result.GetBitmapContext()) { foreach (SqlGeometry item in geometries) { AddGeometry(result, item, transform, intBorderColor, intFillColor, pointSymbol, symbol); } } } //result.Freeze(); return(result); }
private void AddMultiPoint(WriteableBitmap context, SqlGeometry multiPoint, Func <Point, Point> transform, int border, int fill, ImageSource imageSymbol, sb.Primitives.Geometry geometrySymbol) { int numberOfPoints = multiPoint.STNumGeometries().Value; for (int i = 0; i < numberOfPoints; i++) { var point = multiPoint.STGeometryN(i + 1); if (point.IsNotValidOrEmpty()) { continue; } AddPoint(context, point, transform, border, fill, imageSymbol, geometrySymbol); } }