processIntersections method

void processIntersections(
  1. SegmentString e0,
  2. int segIndex0,
  3. SegmentString e1,
  4. int segIndex1,
)
override

This method is called by clients of the {@link SegmentIntersector} class to process intersections for two segments of the {@link SegmentString}s being intersected. Note that some clients (such as MonotoneChains) may optimize away this call for segment pairs which they have determined do not intersect (e.g. by an disjoint envelope test).

Implementation

void processIntersections(
    SegmentString e0, int segIndex0, SegmentString e1, int segIndex1) {
  // don't bother intersecting a segment with itself
  if (e0 == e1 && segIndex0 == segIndex1) return;

  Coordinate p00 = e0.getCoordinates()[segIndex0];
  Coordinate p01 = e0.getCoordinates()[segIndex0 + 1];
  Coordinate p10 = e1.getCoordinates()[segIndex1];
  Coordinate p11 = e1.getCoordinates()[segIndex1 + 1];

  li.computeIntersection(p00, p01, p10, p11);
//if (li.hasIntersection() && li.isProper()) Debug.println(li);

  if (li.hasIntersection()) {
    if (li.isInteriorIntersection()) {
      for (int intIndex = 0; intIndex < li.getIntersectionNum(); intIndex++) {
        interiorIntersections.add(li.getIntersection(intIndex));
      }
      (e0 as NodedSegmentString).addIntersections(li, segIndex0, 0);
      (e1 as NodedSegmentString).addIntersections(li, segIndex1, 1);
    }
  }
}