Salome HOME
23156: EDF 9626 SMESH: Dump study produces a non-working script
[modules/smesh.git] / src / SMESH / SMESH_MeshEditor.cxx
index 89e85dc2e7f3a3a02651f71155b8b78faf96e2ca..146e8c12a2eccbbaa4df2033f7a1ea46c680b1b9 100644 (file)
@@ -7912,7 +7912,8 @@ void SMESH_MeshEditor::MergeNodes (TListOfListOfNodes & theGroupsOfNodes)
 
     if ( isOk ) // the non-poly elem remains valid after sticking nodes
     {
-      if ( nbNodes != nbUniqueNodes )
+      if ( nbNodes != nbUniqueNodes ||
+           !aMesh->ChangeElementNodes( elem, & curNodes[0], nbNodes ))
       {
         elemType.Init( elem ).SetID( elem->GetID() );
 
@@ -7926,10 +7927,6 @@ void SMESH_MeshEditor::MergeNodes (TListOfListOfNodes & theGroupsOfNodes)
         if ( elem != newElem )
           ReplaceElemInGroups( elem, newElem, aMesh );
       }
-      else
-      {
-        aMesh->ChangeElementNodes( elem, & curNodes[0], nbNodes );
-      }
     }
     else {
       // Remove invalid regular element or invalid polygon
@@ -8754,6 +8751,16 @@ SMESH_MeshEditor::SewFreeBorder (const SMDS_MeshNode* theBordFirstNode,
     else
       newFaces.Append( myLastCreatedElems(i) );
   }
+  // get segments adjacent to merged nodes
+  TListOfListOfNodes::iterator groupIt = nodeGroupsToMerge.begin();
+  for ( ; groupIt != nodeGroupsToMerge.end(); groupIt++ )
+  {
+    const list<const SMDS_MeshNode*>& nodes = *groupIt;
+    SMDS_ElemIteratorPtr segIt = nodes.front()->GetInverseElementIterator( SMDSAbs_Edge );
+    while ( segIt->more() )
+      segments.insert( segIt->next() );
+  }
+
   // find coincident
   TListOfListOfElementsID equalGroups;
   if ( !segments.empty() )