double u2 = uv1.Coord(1);
myPar1[0] = Min( u1, u2 );
myPar2[0] = Max( u1, u2 );
+ myParIndex |= U_periodic;
}
else
{
double v2 = uv1.Coord(2);
myPar1[1] = Min( v1, v2 );
myPar2[1] = Max( v1, v2 );
+ myParIndex |= V_periodic;
}
}
else //if ( !isSeam )
TopoDS_Shape s0 = GetSubShapeByNode( nn[0], GetMeshDS() );
TopoDS_Shape s1 = GetSubShapeByNode( nn[1], GetMeshDS() );
TopoDS_Shape E = GetCommonAncestor( s0, s1, *myMesh, TopAbs_EDGE );
- if ( !E.IsNull() && !s0.IsSame( s1 ))
+ if ( !E.IsNull() && !s0.IsSame( s1 ) && E.Orientation() != TopAbs_INTERNAL )
{
// is E seam edge?
int nb = 0;
bool ok = true;
double u0 = GetNodeU( TopoDS::Edge( E ), nn[0], nn[1], &ok );
double u1 = GetNodeU( TopoDS::Edge( E ), nn[1], nn[0], &ok );
- // check that the 2 nodes are connected with a segment (IPAL53055)
- if ( SMESHDS_SubMesh* sm = GetMeshDS()->MeshElements( E ))
- if ( sm->NbElements() > 0 && !GetMeshDS()->FindEdge( nn[0], nn[1] ))
- ok = false;
+ if ( ok )
+ {
+ // check that the 2 nodes are connected with a segment (IPAL53055)
+ ok = false;
+ const SMDS_MeshElement* seg;
+ if ( SMESHDS_SubMesh* sm = GetMeshDS()->MeshElements( E ))
+ if (( sm->NbElements() > 0 ) &&
+ ( seg = GetMeshDS()->FindEdge( nn[0], nn[1] )))
+ ok = sm->Contains( seg );
+ }
if ( ok )
{
isReversed = ( u0 > u1 );
SMDS_ElemIteratorPtr faceIter( new TIterOnIter( faceIterVec ));
// a seacher to check if a volume is close to a concave face
- std::auto_ptr< SMESH_ElementSearcher > faceSearcher
+ SMESHUtils::Deleter< SMESH_ElementSearcher > faceSearcher
( SMESH_MeshAlgos::GetElementSearcher( *theHelper.GetMeshDS(), faceIter ));
// classifier
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.5 ));
+ isDistorted = ( Abs( hMedium ) > Abs( hVol * 0.75 ));
}
}
}