From: msv Date: Fri, 27 Feb 2015 21:12:38 +0000 (+0300) Subject: 0025876: Geom2dAPI_InterCurveCurve returns only one intersection point instead of... X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=3e056d8e98b85d4b526397b966e2e69594921b4d;p=occt-copy.git 0025876: Geom2dAPI_InterCurveCurve returns only one intersection point instead of two intersection points Extend domain of circle to include all possible solutions. Test case for issue CR25876 Period 'jump" handling algorithm changed. --- diff --git a/src/IntCurve/IntCurve_IntConicConic_1.cxx b/src/IntCurve/IntCurve_IntConicConic_1.cxx index 65b557619b..53e56a3103 100644 --- a/src/IntCurve/IntCurve_IntConicConic_1.cxx +++ b/src/IntCurve/IntCurve_IntConicConic_1.cxx @@ -718,7 +718,11 @@ void IntCurve_IntConicConic::Perform(const gp_Circ2d& Circle1 PeriodicInterval C1Domain(DomainCirc1); //-- On se ramene entre 0 et 2PI Standard_Real deltat = C1Domain.Bsup-C1Domain.Binf; - if(deltat>=PIpPI) { deltat=PIpPI-1e-14; } + if(deltat>=PIpPI) + { + // make deltat not including the upper limit + deltat=NextAfter(PIpPI, 0.); + } while(C1Domain.Binf >= PIpPI) C1Domain.Binf-=PIpPI; while(C1Domain.Binf < 0.0) C1Domain.Binf+=PIpPI; @@ -726,7 +730,10 @@ void IntCurve_IntConicConic::Perform(const gp_Circ2d& Circle1 PeriodicInterval C2Domain(DomainCirc2); deltat = C2Domain.Bsup-C2Domain.Binf; - if(deltat>=PIpPI) { deltat=PIpPI-1e-14; } + if(deltat>=PIpPI) + { + deltat=NextAfter(PIpPI, 0.); + } while(C2Domain.Binf >= PIpPI) C2Domain.Binf-=PIpPI; while(C2Domain.Binf < 0.0) C2Domain.Binf+=PIpPI; @@ -935,14 +942,10 @@ void IntCurve_IntConicConic::Perform(const gp_Circ2d& Circle1 //-------------------------------------------------- if(Opposite) { - if(nbsol!=3) { if(C2inf