private static List <DashLineSegment2D> GroupCloseDashSegment(DashLineSegment2D[] segments) { var chunks = new List <DashLineSegment2D>(); foreach (var segment in segments) { var isMerged = false; foreach (var chunk in chunks) { if (SegmentHelper.DistanceClose(chunk.AsSolid, segment.AsSolid)) { var merged = new DashLineSegment2D { Elements = chunk.Elements.Union(segment.Elements).ToArray() }; chunks.Remove(chunk); chunks.Add(merged); isMerged = true; break; } } if (!isMerged) { chunks.Add(segment); } } return(segments.Length == chunks.Count ? chunks : GroupCloseDashSegment(chunks.ToArray())); }
private static List<DashLineSegment2D> GroupCloseDashSegment(DashLineSegment2D[] segments) { var chunks = new List<DashLineSegment2D>(); foreach (var segment in segments) { var isMerged = false; foreach (var chunk in chunks) { if (SegmentHelper.DistanceClose(chunk.AsSolid, segment.AsSolid)) { var merged = new DashLineSegment2D {Elements = chunk.Elements.Union(segment.Elements).ToArray()}; chunks.Remove(chunk); chunks.Add(merged); isMerged = true; break; } } if (!isMerged) chunks.Add(segment); } return segments.Length == chunks.Count ? chunks : GroupCloseDashSegment(chunks.ToArray()); }
public void AddDashLine(DashLineSegment2D dashSegment) { AddLine(dashSegment.AsSolid); }