1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-16 10:08:36 +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,6 +963,16 @@ void IntWalk_PWalking::Perform(const TColStd_Array1OfReal& ParDep,
} }
else else
{ {
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[0] *= 0.5;
pasuv[1] *= 0.5; pasuv[1] *= 0.5;
pasuv[2] *= 0.5; pasuv[2] *= 0.5;
@ -970,6 +980,7 @@ void IntWalk_PWalking::Perform(const TColStd_Array1OfReal& ParDep,
} }
} }
} }
}
//============================================================ //============================================================
//== T r a i t e m e n t s u r S t a t u s == //== T r a i t e m e n t s u r S t a t u s ==

View File

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

View File

@ -0,0 +1,38 @@
puts "========"
puts "OCC29682"
puts "========"
puts ""
#################################################
# Boolean intersection with fuzzy-option hangs
#################################################
restore [locate_data_file bug29682_f1.brep] s1
restore [locate_data_file bug29682_f2.brep] s2
copy s1 f1
copy s2 f2
bfuzzyvalue 0.0
dchrono h1 restart
bsection r1 f1 f2
dchrono h1 stop counter BSectionNoFV
checknbshapes r1 -vertex 2 -edge 1
checkprops r1 -l 2995.33
copy s1 f1
copy s2 f2
bfuzzyvalue 0.2
dchrono h2 restart
bsection r2 f1 f2
dchrono h2 stop counter BSectionFV
checknbshapes r2 -vertex 2 -edge 1
checkprops r2 -l 2995.33
smallview
don s1 s2 r2
fit
checkview -screenshot -2d -path ${imagedir}/${test_image}.png