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:
@@ -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);
|
||||
|
Reference in New Issue
Block a user