diff --git a/src/GCPnts/GCPnts_DistFunction.cxx b/src/GCPnts/GCPnts_DistFunction.cxx index bcbb706b65..e927f9ce60 100644 --- a/src/GCPnts/GCPnts_DistFunction.cxx +++ b/src/GCPnts/GCPnts_DistFunction.cxx @@ -24,7 +24,16 @@ GCPnts_DistFunction::GCPnts_DistFunction(const Adaptor3d_Curve& theCurve, myU1(U1), myU2(U2) { gp_Pnt P1 = theCurve.Value(U1), P2 = theCurve.Value(U2); - myLin = gp_Lin(P1, P2.XYZ() - P1.XYZ()); + if (P1.SquareDistance(P2) > gp::Resolution()) + { + myLin = gp_Lin(P1, P2.XYZ() - P1.XYZ()); + } + else + { + //For #28812 + theCurve.D0(U1 + .01*(U2-U1), P2); + myLin = gp_Lin(P1, P2.XYZ() - P1.XYZ()); + } } // //======================================================================= diff --git a/src/GCPnts/GCPnts_DistFunction2d.cxx b/src/GCPnts/GCPnts_DistFunction2d.cxx index 3940edddc4..2222da9803 100644 --- a/src/GCPnts/GCPnts_DistFunction2d.cxx +++ b/src/GCPnts/GCPnts_DistFunction2d.cxx @@ -25,7 +25,17 @@ GCPnts_DistFunction2d::GCPnts_DistFunction2d(const Adaptor2d_Curve2d& theCurve, myU1(U1), myU2(U2) { gp_Pnt2d P2d1 = theCurve.Value(U1), P2d2 = theCurve.Value(U2); - myLin = gp_Lin2d(P2d1, P2d2.XY() - P2d1.XY()); + if (P2d1.SquareDistance(P2d2) > gp::Resolution()) + { + myLin = gp_Lin2d(P2d1, P2d2.XY() - P2d1.XY()); + } + else + { + //For #28812 + theCurve.D0(U1 + .01*(U2 - U1), P2d2); + myLin = gp_Lin2d(P2d1, P2d2.XY() - P2d1.XY()); + } + } //=======================================================================