예제 #1
0
        /*
         * /// <summary>
         * ///
         * /// </summary>
         * public SweepLineIndex() { }
         */
        /// <summary>
        ///
        /// </summary>
        /// <param name="sweepInt"></param>
        public void Add(SweepLineInterval sweepInt)
        {
            SweepLineEvent insertEvent = new SweepLineEvent(sweepInt.Min, null, sweepInt);

            _events.Add(insertEvent);
            _events.Add(new SweepLineEvent(sweepInt.Max, insertEvent, sweepInt));
        }
예제 #2
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="x"></param>
 /// <param name="insertEvent"></param>
 /// <param name="sweepInt"></param>
 public SweepLineEvent(double x, SweepLineEvent insertEvent, SweepLineInterval sweepInt)
 {
     xValue = x;
     this.insertEvent = insertEvent;
     if (insertEvent != null)
          eventType = SweepLineEvents.Delete;
     else eventType = SweepLineEvents.Insert;
     this.sweepInt = sweepInt;
 }
 /// <summary>
 /// 
 /// </summary>
 private void BuildIndex()
 {
     sweepLine = new SweepLineIndex();
     for (int i = 0; i < rings.Count; i++) 
     {
         ILinearRing ring = (ILinearRing) rings[i];
         Envelope env = ring.EnvelopeInternal;
         SweepLineInterval sweepInt = new SweepLineInterval(env.MinX, env.MaxX, ring);
         sweepLine.Add(sweepInt);
     }
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="x"></param>
 /// <param name="insertEvent"></param>
 /// <param name="sweepInt"></param>
 public SweepLineEvent(double x, SweepLineEvent insertEvent, SweepLineInterval sweepInt)
 {
     xValue           = x;
     this.insertEvent = insertEvent;
     if (insertEvent != null)
     {
         eventType = SweepLineEvents.Delete;
     }
     else
     {
         eventType = SweepLineEvents.Insert;
     }
     this.sweepInt = sweepInt;
 }
예제 #5
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="start"></param>
 /// <param name="end"></param>
 /// <param name="s0"></param>
 /// <param name="action"></param>
 private void ProcessOverlaps(int start, int end, SweepLineInterval s0, ISweepLineOverlapAction action)
 {
     /*
      * 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.
      */
     for (int i = start; i < end; i++)
     {
         SweepLineEvent ev = _events[i];
         if (ev.IsInsert)
         {
             SweepLineInterval s1 = ev.Interval;
             action.Overlap(s0, s1);
             _nOverlaps++;
         }
     }
 }
예제 #6
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="start"></param>
 /// <param name="end"></param>
 /// <param name="s0"></param>
 /// <param name="action"></param>
 private void ProcessOverlaps(int start, int end, SweepLineInterval s0, ISweepLineOverlapAction action)
 {
     /*
      * 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.
      */
     for (int i = start; i < end; i++)
     {
         SweepLineEvent ev = _events[i];
         if (ev.IsInsert)
         {
             SweepLineInterval s1 = ev.Interval;
             action.Overlap(s0, s1);
             _nOverlaps++;
         }
     }
 }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="s0"></param>
 /// <param name="s1"></param>
 public void Overlap(SweepLineInterval s0, SweepLineInterval s1)
 {
     ILinearRing innerRing = (ILinearRing) s0.Item;
     ILinearRing searchRing = (ILinearRing) s1.Item;
     if (innerRing == searchRing)
         return;
     if (container.IsInside(innerRing, searchRing))
         isNonNested = false;
 }
예제 #8
0
 /*
 /// <summary>
 ///
 /// </summary>
 public SweepLineIndex() { }
 */
 /// <summary>
 /// 
 /// </summary>
 /// <param name="sweepInt"></param>
 public void Add(SweepLineInterval sweepInt)
 {
     SweepLineEvent insertEvent = new SweepLineEvent(sweepInt.Min, null, sweepInt);
     _events.Add(insertEvent);
     _events.Add(new SweepLineEvent(sweepInt.Max, insertEvent, sweepInt));
 }