Salome HOME
Merge from BR_V5_DEV 16Feb09
[modules/med.git] / src / INTERP_KERNEL / PolyhedronIntersector.hxx
1 //  Copyright (C) 2007-2008  CEA/DEN, EDF R&D
2 //
3 //  This library is free software; you can redistribute it and/or
4 //  modify it under the terms of the GNU Lesser General Public
5 //  License as published by the Free Software Foundation; either
6 //  version 2.1 of the License.
7 //
8 //  This library is distributed in the hope that it will be useful,
9 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 //  Lesser General Public License for more details.
12 //
13 //  You should have received a copy of the GNU Lesser General Public
14 //  License along with this library; if not, write to the Free Software
15 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19 #ifndef __POLYHEDRONINTERSECTOR_HXX__
20 #define __POLYHEDRONINTERSECTOR_HXX__
21
22 #include "Intersector3DP0P0.hxx"
23 #include "SplitterTetra.hxx"
24 #include "NormalizedUnstructuredMesh.hxx"
25
26 namespace INTERP_KERNEL
27 {
28
29
30   /** 
31    * \brief Class responsible for calculating intersection between a hexahedron target element and  
32    * the source elements.
33    *
34    */
35   template<class MyMeshType, class MyMatrix>
36   class PolyhedronIntersector : public Intersector3DP0P0<MyMeshType,MyMatrix>
37   { 
38   public:
39     static const int SPACEDIM=MyMeshType::MY_SPACEDIM;
40     static const int MESHDIM=MyMeshType::MY_MESHDIM;
41     typedef typename MyMeshType::MyConnType ConnType;
42     static const NumberingPolicy numPol=MyMeshType::My_numPol;
43   public:
44
45     PolyhedronIntersector(const MyMeshType& targetMesh, const MyMeshType& srcMesh, SplittingPolicy policy = GENERAL_24);
46
47     ~PolyhedronIntersector();
48
49     void intersectCells(ConnType targetCell, const std::vector<ConnType>& srcCells, MyMatrix& res);
50
51   private:
52     void releaseArrays();
53   private:
54     /// pointers to the SplitterTetra objects representing the tetrahedra 
55     /// that result from the splitting of the hexahedron target cell
56     std::vector< SplitterTetra<MyMeshType>* > _tetra;
57     
58     SplitterTetra2<MyMeshType> _split;
59     
60   };
61 }
62
63 #endif