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