0027804: Two breps cause intersections to loop for too long/infinitely
authormsv <msv@opencascade.com>
Fri, 26 Aug 2016 14:33:46 +0000 (17:33 +0300)
committerbugmaster <bugmaster@opencascade.com>
Thu, 8 Sep 2016 08:22:40 +0000 (11:22 +0300)
commit3065019c997a4f243748442cae05ad547d119693
tree40c01fc6664ce1a01759a15ad26ece8663e4bfc2
parent84caaf81a04038123e0617ab0ec130de9aa5a9c0
0027804: Two breps cause intersections to loop for too long/infinitely

In ProjLib_ComputeApprox algorithm, compute correct parametric tolerance from the input 3D tolerance using surface resolution, in order to pass it to low-level 2D algorithm Approx_FitAndDivide2d (instantiation of the generic class Approx_ComputeCLine). Earlier 3D tolerance was used as parametric tolerance directly, which was a problem for surfaces with too small radius of curvature.

Also, eliminate redundant creation of the object of type AppParCurves_MultiCurve on each iteration in the method Approx_ComputeCLine::Compute.

The post treatment of the Edge/Edge intersections has been improved. Namely:
a. Making the procedure of sharing Edge/Edge intersection vertices consistent with intersection algorithm by enlarging bounding box of each vertex on half of Precision::Confusion();
b. Algorithm of computation of vertex tolerance (in order to cover tangent zone between Edges) has been changed for Line/Circle cases.

Test cases for issue CR27804
Adjusting test cases according to their new behavior.

Mark the test boolean/volumemaker/A8 as unstable between different versions of MSVS (2010 and 2013).
src/Approx/Approx_ComputeCLine.gxx
src/BOPAlgo/BOPAlgo_PaveFiller_3.cxx
src/ProjLib/ProjLib_ComputeApprox.cxx
tests/boolean/volumemaker/A8
tests/bugs/moddata_3/bug27804_1 [new file with mode: 0644]
tests/bugs/moddata_3/bug27804_2 [new file with mode: 0644]