mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-14 13:30:48 +03:00
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.
This commit is contained in:
@@ -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,7 +736,7 @@ 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)
|
||||
@@ -1026,21 +1030,15 @@ void IntCurve_IntConicConic::Perform(const gp_Circ2d& Circle1
|
||||
//--------------------------------------------------
|
||||
|
||||
if(Opposite)
|
||||
{
|
||||
if(nbsol!=3)
|
||||
{
|
||||
if(C2inf<C2sup)
|
||||
C2inf+=PIpPI;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(nbsol!=3)
|
||||
{
|
||||
if(C2sup<C2inf)
|
||||
C2sup+=PIpPI;
|
||||
}
|
||||
}
|
||||
|
||||
IntRes2d_IntersectionPoint NewPoint2(P1b,C1sup,C2sup,T1b,T2b,Standard_False);
|
||||
IntRes2d_IntersectionSegment NewSeg(NewPoint1,NewPoint2,Opposite,Standard_False);
|
||||
|
36
tests/bugs/moddata_3/bug25876
Executable file
36
tests/bugs/moddata_3/bug25876
Executable file
@@ -0,0 +1,36 @@
|
||||
puts "============"
|
||||
puts "CR25876"
|
||||
puts "==========="
|
||||
puts ""
|
||||
###############################################################################
|
||||
# Geom2dAPI_InterCurveCurve returns only one intersection point instead of two intersection points
|
||||
###############################################################################
|
||||
|
||||
restore [locate_data_file bug25876_oc_test_firstcircle.brep] e1
|
||||
restore [locate_data_file bug25876_oc_test_secondcircle.brep] e2
|
||||
|
||||
explode e1
|
||||
explode e2
|
||||
|
||||
mk2dcurve c1 e1_1
|
||||
mk2dcurve c2 e2_1
|
||||
|
||||
set inter1 [2dintersect c1 c2 1e-3]
|
||||
set int1 [regexp {Intersection point 2} ${inter1}]
|
||||
if { ${int1} == 0 } {
|
||||
puts "Error : Second intersection is not found"
|
||||
}
|
||||
|
||||
#smallview -2D-
|
||||
view 1 -2D- 728 450 400 400
|
||||
2dfit
|
||||
xwd ${imagedir}/${test_image}_1.png
|
||||
donly c1 c2
|
||||
|
||||
set inter2 [2dintersect c1 c2 1e-7]
|
||||
set int2 [regexp {Intersection point 2} ${inter2}]
|
||||
if { ${int2} == 0 } {
|
||||
puts "Error : Second intersection is not found"
|
||||
}
|
||||
|
||||
xwd ${imagedir}/${test_image}_2.png
|
Reference in New Issue
Block a user