private void RenderLoadStrips(ILineString ls, double[] loads, double scale = 1) { // Get the coordinates var start = Simplify ? NetTopologySuite.Simplify.DouglasPeuckerLineSimplifier.Simplify(ls.Coordinates, 2 * Map.PixelSize) : ls.Coordinates; // Compute the initial offset if (Offset != 0d) { start = RemoveSelfIntersections(_offsetCurveBuilder .GetOffsetCurve(start, Math.Sign(scale) * Offset * Map.PixelSize), ls.Factory); } // All strips for (var i = 0; i < loads.Length; i++) { // cycle if if (loads[i] == 0) { continue; } // Compute the offset line var offset = RemoveSelfIntersections(_offsetCurveBuilder .GetOffsetCurve(start, scale * loads[i]), ls.Factory); // Setup coordinate sequence var pts = new List <Coordinate>(start); pts.AddRange(offset.Reverse()); pts.Add(start[0]); // Build the ring var ring = ls.Factory.CreateLinearRing(pts.ToArray()); // Transform to image coordinates var gp = ring.TransformToImage(Map); // Draw the polygon Brush b; if (!LoadBrush.TryGetValue(i, out b)) { b = new HatchBrush(HatchStyle.LargeCheckerBoard, Color.HotPink, Color.Chartreuse); } Graphics.FillPolygon(b, gp); if (FramePen != null) { Graphics.DrawPolygon(FramePen, gp); } start = offset; } }