Exemplo n.º 1
0
    //插入节点
    public void InsertObj(Vector4 objrect, ushort objNum, TreeNode father)
    {
        int checkedId = QuadTree.Check(ref objrect, ref rect);

        //递归结束
        if (checkedId == -1 || deep >= 5)
        {
            if (father.objects == null)
            {
                father.objects = new List <ushort>();
            }
            if (!father.objects.Contains(objNum))
            {
                father.objects.Add(objNum);
            }
            if (StepQTreeManager.TreeNodesByObjId.ContainsKey(objNum))
            {
                StepQTreeManager.TreeNodesByObjId[objNum] = father;
            }
            else
            {
                StepQTreeManager.TreeNodesByObjId.Add(objNum, father);
            }
            return;
        }
        Vector4 newRect = Vector4.zero;

        if (checkedId == 1)
        {
            newRect = new Vector4(rect.x, rect.y, rect.z / 2, rect.w / 2);
        }
        if (checkedId == 2)
        {
            newRect = new Vector4(rect.z / 2, rect.y, rect.z / 2, rect.w / 2);
        }
        if (checkedId == 3)
        {
            newRect = new Vector4(rect.x, rect.w / 2, rect.z / 2, rect.w / 2);
        }
        if (checkedId == 4)
        {
            newRect = new Vector4(rect.z / 2, rect.w / 2, rect.z / 2, rect.w / 2);
        }
        //递归
        childNodes[checkedId - 1].InsertObj(objrect, objNum, this);
    }