diff --git a/src/IntTools/IntTools_BeanFaceIntersector.cxx b/src/IntTools/IntTools_BeanFaceIntersector.cxx index b5095096eb..7cba64dc58 100644 --- a/src/IntTools/IntTools_BeanFaceIntersector.cxx +++ b/src/IntTools/IntTools_BeanFaceIntersector.cxx @@ -1154,7 +1154,6 @@ void IntTools_BeanFaceIntersector::ComputeRangeFromStartPoint(const Standard_Boo Standard_Boolean isboundaryindex = Standard_False; Standard_Boolean isvalidindex = Standard_True; - while((aDelta >= aMinDelta) && (loopcounter <= 10)) { Standard_Boolean pointfound = Standard_False; @@ -1166,7 +1165,7 @@ void IntTools_BeanFaceIntersector::ComputeRangeFromStartPoint(const Standard_Boo if(anExtrema.IsDone()) { if(anExtrema.SquareDistance() < myCriteria * myCriteria) { Extrema_POnSurf aPOnSurf = anExtrema.Point(); - aPOnSurf.Parameter(U, V); + aPOnSurf.Parameter(U, V); pointfound = Standard_True; } } @@ -1182,13 +1181,11 @@ void IntTools_BeanFaceIntersector::ComputeRangeFromStartPoint(const Standard_Boo break; } else { - aDeltaRestrictor = aDelta; + aDeltaRestrictor *= 0.5; } - // if point found decide to increase aDelta using derivative of distance function - // - - aDelta = (pointfound) ? (aDelta * 2.) : (aDelta * 0.5); + // Increase step if point was found, decrease otherwise + aDelta *= (pointfound ? 2. : 0.5); aDelta = (aDelta < aDeltaRestrictor) ? aDelta : aDeltaRestrictor; aCurPar = (ToIncreaseParameter) ? (aPrevPar + aDelta) : (aPrevPar - aDelta); @@ -1197,7 +1194,7 @@ void IntTools_BeanFaceIntersector::ComputeRangeFromStartPoint(const Standard_Boo // prevent infinite loop when (aPrevPar +/- aDelta) == aPrevPar == 0. // - if( aCurPar == aPrevPar ) + if (Abs (aCurPar - aPrevPar) < myCurveResolution) break; BoundaryCondition = (ToIncreaseParameter) ? (aCurPar > aCurrentRange.Last()) : (aCurPar < aCurrentRange.First()); diff --git a/tests/perf/modalg/bug29144 b/tests/perf/modalg/bug29144 new file mode 100644 index 0000000000..72dc0f7888 --- /dev/null +++ b/tests/perf/modalg/bug29144 @@ -0,0 +1,27 @@ +puts "========" +puts "0029144: Modeling Algorithms - BOP PaveFiller hangs in some case" +puts "========" +puts "" + +puts "TODO OCC29145 ALL : Faulty shapes in variables faulty_1 to faulty_" + +bclearobjects; +bcleartools; + +restore [locate_data_file bug29093_hung3.brep] a +explode a So +baddobjects a_7 +baddtools a_11 + +dchrono cr restart + +bfillds +bbuild result + +dchrono cr stop counter bbuild + +checkshape result +checkprops result -s 1313890 -v 46778600 +checknbshapes result -vertex 9 -edge 20 -wire 12 -face 12 -shell 3 -solid 3 + +checkview -display result -2d -path ${imagedir}/${test_image}.png