1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-04 13:13:25 +03:00

0031407: [Regression to 7.3.0] Extrema does not process parallel circles correctly

Use correct ranges of circles when processing the concentric case. Repeat the range comparison 3 times shifting each time for a half-period to process the extrema between boundary points of arcs.
This commit is contained in:
azv
2020-03-05 11:07:37 +03:00
committed by bugmaster
parent e5c11edd7b
commit d6e18114eb
4 changed files with 53 additions and 5 deletions

View File

@@ -553,7 +553,7 @@ void Extrema_ExtCC::PrepareParallelResult(const Standard_Real theUt11,
if ((aRange.Delta() > Precision::Angular()) &&
((aPar2 - aPar1) < Precision::Angular()))
{
aPar1 -= aPeriod;
aPar2 += aPeriod;
}
}
@@ -562,11 +562,13 @@ void Extrema_ExtCC::PrepareParallelResult(const Standard_Real theUt11,
Standard_Real aMinSquareDist = RealLast();
aProjRng1.Add(aPar1 - M_PI);
aProjRng1.Add(aPar2 - M_PI);
for (Standard_Integer i = 0; i < 2; i++)
aProjRng1.Add(aPar1 - aPeriod);
aProjRng1.Add(aPar2 - aPeriod);
for (Standard_Integer i = 0; i < 3; i++)
{
// Repeat computation twice
// Repeat computation three times, shifting the range to PI on each step,
// to be able to find if the concentric arcs ranges are intersected in just one parameter
// (lower or upper boundary).
Bnd_Range aRng = aProjRng1;
aRng.Common(aRange);