コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }