using SharpDX; using SharpDX.Direct2D1; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace RealTimeGraphEx.ExtensionMethods { public static class RenderTargetExtensions { public static void DrawPolygon(this RenderTarget target, SharpDX.Direct2D1.Factory factory, Brush stroke, double strokeWidth, Vector2[] vectors) { PathGeometry geo = new PathGeometry(factory); GeometrySink sink1; sink1 = geo.Open(); sink1.BeginFigure(vectors[0], new FigureBegin()); sink1.AddLines(vectors); sink1.EndFigure(new FigureEnd()); sink1.Close(); target.DrawGeometry(geo, stroke, (float)strokeWidth); vectors = null; geo.Dispose(); sink1.Dispose(); stroke.Dispose(); } public static void DrawMultiPolygon(this RenderTarget target, SharpDX.Direct2D1.Factory factory, List strokes, double strokeWidth, List vectorsCollection) { List geos = new List(); List sinks = new List(); foreach (var vectors in vectorsCollection) { var geo = new PathGeometry(factory); GeometrySink sink1; sink1 = geo.Open(); sink1.BeginFigure(vectors[0], new FigureBegin()); sink1.AddLines(vectors); sink1.EndFigure(new FigureEnd()); sink1.Close(); geos.Add(geo); sinks.Add(sink1); } for (int i = 0; i < geos.Count; i++) { target.DrawGeometry(geos[i], strokes[i], (float)strokeWidth); } vectorsCollection = null; for (int i = 0; i < strokes.Count; i++) { geos[i].Dispose(); sinks[i].Dispose(); strokes[i].Dispose(); } } public static void FillPolygon(this RenderTarget target, SharpDX.Direct2D1.Factory factory, Brush fill, Vector2[] vectors) { PathGeometry geo = new PathGeometry(factory); GeometrySink sink1; sink1 = geo.Open(); sink1.BeginFigure(vectors[0], new FigureBegin()); sink1.AddLines(vectors); sink1.EndFigure(new FigureEnd()); sink1.Close(); target.FillGeometry(geo, fill); vectors = null; geo.Dispose(); sink1.Dispose(); fill.Dispose(); } } }