Salome HOME
bos #24400 [CEA] Option in SALOME for not storing in med files the indices (number...
[modules/smesh.git] / src / SMDS / SMDS_Mesh.cxx
index eaaea68034209efe0ebe0757602d7eaf2ba184a7..2e992429542479675b82af092ba4bdfb63f5987f 100644 (file)
@@ -47,7 +47,8 @@
 #include <iostream>
 #include <fstream>
 
-#include <boost/make_shared.hpp>
+//#include <boost/make_shared.hpp>
+#include <boost/container/flat_set.hpp>
 
 #if !defined WIN32 && !defined __APPLE__
 #include <sys/sysinfo.h>
@@ -1063,16 +1064,27 @@ bool SMDS_Mesh::ChangePolyhedronNodes(const SMDS_MeshElement *                 e
   // keep current nodes of element
   std::set<const SMDS_MeshNode*> oldNodes( element->begin_nodes(), element->end_nodes() );
 
-  // change nodes
   bool Ok = false;
+
+  // change vtkUnstructuredGrid::Faces
   if ( const SMDS_MeshVolume* vol = DownCast<SMDS_MeshVolume>( element ))
     Ok = vol->ChangeNodes( nodes, quantities );
 
+  // change vtkUnstructuredGrid::Connectivity and inverse connectivity
   if ( Ok )
-  {
-    setMyModified();
-    updateInverseElements( element, &nodes[0], nodes.size(), oldNodes );
-  }
+    if ( SMDS_MeshCell* cell = dynamic_cast<SMDS_MeshCell*>((SMDS_MeshElement*) element))
+    {
+      boost::container::flat_set< const SMDS_MeshNode* > uniqueNodes( nodes.begin(), nodes.end() );
+      const SMDS_MeshNode** nodesPtr = &( *uniqueNodes.begin());
+      const int              nbNodes = (int) uniqueNodes.size();
+      Ok = cell->ChangeNodes( nodesPtr, nbNodes );
+      if ( Ok )
+      {
+        updateInverseElements( element, nodesPtr, nbNodes, oldNodes );
+        setMyModified();
+      }
+    }
+
   return Ok;
 }