mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-04-08 10:57:26 +05:00
0022423: EDF SMESH Regression: Quadrangle algo fails
fix CheckNbEdges() for the case of a degenerated 5-th edge
This commit is contained in:
parent
5f4dcad99c
commit
5fbe78b190
@ -931,6 +931,8 @@ FaceQuadStruct::Ptr StdMeshers_Quadrangle_2D::CheckNbEdges(SMESH_Mesh &
|
|||||||
ignoreMediumNodes, myProxyMesh));
|
ignoreMediumNodes, myProxyMesh));
|
||||||
++iSide;
|
++iSide;
|
||||||
}
|
}
|
||||||
|
if ( quad->side.size() == 4 )
|
||||||
|
break;
|
||||||
if ( nbLoops > 8 )
|
if ( nbLoops > 8 )
|
||||||
{
|
{
|
||||||
error(TComm("Bug: infinite loop in StdMeshers_Quadrangle_2D::CheckNbEdges()"));
|
error(TComm("Bug: infinite loop in StdMeshers_Quadrangle_2D::CheckNbEdges()"));
|
||||||
@ -3582,9 +3584,10 @@ int StdMeshers_Quadrangle_2D::getCorners(const TopoDS_Face& theFace,
|
|||||||
theVertices.clear();
|
theVertices.clear();
|
||||||
vector< double > angles;
|
vector< double > angles;
|
||||||
vector< TopoDS_Edge > edgeVec;
|
vector< TopoDS_Edge > edgeVec;
|
||||||
vector< int > cornerInd;
|
vector< int > cornerInd, nbSeg;
|
||||||
angles.reserve( vertexByAngle.size() );
|
angles.reserve( vertexByAngle.size() );
|
||||||
edgeVec.reserve( vertexByAngle.size() );
|
edgeVec.reserve( vertexByAngle.size() );
|
||||||
|
nbSeg.reserve( vertexByAngle.size() );
|
||||||
cornerInd.reserve( nbCorners );
|
cornerInd.reserve( nbCorners );
|
||||||
for ( edge = theWire.begin(); edge != theWire.end(); ++edge )
|
for ( edge = theWire.begin(); edge != theWire.end(); ++edge )
|
||||||
{
|
{
|
||||||
@ -3599,6 +3602,13 @@ int StdMeshers_Quadrangle_2D::getCorners(const TopoDS_Face& theFace,
|
|||||||
}
|
}
|
||||||
angles.push_back( angleByVertex.IsBound( v ) ? angleByVertex( v ) : -M_PI );
|
angles.push_back( angleByVertex.IsBound( v ) ? angleByVertex( v ) : -M_PI );
|
||||||
edgeVec.push_back( *edge );
|
edgeVec.push_back( *edge );
|
||||||
|
if ( theConsiderMesh && isThereVariants )
|
||||||
|
{
|
||||||
|
if ( SMESHDS_SubMesh* sm = helper.GetMeshDS()->MeshElements( *edge ))
|
||||||
|
nbSeg.push_back( sm->NbNodes() + 1 );
|
||||||
|
else
|
||||||
|
nbSeg.push_back( 0 );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// refine the result vector - make sides elual by length if
|
// refine the result vector - make sides elual by length if
|
||||||
|
Loading…
x
Reference in New Issue
Block a user