Algorithm of step re-computation has been improved.
}
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;
+ }
}
}
}
if (anIdx <= myTangentIdx)
{
myTangentIdx--;
+
+ if (myTangentIdx < 1)
+ myTangentIdx = 1;
}
line->RemovePoint(anIdx);
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;
--- /dev/null
+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