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);
            }
示例#2
0
 /// <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);
 }
示例#3
0
 /// <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);
 }
示例#4
0
 /// <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);
 }