From 3062fdf9935113bcb4e04e5243718840eecf819e Mon Sep 17 00:00:00 2001 From: msv Date: Thu, 12 Mar 2015 12:30:18 +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 Correct test case Period 'jump" handling algorithm changed. --- src/IntCurve/IntCurve_IntConicConic_1.cxx | 16 +++++----- tests/bugs/moddata_3/bug25876 | 36 +++++++++++++++++++++++ 2 files changed, 43 insertions(+), 9 deletions(-) create mode 100755 tests/bugs/moddata_3/bug25876 diff --git a/src/IntCurve/IntCurve_IntConicConic_1.cxx b/src/IntCurve/IntCurve_IntConicConic_1.cxx index 825d0ff2b8..aeed78226f 100644 --- a/src/IntCurve/IntCurve_IntConicConic_1.cxx +++ b/src/IntCurve/IntCurve_IntConicConic_1.cxx @@ -719,7 +719,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; @@ -732,8 +736,8 @@ void IntCurve_IntConicConic::Perform(const gp_Circ2d& Circle1 deltat = C2Domain.Bsup-C2Domain.Binf; if(deltat>=PIpPI) { - deltat=PIpPI-1e-14; - } + deltat=NextAfter(PIpPI, 0.); + } while(C2Domain.Binf >= PIpPI) C2Domain.Binf-=PIpPI; @@ -1027,19 +1031,13 @@ void IntCurve_IntConicConic::Perform(const gp_Circ2d& Circle1 if(Opposite) { - if(nbsol!=3) - { if(C2inf