private void Add(Edge edge, object edgeSet) { ICoordinateList pts = edge.Coordinates; for (int i = 0; i < pts.Count - 1; i++) { SweepLineSegment ss = new SweepLineSegment(edge, i); SweepLineEvent insertEvent = new SweepLineEvent(edgeSet, ss.MinX, null, ss); events.Add(insertEvent); events.Add(new SweepLineEvent(edgeSet, ss.MaxX, insertEvent, ss)); } }
private void ProcessOverlaps(int start, int end, SweepLineEvent ev0, SegmentIntersector si) { SweepLineSegment ss0 = (SweepLineSegment)ev0.Object; /// <summary> Since we might need to test for self-intersections, /// include current insert event object in list of event objects to test. /// Last index can be skipped, because it must be a Delete event. /// </summary> for (int i = start; i < end; i++) { SweepLineEvent ev1 = (SweepLineEvent)events[i]; if (ev1.IsInsert) { SweepLineSegment ss1 = (SweepLineSegment)ev1.Object; if (ev0.EdgeSet == null || (ev0.EdgeSet != ev1.EdgeSet)) { ss0.ComputeIntersections(ss1, si); nOverlaps++; } } } }
public void ComputeIntersections(SweepLineSegment ss, SegmentIntersector si) { si.AddIntersections(edge, ptIndex, ss.edge, ss.ptIndex); }