22362: EDF SMESH: Quadrangle (mapping) algorithm: enforced vertices

fix for a case of http://www.salome-platform.org/forum/forum_10/863809970#478269857
This commit is contained in:
eap 2014-01-23 12:46:37 +00:00
parent c94d606fe3
commit f202478154

View File

@ -317,17 +317,25 @@ bool StdMeshers_Quadrangle_2D::computeTriangles(SMESH_Mesh& aMesh,
if ( !setNormalizedGrid( quad )) if ( !setNormalizedGrid( quad ))
return false; return false;
if ( quad->nbNodeOut( QUAD_BOTTOM_SIDE ))
{
splitQuad( quad, 0, 1 );
}
if ( quad->nbNodeOut( QUAD_TOP_SIDE )) if ( quad->nbNodeOut( QUAD_TOP_SIDE ))
{ {
splitQuad( quad, 0, quad->jSize-2 ); splitQuad( quad, 0, quad->jSize-2 );
} }
if ( quad->nbNodeOut( QUAD_BOTTOM_SIDE )) // this should not happen
{
splitQuad( quad, 0, 1 );
}
FaceQuadStruct::Ptr newQuad = myQuadList.back(); FaceQuadStruct::Ptr newQuad = myQuadList.back();
if ( quad != newQuad ) // split done if ( quad != newQuad ) // split done
{ {
{
FaceQuadStruct::Ptr botQuad = // a bottom part
( quad->side[ QUAD_LEFT_SIDE ].from == 0 ) ? quad : newQuad;
if ( botQuad->nbNodeOut( QUAD_LEFT_SIDE ) > 0 )
botQuad->side[ QUAD_LEFT_SIDE ].to += botQuad->nbNodeOut( QUAD_LEFT_SIDE );
else if ( botQuad->nbNodeOut( QUAD_RIGHT_SIDE ) > 0 )
botQuad->side[ QUAD_RIGHT_SIDE ].to += botQuad->nbNodeOut( QUAD_RIGHT_SIDE );
}
// make quad be a greatest one // make quad be a greatest one
if ( quad->side[ QUAD_LEFT_SIDE ].NbPoints() == 2 || if ( quad->side[ QUAD_LEFT_SIDE ].NbPoints() == 2 ||
quad->side[ QUAD_RIGHT_SIDE ].NbPoints() == 2 ) quad->side[ QUAD_RIGHT_SIDE ].NbPoints() == 2 )