#16914: EDF 19401 - Wrong quadratic mesh (bis)

- don't force3DOutOfBoundary() for quadrangles and hexahedrons
- don't force3DOutOfBoundary() for bad-shaped tetras
This commit is contained in:
eap 2019-05-14 17:11:13 +03:00
parent e63b88c7f3
commit f0f37f1fc7

View File

@ -4646,6 +4646,7 @@ namespace { // Structures used by FixQuadraticElements()
const SMDS_MeshElement* f = faceIt->next(); const SMDS_MeshElement* f = faceIt->next();
if ( !faceSM->Contains( f ) || if ( !faceSM->Contains( f ) ||
f->NbNodes() < 6 || // check quadratic triangles only f->NbNodes() < 6 || // check quadratic triangles only
f->NbNodes() > 7 ||
!checkedFaces.insert( f ).second ) !checkedFaces.insert( f ).second )
continue; continue;
@ -4857,7 +4858,12 @@ namespace { // Structures used by FixQuadraticElements()
gp_Pnt pMedium = SMESH_TNodeXYZ( linkIt->second ); gp_Pnt pMedium = SMESH_TNodeXYZ( linkIt->second );
double hMedium = faceNorm * gp_Vec( pOnFace0, pMedium ).XYZ(); double hMedium = faceNorm * gp_Vec( pOnFace0, pMedium ).XYZ();
double hVol = faceNorm * gp_Vec( pOnFace0, pInSolid ).XYZ(); double hVol = faceNorm * gp_Vec( pOnFace0, pInSolid ).XYZ();
isDistorted = ( Abs( hMedium ) > Abs( hVol * 0.75 )); if ( Abs( hMedium ) > Abs( hVol * 0.75 ))
{
SMESH_TNodeXYZ pI( nOnFace[i]), pJ( nOnFace[j]);
double angle = gp_Vec( pI, pMedium ).Angle( gp_Vec( pI, pJ ));
isDistorted = ( angle > M_PI / 20 );
}
} }
} }
} }