Fix crashes caused by mesh compacting

This commit is contained in:
eap 2017-09-28 17:47:26 +03:00
parent 25c9e04a61
commit e1969210a9
2 changed files with 21 additions and 11 deletions

View File

@ -23,8 +23,11 @@ Mesh_1.Compute()
# define arguments for MakePolyLine
segments = []
# between nodes 20 and 1, default plane
segments.append( SMESH.PolySegment( 20, 0, 1, 0, smesh.MakeDirStruct(0,0,0) ))
# between nodes 1 and 100, default plane
segments.append( SMESH.PolySegment( 1, 0, 200, 0, smesh.MakeDirStruct(0,0,0) ))
# between nodes 200 and edge (578, 577), plane includes vector (1,1,1)
segments.append( SMESH.PolySegment( 200, 0, 578, 577, smesh.MakeDirStruct(1,1,1) ))
Mesh_1.MakePolyLine( segments, "1D group")

View File

@ -12877,6 +12877,8 @@ namespace // utils for MakePolyLine
//================================================================================
void Path::Remove( std::vector< Path > & paths, size_t& i )
{
if ( paths.size() > 1 )
{
size_t j = paths.size() - 1; // last item to be removed
if ( i < j )
@ -12889,7 +12891,9 @@ namespace // utils for MakePolyLine
paths[ i ].myNode2 = paths[ j ].myNode2;
paths[ i ].myLength = paths[ j ].myLength;
}
}
paths.pop_back();
if ( i > 0 )
--i;
}
@ -13183,7 +13187,7 @@ void SMESH_MeshEditor::MakePolyLine( TListOfPolySegments& theSegments,
SMESHUtils::Deleter<SMESH_ElementSearcher> delSearcher;
if ( !searcher )
{
searcher = SMESH_MeshAlgos::GetElementSearcher( *myMesh->GetMeshDS() );
searcher = SMESH_MeshAlgos::GetElementSearcher( *GetMeshDS() );
delSearcher._obj = searcher;
}
@ -13217,6 +13221,9 @@ void SMESH_MeshEditor::MakePolyLine( TListOfPolySegments& theSegments,
}
}
// assure that inverse elements are constructed, avoid their concurrent building in threads
GetMeshDS()->nodesIterator()->next()->NbInverseElements();
// find paths
PolyPathCompute algo( theSegments, segPaths, myMesh );