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