0052474: Body Fitting with "Implement Edges"=ON crashes SALOME

Fix sortVertexNodes() for the case of a FACE with several WIREs
This commit is contained in:
eap 2014-08-04 17:37:39 +04:00
parent de78fd2b92
commit 1eb7dc9cd0

View File

@ -3021,10 +3021,10 @@ namespace
list< int > nbEdges; list< int > nbEdges;
int nbW = SMESH_Block::GetOrderedEdges (face, edges, nbEdges); int nbW = SMESH_Block::GetOrderedEdges (face, edges, nbEdges);
if ( nbW > 1 ) { 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< TopoDS_Edge >::iterator e = edges.begin(), eEnd = e;
list< int >::iterator nE = nbEdges.begin(); list< int >::iterator nE = nbEdges.begin();
for ( ; nbW ; ++nE, --nbW ) for ( ; nbW > 0; ++nE, --nbW )
{ {
std::advance( eEnd, *nE ); std::advance( eEnd, *nE );
for ( ; e != eEnd; ++e ) for ( ; e != eEnd; ++e )
@ -3037,13 +3037,14 @@ namespace
( std::find( &nShapeIds[0], nShapeIdsEnd, id ) != nShapeIdsEnd )) ( std::find( &nShapeIds[0], nShapeIdsEnd, id ) != nShapeIdsEnd ))
{ {
edges.erase( eEnd, edges.end() ); // remove rest wires edges.erase( eEnd, edges.end() ); // remove rest wires
e = eEnd; e = eEnd = edges.end();
--e;
nbW = 0; nbW = 0;
break; break;
} }
} }
if ( nbW > 0 ) 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 // rotate edges to have the first one at least partially out of the hexa