Different points of edge in case getting by TopExp_Explorer and getting by BRep_Tool::Curve

Hello Team,
Completely strange case. Is it really possible in OCCT (7.5) ?
Points p1 and pp1 (also p2 and pp2) are shifted to each other.

__________________________
double leT1 = 0.0;
double leT2 = 0.0;
Handle_Geom_Curve hCurve = BRep_Tool::Curve(edge, leT1, leT2);
if (hCurve.IsNull())
{
return {};
}

const gp_Pnt p1 = hCurve->Value(leT1);
const gp_Pnt p2 = hCurve->Value(leT2);
___________________________
And
___________________________
TopTools_ListOfVertex listVertices;
CollectVertices(edge, listVertices);
const gp_Pnt pp1 = BRep_Tool::Pnt(listVertices.First());
const gp_Pnt pp2 = BRep_Tool::Pnt(listVertices.Last());
___________________________

Thank you.
With respects, Eugene.

Eugene Zaliznyak's picture

Could it be because of SetFuzzyValue in boolean operation ?

Mikhail Sazonov's picture

It is completely correct if the distance from edge end point (according to its curve) to its end vertex is less than the vertex tolerance. And yes, it can be due to Fuzzy option of BO.

Eugene Zaliznyak's picture

Mikhail, I am surprised in one another moment. I set fuzzy value as 3.0, but result edge of Section operation has tolerance 5.81.

How could it be?

Thank you.
With respects, Eugene.

Mikhail Sazonov's picture

It can be an effect of cumulated error. When we allow one vertex raise up two 3, another vertex the same, and the distance between them is less than 6 these vertices are merged with the new vertex tolerance increased to cover both spheres. It is not an error of the algorithm.

Eugene Zaliznyak's picture

Thank you, Mikhail!
It is clear. So, SetFuzzyValue we can use near tolerance of geometry objects.

With respects, Eugene.