Salome HOME
Mesh::getNumberOfCells returns std::size_t
[tools/medcoupling.git] / src / INTERP_KERNEL / OrientationInverter.cxx
index b5f3acc06fc5e47d98dc84de4e4875861c382be3..36f675af0d37fbcc7a5d555e5a08c9e9f50675f7 100644 (file)
 
 #include "OrientationInverter.hxx"
 #include "InterpKernelException.hxx"
+#include "CellModel.hxx"
 
 #include <sstream>
 #include <algorithm>
 
 using namespace INTERP_KERNEL;
 
+OrientationInverter *OrientationInverter::BuildInstanceFrom(NormalizedCellType gt)
+{
+  switch(gt)
+    {
+    case NORM_SEG2:
+      return new OrientationInverterSEG2;
+    case NORM_SEG3:
+      return new OrientationInverterSEG3;
+    case NORM_TRI3:
+      return new OrientationInverter2DLinear(3u);
+    case NORM_QUAD4:
+      return new OrientationInverter2DLinear(4u);
+    case NORM_POLYGON:
+      return new OrientationInverterPolygon;
+    case NORM_TRI6:
+      return new OrientationInverter2DQuadratic(6u);
+    case NORM_QUAD8:
+      return new OrientationInverter2DQuadratic(8u);
+    case NORM_QPOLYG:
+      return new OrientationInverterQPolygon;
+    case NORM_TETRA4:
+      return new OrientationInverterTetra4;
+    case NORM_PYRA5:
+      return new OrientationInverterPyra5;
+    case NORM_PENTA6:
+      return new OrientationInverter3DExtrusionLinear(6u);
+    case NORM_HEXA8:
+      return new OrientationInverter3DExtrusionLinear(8u);
+    case NORM_TETRA10:
+      return new OrientationInverterTetra10;
+    case NORM_PYRA13:
+      return new OrientationInverterPyra13;
+    case NORM_PENTA15:
+      return new OrientationInverter3DExtrusionQuadratic(15u);
+    case NORM_HEXA20:
+      return new OrientationInverter3DExtrusionQuadratic(20u);
+    default:
+      {
+        const CellModel& cm(CellModel::GetCellModel(gt));
+        std::ostringstream oss; oss << "OrientationInverter::BuildInstanceFrom : Sorry no inverter for geo type " << cm.getRepr() << " !";
+        throw INTERP_KERNEL::Exception(oss.str());
+      }
+    }
+}
+
 void OrientationInverterChecker::check(int *beginPt, int *endPt) const
 {
   if(std::distance(beginPt,endPt)!=getNbNodes())