From: eap Date: Tue, 14 May 2019 14:11:13 +0000 (+0300) Subject: #16914: EDF 19401 - Wrong quadratic mesh (bis) X-Git-Tag: V9_4_0a1~33^2 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=f0f37f1fc7fbd05cd41cb532bb297897dcfc1725;p=modules%2Fsmesh.git #16914: EDF 19401 - Wrong quadratic mesh (bis) - don't force3DOutOfBoundary() for quadrangles and hexahedrons - don't force3DOutOfBoundary() for bad-shaped tetras --- diff --git a/src/SMESH/SMESH_MesherHelper.cxx b/src/SMESH/SMESH_MesherHelper.cxx index 390278faa..d6cd15d3e 100644 --- a/src/SMESH/SMESH_MesherHelper.cxx +++ b/src/SMESH/SMESH_MesherHelper.cxx @@ -4646,6 +4646,7 @@ namespace { // Structures used by FixQuadraticElements() const SMDS_MeshElement* f = faceIt->next(); if ( !faceSM->Contains( f ) || f->NbNodes() < 6 || // check quadratic triangles only + f->NbNodes() > 7 || !checkedFaces.insert( f ).second ) continue; @@ -4857,7 +4858,12 @@ namespace { // Structures used by FixQuadraticElements() gp_Pnt pMedium = SMESH_TNodeXYZ( linkIt->second ); double hMedium = faceNorm * gp_Vec( pOnFace0, pMedium ).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 ); + } } } }