public bool Set(T leaf, Vector3f pos) { if (!bounds.Contains(pos)) { return(false); } var subBounds = bounds; VONode node = root; VONode subNode; for (int i = 1; i <= _maxDepth; ++i) { subNode = node.GetAt(pos, subBounds.center); if (subNode == null) { if (i == _maxDepth) { subNode = new VOLeafNode(); } else { subNode = new VOInternalNode(); } node.SetAt(subNode, pos, subBounds.center); } subBounds = GetOctant(subBounds, pos); node = subNode; } node.data = leaf; return(true); }
public bool Get(Vector3f pos, out T leaf) { leaf = default(T); if (!bounds.Contains(pos)) { return(false); } var subBounds = bounds; VONode subNode = root; for (int i = 1; i <= _maxDepth; ++i) { subNode = subNode.GetAt(pos, subBounds.center); if (subNode == null) { return(false); } subBounds = GetOctant(subBounds, pos); } leaf = subNode.data; return(true); }