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); } }
internal OctreeLeaf(OctreeBranch <T> parent, T value) : base(parent) { myValue = value; }
internal OctreeLeaf(OctreeBranch <T> parent) : base(parent) { myValue = default(T); }