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

0029682: Boolean intersection with fuzzy-option hangs

Algorithm of step re-computation has been improved.
This commit is contained in:
nbv
2018-04-09 16:05:30 +03:00
committed by bugmaster
parent 4f7d41eac3
commit 698faabef3
3 changed files with 62 additions and 4 deletions

View File

@@ -963,10 +963,21 @@ void IntWalk_PWalking::Perform(const TColStd_Array1OfReal& ParDep,
}
else
{
pasuv[0]*=0.5;
pasuv[1]*=0.5;
pasuv[2]*=0.5;
pasuv[3]*=0.5;
if (aStatus != IntWalk_StepTooSmall)
{
// Bug #0029682 (Boolean intersection with
// fuzzy-option hangs).
// If aStatus == IntWalk_StepTooSmall then
// the counter "LevelOfIterWithoutAppend" will
// be nulified in the future if the step is smaller
// (see "case IntWalk_StepTooSmall:" below).
// Here, we forbid this nulification and thereby provide out from
// the algorithm.
pasuv[0] *= 0.5;
pasuv[1] *= 0.5;
pasuv[2] *= 0.5;
pasuv[3] *= 0.5;
}
}
}
}

View File

@@ -149,6 +149,9 @@ public:
if (anIdx <= myTangentIdx)
{
myTangentIdx--;
if (myTangentIdx < 1)
myTangentIdx = 1;
}
line->RemovePoint(anIdx);
@@ -228,8 +231,14 @@ private:
Standard_Boolean close;
Standard_Boolean tgfirst;
Standard_Boolean tglast;
//! Index of point on the surface boundary.
//! It is used for transition computation
Standard_Integer myTangentIdx;
//! Tangent to WLine in the point with index myTangentIdx
gp_Dir tgdir;
Standard_Real fleche;
Standard_Real pasMax;
Standard_Real tolconf;