From: nbv Date: Mon, 9 Apr 2018 13:05:30 +0000 (+0300) Subject: 0029682: Boolean intersection with fuzzy-option hangs X-Git-Tag: V7_3_0_beta~1 X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=698faabef38867ea5e311f9710d8d06080c6887c;p=occt.git 0029682: Boolean intersection with fuzzy-option hangs Algorithm of step re-computation has been improved. --- diff --git a/src/IntWalk/IntWalk_PWalking.cxx b/src/IntWalk/IntWalk_PWalking.cxx index a1a3feb928..1387158c26 100644 --- a/src/IntWalk/IntWalk_PWalking.cxx +++ b/src/IntWalk/IntWalk_PWalking.cxx @@ -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; + } } } } diff --git a/src/IntWalk/IntWalk_PWalking.hxx b/src/IntWalk/IntWalk_PWalking.hxx index 9fe04b72be..e3ac4bbc3d 100644 --- a/src/IntWalk/IntWalk_PWalking.hxx +++ b/src/IntWalk/IntWalk_PWalking.hxx @@ -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; diff --git a/tests/perf/modalg/bug29682 b/tests/perf/modalg/bug29682 new file mode 100644 index 0000000000..066e4bd780 --- /dev/null +++ b/tests/perf/modalg/bug29682 @@ -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 \ No newline at end of file