//-------------------------------------------------------------------------------------------------- /// Find all indices to all bounding boxes intersecting the given bounding box and add them to indices //-------------------------------------------------------------------------------------------------- void BoundingBoxTreeImpl::findIntersections(const cvf::BoundingBox& bb, std::vector<size_t>& indices) const { if (bb.isValid()) { findIntersections(bb, m_pRoot, indices); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void BoundingBoxTreeImpl::findIntersections(const cvf::BoundingBox& bb, const AABBTreeNode* node, std::vector<size_t>& cvIndices) const { CVF_TIGHT_ASSERT(bb.isValid()); if (node && bb.intersects(node->boundingBox())) { if (node->type() == AB_LEAF) { const AABBTreeNodeLeaf* leaf = static_cast<const AABBTreeNodeLeaf*>(node); { cvIndices.push_back(leaf->index()); return; } } else if (node->type() == AB_INTERNAL) { const AABBTreeNodeInternal* internalNode = static_cast<const AABBTreeNodeInternal*>(node); findIntersections(bb, internalNode->left(), cvIndices); findIntersections(bb, internalNode->right(), cvIndices); } } }