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

0028222: Intersection of two cylinders fails

1. The reason of exception has been eliminated.

2. Algorithm in IntPatch_WLineTool::JoinWLines(...) method has been modified in order to forbid join curves in the point where more than two intersection lines meet. More over, joining is forbidden if local curvature in the connection point is too big (see function CheckArgumentsToJoin(...) in the file IntPatch_WLineTool.cxx).

3. Interface of IntPatch_WLineTool::JoinWLines(...) method has been modified in order to reduce number of arguments.

4. Small corrections in IsSeamOrBound(...) static function has been made. Namely, check has been added if two boundaries are in the same period region but are too far each to other (see IntPatch_WLineTool.cxx, IsSeamOrBound(...) function, line # 532).

5. "Reversed" flag has been made local. Now, it is pure local characteristic: the algorithm decides itself, shall we reverse the argument order. This correction makes the algorithm more commutative (see issue #25404). However, IntPatch_WLineTool::JoinWLines(...) method can return non-commutative result.

6. Algorithm of searching small intersection curves has been improved.

7. New methods have been added in Bnd_Range class.

Some test cases have been adjusted according to their new behavior.

1. tests\bugs\modalg_6\bug26310_3
   tests\bugs\modalg_6\bug26310_4
   tests\bugs\moddata_2\bug235
   tests\perf\modalg\bug26310_1
   tests\bugs\modalg_5\bug24915

Logic of these cases has been changed. Mover over, additional check has been added in "bug26310_1" test case. Therefore, its performance will be slower than on the current MASTER.

2. tests\bugs\modalg_5\bug25292*

Scripts have been rewritten in order to make it more readable. Logic of these cases has not been changed.
This commit is contained in:
nbv
2016-12-15 17:22:00 +03:00
committed by bugmaster
parent 0609d8ee53
commit 261b7d9e8a
36 changed files with 1739 additions and 1426 deletions

View File

@@ -49,6 +49,22 @@ static Standard_Real PIPI = M_PI + M_PI;
//=======================================================================
//function : InPeriod
//purpose : Value theULast is never returned.
// Example of some case (checked on WIN64 platform)
// with some surface having period 2*PI = 6.2831853071795862.
// Let theUFirst be equal to 6.1645624650899675. Then,
// theULast must be equal to
// 6.1645624650899675+6.2831853071795862=12.4477477722695537.
//
// However, real result is 12.447747772269555.
// Therefore, new period value to adjust will be equal to
// 12.447747772269555-6.1645624650899675=6.2831853071795871.
//
// As we can see, (6.2831853071795871 != 6.2831853071795862).
//
// According to above said, this method should be used carefully.
// In order to increase reliability of this method, input arguments
// needs to be replaced with following:
// (theU, theUFirst, thePeriod). theULast parameter is excess.
//=======================================================================
Standard_Real ElCLib::InPeriod(const Standard_Real theU,
const Standard_Real theUFirst,