From 408ecc39f369e10e24ff6833c06669ebc66dd6f9 Mon Sep 17 00:00:00 2001 From: GKA <> Date: Fri, 17 Feb 2012 12:35:32 +0000 Subject: [PATCH] 0022907: The function 'distmini' produces wrong result. --- src/Extrema/Extrema_FuncExtPC.gxx | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/Extrema/Extrema_FuncExtPC.gxx b/src/Extrema/Extrema_FuncExtPC.gxx index e6a87ae532..d0dc5c2a0a 100755 --- a/src/Extrema/Extrema_FuncExtPC.gxx +++ b/src/Extrema/Extrema_FuncExtPC.gxx @@ -1,5 +1,5 @@ #include - +#include #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; -- 2.20.1