umesh->checkCoherency();
return umesh;
}
+
+namespace MEDPARTITIONER
+{
+ BBTreeOfDim::BBTreeOfDim( int dim,
+ const double* bbs,
+ int* elems,
+ int level,
+ int nbelems,
+ double epsilon)
+ {
+ switch ( dim )
+ {
+ case 3:
+ _tree=new BBTree<3> (bbs,elems,level,nbelems,epsilon);
+ _PgetElementsAroundPoint = & BBTreeOfDim::_getElementsAroundPoint< 3 >;
+ _PgetIntersectingElems = & BBTreeOfDim::_getIntersectingElems< 3 >;
+ break;
+ case 2:
+ _tree=new BBTree<2> (bbs,elems,level,nbelems,epsilon);
+ _PgetElementsAroundPoint = & BBTreeOfDim::_getElementsAroundPoint< 2 >;
+ _PgetIntersectingElems = & BBTreeOfDim::_getIntersectingElems< 2 >;
+ break;
+ case 1:
+ _tree=new BBTree<1> (bbs,elems,level,nbelems,epsilon);
+ _PgetElementsAroundPoint = & BBTreeOfDim::_getElementsAroundPoint< 1 >;
+ _PgetIntersectingElems = & BBTreeOfDim::_getIntersectingElems< 1 >;
+ break;
+ default:
+ _tree=0;
+ throw INTERP_KERNEL::Exception("BBTreeOfDim(): wrong space dimension");
+ }
+ }
+
+ BBTreeOfDim::~BBTreeOfDim()
+ {
+ delete (BBTree<3>*)_tree;
+ }
+
+ void BBTreeOfDim::getElementsAroundPoint( const double* coordsPtr,
+ std::vector<int>& elems ) const
+ {
+ BBTreeOfDim* me = (BBTreeOfDim*) this;
+ (me->*_PgetElementsAroundPoint) ( coordsPtr, elems );
+ }
+ void BBTreeOfDim::getIntersectingElems(const double* bb,
+ std::vector<int>& elems) const
+ {
+ BBTreeOfDim* me = (BBTreeOfDim*) this;
+ (me->*_PgetIntersectingElems) ( bb, elems );
+ }
+}
#include "MEDPARTITIONER.hxx"
#include "MEDCouplingUMesh.hxx"
+#include "BBTree.txx"
#include <string>
#include <vector>
/*! used for descriptions of components of fields for example...*/
static std::vector<std::string> _General_Informations;
};
+
+
+
+ /*!
+ * \brief Class encapsulating BBTree of dimension given at construction and
+ * providing all features of BBTree
+ */
+ class BBTreeOfDim
+ {
+ void * _tree;
+ void (BBTreeOfDim::*_PgetElementsAroundPoint)( const double* coordsPtr,
+ std::vector<int>& elems ) const;
+ void (BBTreeOfDim::*_PgetIntersectingElems)( const double* bb,
+ std::vector<int>& elems ) const;
+
+ template< int dim>
+ void _getElementsAroundPoint( const double* coordsPtr,
+ std::vector<int>& elems ) const
+ {
+ ((BBTree<dim,int>*)_tree)->getElementsAroundPoint( coordsPtr, elems );
+ }
+ template< int dim>
+ void _getIntersectingElems(const double* bb,
+ std::vector<int>& elems) const
+ {
+ ((BBTree<dim,int>*)_tree)->getIntersectingElems( bb, elems );
+ }
+ public:
+
+ BBTreeOfDim( int dim,
+ const double* bbs,
+ int* elems,
+ int level,
+ int nbelems,
+ double epsilon=1e-12);
+ ~BBTreeOfDim();
+ void getElementsAroundPoint(const double* coordsPtr, std::vector<int>& elems ) const;
+ void getIntersectingElems (const double* bb, std::vector<int>& elems) const;
+ };
}
#endif