0022907: The function 'distmini' produces wrong result.
authorGKA <>
Fri, 17 Feb 2012 12:35:32 +0000 (12:35 +0000)
committerbugmaster <bugmaster@opencascade.com>
Mon, 5 Mar 2012 15:32:55 +0000 (19:32 +0400)
src/Extrema/Extrema_FuncExtPC.gxx

index e6a87ae..d0dc5c2 100755 (executable)
@@ -1,5 +1,5 @@
 #include <Standard_TypeMismatch.hxx>
-  
+#include <Precision.hxx>
 #define delta 1.e-9
 #define Tol   1.e-20
 
@@ -73,16 +73,23 @@ Standard_Boolean Extrema_FuncExtPC::Value (const Standard_Real U, Standard_Real&
   Tool::D1(*((Curve*)myC),myU,myPc,D1c);
   Standard_Real Ndu = D1c.Magnitude();
   if (Ndu <= Tol) { // Cas Singulier (PMN 22/04/1998)
-    Pnt P1, P2;
-    P2 = Tool::Value(*((Curve*)myC),myU+delta);
-    P1 = Tool::Value(*((Curve*)myC),myU-delta);
-    Vec V(P1,P2);
-    D1c = V;
-    Ndu = D1c.Magnitude();
-    if (Ndu <= Tol) {
-      return Standard_False;
+       Pnt P1, P2;
+       P2 = Tool::Value(*((Curve*)myC),myU + delta);
+       P1 = Tool::Value(*((Curve*)myC),myU - delta);
+       Vec V(P1,P2);
+       D1c = V;
+       Ndu = D1c.Magnitude();
+       if (Ndu <= Tol) {
+         Vec aD2;
+         Tool::D2(*((Curve*)myC),myU,myPc,D1c,aD2);    
+         Ndu = aD2.Magnitude();
+        
+         if(Ndu  <= Tol)
+          return Standard_False;
+         D1c = aD2;    
     }
   }
+  
   Vec PPc (myP,myPc);
   F = PPc.Dot(D1c)/Ndu;
   return Standard_True;