Exemple #1
0
 /// <summary>
 /// Node 分割
 /// </summary>
 /// <param name="maxLevel">限制Node最大的深度</param>
 /// <param name="maxItems">限制Node包含的最大数量</param>
 public void Distribute(int maxLevel, int maxItems)
 {
     if (Level < maxLevel && (SplitAxis != LEAF || ItemCount > maxItems))
     {
         if (SplitAxis == LEAF)
         {
             Split();
         }
         while (Head.Next != Tail)
         {
             OOItem i1 = Head.Next;
             i1.Detach();
             float mid  = i1.Obj.Box.Mid[SplitAxis];
             float size = i1.Obj.Box.Size[SplitAxis];
             if (mid + size < mSplitValue)
             {
                 i1.Attach(Left);
             }
             else if (mid - size > mSplitValue)
             {
                 i1.Attach(Right);
             }
             else
             {
                 OOItem i2 = i1.Split();
                 i1.Attach(Left);
                 i2.Attach(Right);
             }
         }
     }
     Merge(maxItems);
 }
Exemple #2
0
 public void DeleteItems()
 {
     while (Head.Next != Tail)
     {
         OOItem i1 = Head.Next;
         i1.Detach();
         i1.Unlink();
     }
 }