if ( myCuts[ iC1 ][ iP1 ].SquareDistance( myCuts[ iC2 ][ iP2 ]) < tol * tol )
{
nbShared += 2;
- isSharedPnt[ i1 ] = isSharedPnt[ i2 ] = true;
+ if ( myCuts[ iC1 ][ 0 ].SquareDistance( myCuts[ iC1 ][ 1 ]) < tol * tol )
+ isSharedPnt[ iC1 * 2 ] = isSharedPnt[ iC1 * 2 + 1 ] = true;
+ else if ( myCuts[ iC2 ][ 0 ].SquareDistance( myCuts[ iC2 ][ 1 ]) < tol * tol )
+ isSharedPnt[ iC2 * 2 ] = isSharedPnt[ iC2 * 2 + 1 ] = true;
+ else
+ isSharedPnt[ i1 ] = isSharedPnt[ i2 ] = true;
}
}
}
// ---------------------------------
const double tol = Precision::Confusion();
+ const double angularTol = 1e-5;
std::vector< gp_XYZ > faceNormals;
SMESH_MeshAlgos::Intersector meshIntersector( theMesh, tol, faceNormals );
std::unique_ptr< SMESH_ElementSearcher> faceSearcher;
if ( intPoints.size() == 2 )
toCut = true;
else if ( isCylinderOnFace )
- toCut = cylAxis.Direction().IsParallel( edegDir, tol );
+ toCut = cylAxis.Direction().IsParallel( edegDir, angularTol );
else
{
SMESH_NodeXYZ nBetween;
// connect nodes into a ring
_pv.resize( nbNodes );
for ( size_t i = 1; i < nbNodes; ++i )
- _pv[i-1].SetNodeAndNext( nodes[i-1], _pv[i], i-1 );
+ _pv[i-1].SetNodeAndNext( nodes[i-1], _pv[i], /*index=*/i-1 );
_pv[ nbNodes-1 ].SetNodeAndNext( nodes[ nbNodes-1 ], _pv[0], nbNodes-1 );
// assure correctness of PolyVertex::_index as a node can encounter more than once
catch ( Standard_Failure ) {
return false;
}
+ double factor = 1.0, modulus = normal.Modulus();
+ if ( modulus < 1e-2 )
+ factor = 1. / sqrt( modulus );
for ( size_t i = 0; i < nbNodes; ++i )
{
gp_XYZ p = _pv[i]._nxyz - p0;
- _pv[i]._xy.SetX( axes.XDirection().XYZ() * p );
- _pv[i]._xy.SetY( axes.YDirection().XYZ() * p );
+ _pv[i]._xy.SetX( axes.XDirection().XYZ() * p * factor);
+ _pv[i]._xy.SetY( axes.YDirection().XYZ() * p * factor );
}
// compute minimal triangle area
double sumArea = 0;
- for ( size_t i = 0; i < nbNodes; ++i )
- sumArea += _pv[i].TriaArea();
+ if ( factor == 1.0 )
+ sumArea = modulus;
+ else
+ for ( size_t i = 0; i < nbNodes; ++i )
+ sumArea += _pv[i].TriaArea();
const double minArea = 1e-6 * sumArea / ( nbNodes - 2 );
// in a loop, find triangles with positive area and having no vertices inside