Salome HOME
PR: debug SMDS memimp
[modules/smesh.git] / src / SMDS / SMDS_VtkFace.cxx
index 57ff907f4b645dd24ad60433bf76ec08b0b53def..ad53647cc5512bf63cf61c851bb84ab0c0d34ab9 100644 (file)
@@ -28,8 +28,14 @@ void SMDS_VtkFace::init(std::vector<vtkIdType> nodeIds, SMDS_Mesh* mesh)
        myIdInShape = -1;
        myMeshId = mesh->getMeshId();
        vtkIdType aType = VTK_TRIANGLE;
-       if (nodeIds.size() == 4)
-               aType = VTK_QUAD;
+       switch(nodeIds.size())
+         {
+         case  3: aType = VTK_TRIANGLE;           break;
+         case  4: aType = VTK_QUAD;               break;
+         case  6: aType = VTK_QUADRATIC_TRIANGLE; break;
+         case  8: aType = VTK_QUADRATIC_QUAD;     break;
+         default: aType = VTK_TRIANGLE; break;
+         }
        myVtkID = grid->InsertNextLinkedCell(aType, nodeIds.size(), &nodeIds[0]);
 }
 
@@ -45,7 +51,15 @@ void SMDS_VtkFace::Print(std::ostream & OS) const
 
 int SMDS_VtkFace::NbEdges() const
 {
-       return NbNodes();
+   switch(NbNodes())
+        {
+        case 3:
+        case 6: return 3;
+        case 4:
+        case 8: return 4;
+        default: MESSAGE("invalid number of nodes");
+        }
+   return 0;
 }
 
 int SMDS_VtkFace::NbFaces() const
@@ -68,26 +82,39 @@ int SMDS_VtkFace::NbNodes() const
 const SMDS_MeshNode*
 SMDS_VtkFace::GetNode(const int ind) const
 {
-       return 0;
+  return SMDS_MeshElement::GetNode(ind); // --- a optimiser !
+}
+
+bool SMDS_VtkFace::IsQuadratic() const
+{
+  if (this->NbNodes() > 5)
+       return true;
+  else
+       return false;
 }
 
 SMDSAbs_EntityType SMDS_VtkFace::GetEntityType() const
 {
-       int nbNodes = NbNodes();
-       if (nbNodes == 3)
-               return SMDSEntity_Triangle;
-       else
-               return SMDSEntity_Quadrangle;
+       SMDSAbs_EntityType aType = SMDSEntity_Triangle;
+       switch(NbNodes())
+         {
+         case  3:
+         case  6: aType = SMDSEntity_Triangle;   break;
+         case  4:
+         case  8: aType = SMDSEntity_Quadrangle; break;
+         }
+       return aType;
 }
 
 vtkIdType SMDS_VtkFace::GetVtkType() const
 {
-       int nbNodes = NbNodes();
-       if (nbNodes == 3)
-               return VTK_TRIANGLE;
-       else
-               return VTK_QUAD;
-
+       switch(NbNodes())
+         {
+         case  3: return VTK_TRIANGLE;
+         case  6: return VTK_QUADRATIC_TRIANGLE;
+         case  4: return VTK_QUAD;
+         case  8: return VTK_QUADRATIC_QUAD;
+         }
 }
 
 SMDS_ElemIteratorPtr SMDS_VtkFace::elementsIterator(SMDSAbs_ElementType type) const