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:
parent
4f7d41eac3
commit
698faabef3
@ -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 ==
|
||||||
|
@ -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;
|
||||||
|
38
tests/perf/modalg/bug29682
Normal file
38
tests/perf/modalg/bug29682
Normal 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
|
Loading…
x
Reference in New Issue
Block a user