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