/// <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); }
// 在该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); }