예제 #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);
 }
예제 #2
0
        // 在该Node 添加 一个 Object
        public void AddObject(OOModel obj)
        {
            // Node内存储的数据为 OOItem
            OOItem item = new OOItem();

            // OOItem 与 OOObject 进行 相互 关联
            // OOItem 记录 Obj
            item.Obj = obj;
            // OOObject 链表头 添加 OOItem
            item.Link(obj.Head);
            // 将 item 挂到该 Node
            item.Attach(this);
        }