Salome HOME
0052474: Body Fitting with "Implement Edges"=ON crashes SALOME
authoreap <eap@opencascade.com>
Mon, 4 Aug 2014 13:37:39 +0000 (17:37 +0400)
committereap <eap@opencascade.com>
Mon, 4 Aug 2014 13:37:39 +0000 (17:37 +0400)
  Fix sortVertexNodes() for the case of a FACE with several WIREs

src/StdMeshers/StdMeshers_Cartesian_3D.cxx

index 8b40fe2d9510cb79979d8e80f8a5a0dde77d80e5..3cd23ff35d0a619006f38ac457062b5b1104f928 100644 (file)
@@ -3021,10 +3021,10 @@ namespace
     list< int >         nbEdges;
     int nbW = SMESH_Block::GetOrderedEdges (face, edges, nbEdges);
     if ( nbW > 1 ) {
-      // select a WIRE
+      // select a WIRE - remove EDGEs of irrelevant WIREs from edges
       list< TopoDS_Edge >::iterator e = edges.begin(), eEnd = e;
       list< int >::iterator nE = nbEdges.begin();
-      for ( ; nbW ; ++nE, --nbW )
+      for ( ; nbW > 0; ++nE, --nbW )
       {
         std::advance( eEnd, *nE );
         for ( ; e != eEnd; ++e )
@@ -3037,13 +3037,14 @@ namespace
                 ( std::find( &nShapeIds[0], nShapeIdsEnd, id ) != nShapeIdsEnd ))
             {
               edges.erase( eEnd, edges.end() ); // remove rest wires
-              e = eEnd;
+              e = eEnd = edges.end();
+              --e;
               nbW = 0;
               break;
             }
           }
         if ( nbW > 0 )
-          edges.erase( edges.begin(), eEnd ); // remove a current wire
+          edges.erase( edges.begin(), eEnd ); // remove a current irrelevant wire
       }
     }
     // rotate edges to have the first one at least partially out of the hexa