Salome HOME
projects
/
modules
/
smesh.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
0052474: Body Fitting with "Implement Edges"=ON crashes SALOME
[modules/smesh.git]
/
src
/
StdMeshers
/
StdMeshers_Cartesian_3D.cxx
diff --git
a/src/StdMeshers/StdMeshers_Cartesian_3D.cxx
b/src/StdMeshers/StdMeshers_Cartesian_3D.cxx
index f7516247a9982b25f97d0a02dfdf7c82a33515d8..3cd23ff35d0a619006f38ac457062b5b1104f928 100644
(file)
--- a/
src/StdMeshers/StdMeshers_Cartesian_3D.cxx
+++ b/
src/StdMeshers/StdMeshers_Cartesian_3D.cxx
@@
-2010,10
+2010,12
@@
namespace
while ( nbFreeLinks > 0 )
{
if ( iPolygon == _polygons.size() )
while ( nbFreeLinks > 0 )
{
if ( iPolygon == _polygons.size() )
+ {
_polygons.resize( _polygons.size() + 1 );
_polygons.resize( _polygons.size() + 1 );
+ _polygons[ iPolygon ]._polyLinks.reserve( 20 );
+ _polygons[ iPolygon ]._links.reserve( 20 );
+ }
_Face& polygon = _polygons[ iPolygon ];
_Face& polygon = _polygons[ iPolygon ];
- polygon._polyLinks.reserve( 20 );
- polygon._links.reserve( 20 );
_OrientedLink* curLink = 0;
_Node* curNode;
_OrientedLink* curLink = 0;
_Node* curNode;
@@
-2274,11
+2276,6
@@
namespace
_polygons[ iPolygon ]._polyLinks.clear();
break;
}
_polygons[ iPolygon ]._polyLinks.clear();
break;
}
- if ( freeLinks.back() == &polygon._links.back() )
- {
- freeLinks.pop_back();
- --nbFreeLinks;
- }
_polygons.pop_back();
usedFaceIDs.erase( curFace );
continue;
_polygons.pop_back();
usedFaceIDs.erase( curFace );
continue;
@@
-3024,10
+3021,10
@@
namespace
list< int > nbEdges;
int nbW = SMESH_Block::GetOrderedEdges (face, edges, nbEdges);
if ( nbW > 1 ) {
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();
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 )
{
std::advance( eEnd, *nE );
for ( ; e != eEnd; ++e )
@@
-3040,13
+3037,14
@@
namespace
( std::find( &nShapeIds[0], nShapeIdsEnd, id ) != nShapeIdsEnd ))
{
edges.erase( eEnd, edges.end() ); // remove rest wires
( 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 )
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
}
}
// rotate edges to have the first one at least partially out of the hexa