]> SALOME platform Git repositories - modules/smesh.git/commitdiff
Salome HOME
Add ConvertFromQuadratic()
authoreap <eap@opencascade.com>
Wed, 26 Apr 2006 12:17:48 +0000 (12:17 +0000)
committereap <eap@opencascade.com>
Wed, 26 Apr 2006 12:17:48 +0000 (12:17 +0000)
src/SMESH/SMESH_MeshEditor.cxx
src/SMESH/SMESH_MeshEditor.hxx

index 8ac7037872db5a9e24d5c66280878e145488b7ff..ec4331f59c2c9bec481f10f23ceee2d1384c3341 100644 (file)
@@ -6023,6 +6023,62 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d)
   delete aHelper;
 }
 
+//=======================================================================
+//function : ConvertFromQuadratic
+//purpose  :
+//=======================================================================
+bool  SMESH_MeshEditor::ConvertFromQuadratic()
+{
+  SMESHDS_Mesh* meshDS = GetMeshDS();
+  SMDS_ElemIteratorPtr aElemItr = meshDS->elementsIterator();
+  while(aElemItr->more())
+  {
+    const SMDS_MeshElement* elem = aElemItr->next();
+    if(elem)
+    {
+      if(!elem->IsQuadratic())
+        continue;
+      
+      int id = elem->GetID();
+
+      int nbNodes = elem->NbNodes();
+      vector<const SMDS_MeshNode *> aNds (nbNodes);
+
+      for(int i = 0; i < nbNodes; i++)
+      {
+       const SMDS_MeshNode* n = elem->GetNode(i);
+       if( elem->IsMediumNode( n ) )
+         meshDS->SMDS_Mesh::RemoveFreeElement( n );    
+       else 
+         aNds[i] = n;
+      }
+
+      SMDSAbs_ElementType aType = elem->GetType();      
+      RemoveElemFromGroups (elem, meshDS);
+      meshDS->SMDS_Mesh::RemoveFreeElement(elem);
+
+      SMDS_MeshElement * NewElem = 0;
+      switch(aType)
+      {
+        case SMDSAbs_Edge:
+         NewElem = meshDS->AddEdgeWithID( ,id );
+         break;
+       case SMDSAbs_Face:
+         if( nbNds==3 )NewElem = meshDS->AddFaceWithID( ,id );
+         if( nbNds==4 )NewElem = meshDS->AddFaceWithID( ,id );
+         break;
+       case SMDSAbs_Volume:
+         break;
+       default:
+         break;
+      }
+
+      AddToSameGroups(NewElem, elem, meshDS);
+    }
+  }
+  return true;
+}
+
 //=======================================================================
 //function : SewSideElements
 //purpose  :
index 3c41fe01ac01f337be37219c5f8ecbae783ef6e2..bd284c5749fb931bff35ea7f0c0d49e2db7de43f 100644 (file)
@@ -344,6 +344,11 @@ class SMESH_MeshEditor {
   //converts all mesh to quadratic one, deletes old elements, replacing 
   //them with quadratic ones with the same id.
 
+  bool ConvertFromQuadratic();
+  //converts all mesh from quadratic to ordinary ones, deletes old quadratic elements, replacing 
+  //them with ordinary mesh elements with the same id.
+
+
 //  static int SortQuadNodes (const SMDS_Mesh * theMesh,
 //                            int               theNodeIds[] );
 //  // Set 4 nodes of a quadrangle face in a good order.