// we can create quadratic elements only if all elements
// created on sub-shapes of given shape are quadratic
myCreateQuadratic = true;
- mySeamShapeIds.clear();
- myDegenShapeIds.clear();
TopAbs_ShapeEnum subType( aSh.ShapeType()==TopAbs_FACE ? TopAbs_EDGE : TopAbs_FACE );
if ( aSh.ShapeType()==TopAbs_COMPOUND )
{
if ( !C2d.IsNull() ) {
double u = ( V == IthVertex( 0, edge )) ? f : l;
uv = C2d->Value( u );
- uvOK = true;
+ gp_Pnt p = GetSurface( F )->Value( uv );
+ uvOK = ( p.Distance( BRep_Tool::Pnt( V )) < getFaceMaxTol( F ));
break;
}
}
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;
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 );
+ }
}
}
}