0028812: Regression. bugs modalg_6 bug28468_2 test case is crashed if CSF_FPE set...
authorifv <ifv@opencascade.com>
Tue, 6 Jun 2017 06:56:24 +0000 (09:56 +0300)
committerbugmaster <bugmaster@opencascade.com>
Fri, 9 Jun 2017 09:58:56 +0000 (12:58 +0300)
Test the possibility of line creation is added

src/GCPnts/GCPnts_DistFunction.cxx
src/GCPnts/GCPnts_DistFunction2d.cxx

index bcbb706..e927f9c 100644 (file)
@@ -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());
+  }
 }
 //
 //=======================================================================
index 3940edd..2222da9 100644 (file)
@@ -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());
+  }
+
 }
 
 //=======================================================================