From 3e056d8e98b85d4b526397b966e2e69594921b4d Mon Sep 17 00:00:00 2001 From: msv Date: Sat, 28 Feb 2015 00:12:38 +0300 Subject: [PATCH] 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. --- src/IntCurve/IntCurve_IntConicConic_1.cxx | 15 ++++++---- tests/bugs/moddata_3/bug25876 | 36 +++++++++++++++++++++++ 2 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 tests/bugs/moddata_3/bug25876 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