void rOctree<T>::QueryNodesWithBox(const box_type& b , node_list& result) { result.clear(); if (! m_root || ! m_root->m_volume.IntersectsBox(b)) return; result.push_back(m_root); QueryNodesWithBoxRec(b , result , m_root); }
void rOctree<T>::QueryNodesWithBoxRec(const box_type& b , node_list& result, node_type* node) { for (size_t i =0; i < node->m_children.size(); i++) { if (node->m_children[i] && node->m_children[i]->m_volume.IntersectsBox(b)) { result.push_back(node->m_children[i]); QueryNodesWithBoxRec(b , result, node->m_children[i]); } } }
node parent( node_list& v, node n ) { if( n >= v.size( ) ) { for( unsigned i = v.size( ); i <= n; i++ ) { v.push_back( i ); } } if( v[ n ] == n ) return n; v[ n ] = parent( v, v[ n ] ); return v[ n ]; }