//#####################################################################
// Function Calculate_Bounding_Boxes
//#####################################################################
template<class T> void TETRAHEDRON_HIERARCHY<T>::
Calculate_Bounding_Boxes(ARRAY<RANGE<TV> >& bounding_boxes,ARRAY_VIEW<const TV> start_X,ARRAY_VIEW<const TV> end_X)
{
    for(int k=1;k<=leaves;k++){const VECTOR<int,4>& nodes=tetrahedron_mesh.elements(k);
        bounding_boxes(k)=RANGE<TV>::Combine(RANGE<TV>::Bounding_Box(start_X.Subset(nodes)),RANGE<TV>::Bounding_Box(end_X.Subset(nodes)));}
}
//#####################################################################
// Function Calculate_Bounding_Boxes
//#####################################################################
template<class T> void TRIANGLE_HIERARCHY_2D<T>::
Calculate_Bounding_Boxes(ARRAY<RANGE<TV> >& bounding_boxes,ARRAY_VIEW<const TV> start_X,ARRAY_VIEW<const TV> end_X)
{
    for(int k=1;k<=leaves;k++){const VECTOR<int,3>& nodes=triangle_mesh.elements(k);
        bounding_boxes(k)=RANGE<TV>::Combine(RANGE<TV>::Bounding_Box(start_X.Subset(nodes)),RANGE<TV>::Bounding_Box(end_X.Subset(nodes)));}
}