Exemple #1
0
        public OctreeBranch <T> Partition()
        {
            OctreeBranch <T> branch = new OctreeBranch <T>(Parent, Value);

            Parent.ReplaceChild(this, branch);
            return(branch);
        }
    private void FillNextLevelOfTree(List <OctreeElement> branchesChildren, List <OctreeElement> biggerBranches, float xDifferent, float yDifferent, float zDifferent, Vector3 size, Vector3 startPoint)
    {
        List <int> focusPointsX = GetSpecificPoints((int)size.x, xDifferent, startPoint.x);
        List <int> focusPointsY = GetSpecificPoints((int)size.y, yDifferent, startPoint.y);
        List <int> focusPointsZ = GetSpecificPoints((int)size.z, zDifferent, startPoint.z);

        //foreach (var item in focusPointsX)
        //{
        //    Debug.Log(item);
        //}

        foreach (var itemX in focusPointsX)
        {
            foreach (var itemY in focusPointsY)
            {
                foreach (var itemZ in focusPointsZ)
                {
                    List <OctreeElement> branchesToAdd = new List <OctreeElement>();

                    for (int i = branchesChildren.Count - 1; i >= 0; i--)
                    {
                        if (branchesChildren[i].IsPointInFocusPoint(new Vector3(itemX, itemY, itemZ),
                                                                    new Vector3(xDifferent * 2, yDifferent * 2, zDifferent * 2)))
                        {
                            branchesToAdd.Add(branchesChildren[i]);
                            branchesChildren.RemoveAt(i);
                        }
                    }

                    if (branchesToAdd.Count > 0)
                    {
                        OctreeBranch branch = new OctreeBranch(branchesToAdd.ToArray());
                        biggerBranches.Add(branch);
                    }
                }
            }
        }

        if (branchesChildren.Count > 0)
        {
            Debug.LogError("old branches > 0 count" + branchesChildren.Count);
        }
    }
Exemple #3
0
 internal OctreeLeaf(OctreeBranch <T> parent, T value)
     : base(parent)
 {
     myValue = value;
 }
Exemple #4
0
 internal OctreeLeaf(OctreeBranch <T> parent)
     : base(parent)
 {
     myValue = default(T);
 }