mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-02-28 23:25:37 +05:00
Fix crashes caused by mesh compacting
This commit is contained in:
parent
25c9e04a61
commit
e1969210a9
@ -23,8 +23,11 @@ Mesh_1.Compute()
|
|||||||
# define arguments for MakePolyLine
|
# define arguments for MakePolyLine
|
||||||
|
|
||||||
segments = []
|
segments = []
|
||||||
|
# between nodes 20 and 1, default plane
|
||||||
segments.append( SMESH.PolySegment( 20, 0, 1, 0, smesh.MakeDirStruct(0,0,0) ))
|
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) ))
|
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) ))
|
segments.append( SMESH.PolySegment( 200, 0, 578, 577, smesh.MakeDirStruct(1,1,1) ))
|
||||||
|
|
||||||
Mesh_1.MakePolyLine( segments, "1D group")
|
Mesh_1.MakePolyLine( segments, "1D group")
|
||||||
|
@ -12877,6 +12877,8 @@ namespace // utils for MakePolyLine
|
|||||||
//================================================================================
|
//================================================================================
|
||||||
|
|
||||||
void Path::Remove( std::vector< Path > & paths, size_t& i )
|
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
|
size_t j = paths.size() - 1; // last item to be removed
|
||||||
if ( i < j )
|
if ( i < j )
|
||||||
@ -12889,7 +12891,9 @@ namespace // utils for MakePolyLine
|
|||||||
paths[ i ].myNode2 = paths[ j ].myNode2;
|
paths[ i ].myNode2 = paths[ j ].myNode2;
|
||||||
paths[ i ].myLength = paths[ j ].myLength;
|
paths[ i ].myLength = paths[ j ].myLength;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
paths.pop_back();
|
paths.pop_back();
|
||||||
|
if ( i > 0 )
|
||||||
--i;
|
--i;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -13183,7 +13187,7 @@ void SMESH_MeshEditor::MakePolyLine( TListOfPolySegments& theSegments,
|
|||||||
SMESHUtils::Deleter<SMESH_ElementSearcher> delSearcher;
|
SMESHUtils::Deleter<SMESH_ElementSearcher> delSearcher;
|
||||||
if ( !searcher )
|
if ( !searcher )
|
||||||
{
|
{
|
||||||
searcher = SMESH_MeshAlgos::GetElementSearcher( *myMesh->GetMeshDS() );
|
searcher = SMESH_MeshAlgos::GetElementSearcher( *GetMeshDS() );
|
||||||
delSearcher._obj = searcher;
|
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
|
// find paths
|
||||||
|
|
||||||
PolyPathCompute algo( theSegments, segPaths, myMesh );
|
PolyPathCompute algo( theSegments, segPaths, myMesh );
|
||||||
|
Loading…
Reference in New Issue
Block a user