Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __CURVEINTERSECTOR_HXX__
00021 #define __CURVEINTERSECTOR_HXX__
00022
00023 #include "TargetIntersector.hxx"
00024 #include "NormalizedUnstructuredMesh.hxx"
00025
00026 namespace INTERP_KERNEL
00027 {
00028 template<class MyMeshType, class MyMatrix>
00029 class CurveIntersector : public TargetIntersector<MyMeshType,MyMatrix>
00030 {
00031 public:
00032 static const int SPACEDIM=MyMeshType::MY_SPACEDIM;
00033 static const int MESHDIM=MyMeshType::MY_MESHDIM;
00034 typedef typename MyMeshType::MyConnType ConnType;
00035 static const NumberingPolicy numPol=MyMeshType::My_numPol;
00036 public:
00037 CurveIntersector(const MyMeshType& meshT, const MyMeshType& meshS,
00038 double precision, double adjustmentEpsAbs, double medianLine, int printLevel);
00039 virtual ~CurveIntersector();
00040 void createBoundingBoxes(const MyMeshType& mesh, std::vector<double>& bbox);
00041 void adjustBoundingBoxes(std::vector<double>& bbox, double adjustmentEpsAbs);
00042 static void getElemBB(double* bb, const MyMeshType& mesh, ConnType iP, ConnType nb_nodes);
00043
00044 protected :
00045 bool getRealTargetCoordinates(ConnType icellT, std::vector<double>& coordsT);
00046 bool getRealSourceCoordinates(ConnType icellS, std::vector<double>& coordsS);
00047 double intersectSegments(double *Coords_T, double *Coords_S);
00048
00049 struct TDualSegment
00050 {
00051 std::vector<double> _coords;
00052 int _nodeId;
00053 };
00054 static void getDualSegments(ConnType icell,
00055 const MyMeshType& mesh,
00056 std::vector<TDualSegment>& segments);
00057
00058 protected:
00059 const ConnType *_connectT;
00060 const ConnType *_connectS;
00061 const double *_coordsT;
00062 const double *_coordsS;
00063 const ConnType *_connIndexT;
00064 const ConnType *_connIndexS;
00065 const MyMeshType& _meshT;
00066 const MyMeshType& _meshS;
00067 double _tolerance;
00068 double _precision;
00069 double _median_line;
00070 int _print_level;
00071 };
00072 }
00073
00074 #endif