public static void DrawPolygon(D2D1.RenderTarget renderTarget, D2D1.Factory factory, IPolygon pol, D2D1.Brush brush, D2D1.Brush pen, float penWidth, D2D1.StrokeStyle penStrokeStyle, bool clip, Map map) { if (pol.ExteriorRing == null) return; Vector2[] points; var startPoint = TransformToImage(pol.ExteriorRing, map, out points); if (points.Length > 1) { using (var geom = new D2D1.PathGeometry(factory)) { using (var gs = geom.Open()) { gs.SetFillMode(D2D1.FillMode.Alternate); gs.BeginFigure(startPoint, D2D1.FigureBegin.Filled); gs.AddLines(points); gs.EndFigure(D2D1.FigureEnd.Closed); for (var i = 0; i < pol.NumInteriorRings; i++) { startPoint = TransformToImage(pol.GetInteriorRingN(i), map, out points); if (points.Length > 1) { gs.BeginFigure(startPoint, D2D1.FigureBegin.Filled); gs.AddLines(points); gs.EndFigure(D2D1.FigureEnd.Closed); } } gs.Close(); } if (brush != null) renderTarget.FillGeometry(geom, brush); if (pen != null) renderTarget.DrawGeometry(geom, pen, penWidth, penStrokeStyle); } } }
/// <summary> /// Renders a LineString to the map. /// </summary> /// <param name="renderTarget">The render target</param> /// <param name="factory">The factory to create shapes</param> /// <param name="line">LineString to render</param> /// <param name="pen">Pen style used for rendering</param> /// <param name="map">Map reference</param> /// <param name="offset">Offset by which line will be moved to right</param> public static void DrawLineString(D2D1.RenderTarget renderTarget, D2D1.Factory factory, ILineString line, D2D1.Brush pen, float penWidth, D2D1.StrokeStyle penStrokeStyle, Map map, float offset) { var points = TransformToImage(line, map); if (points.Length > 1) { using (var geom = new D2D1.PathGeometry(factory)) { using (var gs = geom.Open()) { gs.BeginFigure(points[0], D2D1.FigureBegin.Filled); gs.AddLines(points); gs.EndFigure(D2D1.FigureEnd.Open); gs.Close(); } renderTarget.DrawGeometry(geom, pen, penWidth, penStrokeStyle); } } }