public override void Overlap(MonotoneChain mc1, int start1, MonotoneChain mc2, int start2) { var ss1 = (ISegmentString)mc1.Context; var ss2 = (ISegmentString)mc2.Context; _si.ProcessIntersections(ss1, start1, ss2, start2); }
/// <summary> /// This method is overridden to process a segment /// in the context of the parent chain. /// </summary> /// <param name="mc">The parent chain</param> /// <param name="startIndex">The index of the start vertex of the segment being processed</param> public virtual void Select(MonotoneChain mc, int startIndex) { mc.GetLineSegment(startIndex, ref SelectedSegment); // call this routine in case select(segment) was overridden Select(SelectedSegment); }
/// <summary> /// This function can be overridden if the original chains are needed. /// </summary> /// <param name="mc1"></param> /// <param name="start1">The index of the start of the overlapping segment from mc1.</param> /// <param name="mc2"></param> /// <param name="start2">The index of the start of the overlapping segment from mc2.</param> public virtual void Overlap(MonotoneChain mc1, int start1, MonotoneChain mc2, int start2) { mc1.GetLineSegment(start1, ref overlapSeg1); mc2.GetLineSegment(start2, ref overlapSeg2); Overlap(overlapSeg1, overlapSeg2); }
/// <summary> /// Determine all the line segments in two chains which may overlap, and process them. /// </summary> /// <remarks> /// The monotone chain search algorithm attempts to optimize /// performance by not calling the overlap action on chain segments /// which it can determine do not overlap. /// However, it *may* call the overlap action on segments /// which do not actually interact. /// This saves on the overhead of checking intersection /// each time, since clients may be able to do this more efficiently. /// </remarks> /// <param name="mc">The monotone chain</param> /// <param name="mco">The overlap action to execute on selected segments</param> public void ComputeOverlaps(MonotoneChain mc, MonotoneChainOverlapAction mco) { ComputeOverlaps(_start, _end, mc, mc._start, mc._end, mco); }