1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-09 13:22:24 +03:00

0029144: Modeling Algorithms - BOP PaveFiller hangs in some case

Changed decreasing aDeltaRestrictor to division by 2 instead of value assignment to aDelta if point does not found.
Changed wrong comparison of two Standard_Real values.
This commit is contained in:
akaftasev
2022-11-09 15:00:30 +03:00
parent d404757de0
commit a5860f47ca
2 changed files with 32 additions and 8 deletions

View File

@@ -1154,7 +1154,6 @@ void IntTools_BeanFaceIntersector::ComputeRangeFromStartPoint(const Standard_Boo
Standard_Boolean isboundaryindex = Standard_False; Standard_Boolean isboundaryindex = Standard_False;
Standard_Boolean isvalidindex = Standard_True; Standard_Boolean isvalidindex = Standard_True;
while((aDelta >= aMinDelta) && (loopcounter <= 10)) { while((aDelta >= aMinDelta) && (loopcounter <= 10)) {
Standard_Boolean pointfound = Standard_False; Standard_Boolean pointfound = Standard_False;
@@ -1166,7 +1165,7 @@ void IntTools_BeanFaceIntersector::ComputeRangeFromStartPoint(const Standard_Boo
if(anExtrema.IsDone()) { if(anExtrema.IsDone()) {
if(anExtrema.SquareDistance() < myCriteria * myCriteria) { if(anExtrema.SquareDistance() < myCriteria * myCriteria) {
Extrema_POnSurf aPOnSurf = anExtrema.Point(); Extrema_POnSurf aPOnSurf = anExtrema.Point();
aPOnSurf.Parameter(U, V); aPOnSurf.Parameter(U, V);
pointfound = Standard_True; pointfound = Standard_True;
} }
} }
@@ -1182,13 +1181,11 @@ void IntTools_BeanFaceIntersector::ComputeRangeFromStartPoint(const Standard_Boo
break; break;
} }
else { else {
aDeltaRestrictor = aDelta; aDeltaRestrictor *= 0.5;
} }
// if point found decide to increase aDelta using derivative of distance function // Increase step if point was found, decrease otherwise
// aDelta *= (pointfound ? 2. : 0.5);
aDelta = (pointfound) ? (aDelta * 2.) : (aDelta * 0.5);
aDelta = (aDelta < aDeltaRestrictor) ? aDelta : aDeltaRestrictor; aDelta = (aDelta < aDeltaRestrictor) ? aDelta : aDeltaRestrictor;
aCurPar = (ToIncreaseParameter) ? (aPrevPar + aDelta) : (aPrevPar - aDelta); 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. // prevent infinite loop when (aPrevPar +/- aDelta) == aPrevPar == 0.
// //
if( aCurPar == aPrevPar ) if (Abs (aCurPar - aPrevPar) < myCurveResolution)
break; break;
BoundaryCondition = (ToIncreaseParameter) ? (aCurPar > aCurrentRange.Last()) : (aCurPar < aCurrentRange.First()); BoundaryCondition = (ToIncreaseParameter) ? (aCurPar > aCurrentRange.Last()) : (aCurPar < aCurrentRange.First());

View File

@@ -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