diff --git a/src/IntWalk/IntWalk_IWalking_4.gxx b/src/IntWalk/IntWalk_IWalking_4.gxx index 2add80f20e..a14b4d47e2 100644 --- a/src/IntWalk/IntWalk_IWalking_4.gxx +++ b/src/IntWalk/IntWalk_IWalking_4.gxx @@ -178,7 +178,8 @@ void IntWalk_IWalking::ComputeCloseLine(const TColStd_SequenceOfReal& Umult, #ifdef CHRONO Chronrsnld.Stop(); #endif - + Standard_Boolean isOnDegeneratedBorder = Standard_False; + if (Cadre) { // update of limits. BornInf(1) = Um;BornSup(1) = UM;BornInf(2) = Vm;BornSup(2) = VM; } @@ -262,6 +263,7 @@ void IntWalk_IWalking::ComputeCloseLine(const TColStd_SequenceOfReal& Umult, / (uv[aCoordIdx - 1] - uvprev[aCoordIdx - 1]) ); Standard_Integer aFixIdx = aCoordIdx == 1? 2 : 1; // Fixing index; Uvap(aFixIdx) = uv[aFixIdx - 1] + (uv[aFixIdx - 1] - uvprev[aFixIdx - 1]) * aScaleCoeff; + isOnDegeneratedBorder = Standard_True; } } } @@ -307,6 +309,8 @@ void IntWalk_IWalking::ComputeCloseLine(const TColStd_SequenceOfReal& Umult, if (N <= 0) { // jag 941017 MakeWalkingPoint(2,Uvap(1),Uvap(2),Func,Psol); Tgtend = Func.IsTangent(); // jag 940616 + if (isOnDegeneratedBorder) + Tgtend = Standard_True; N = -N; } Arrive = (wd2[I].etat == 12); // the line is open @@ -315,6 +319,9 @@ void IntWalk_IWalking::ComputeCloseLine(const TColStd_SequenceOfReal& Umult, aStatus = TestDeflection(Func, Arrive,Uvap,StatusPrecedent, NbDivision,PasC,StepSign); + if (isOnDegeneratedBorder && Tgtend) + aStatus = IntWalk_ArretSurPoint; + StatusPrecedent = aStatus; if (aStatus == IntWalk_PasTropGrand) {// division of the step Arrive = Standard_False; diff --git a/tests/bugs/modalg_7/bug27390_1 b/tests/bugs/modalg_7/bug27390_1 index 7839fb43e8..c28d2d4ebf 100755 --- a/tests/bugs/modalg_7/bug27390_1 +++ b/tests/bugs/modalg_7/bug27390_1 @@ -19,16 +19,18 @@ checkprops result -s 8206.54 set nbshapes_expected " Number of shapes in shape VERTEX : 5 - EDGE : 9 + EDGE : 8 WIRE : 4 FACE : 4 SHELL : 1 SOLID : 1 COMPSOLID : 0 COMPOUND : 1 - SHAPE : 25 + SHAPE : 24 " checknbshapes result -ref ${nbshapes_expected} -t -m "Boolean operations common" +set tolres [checkmaxtol result] + checkview -display result -3d -path ${imagedir}/${test_image}-3d.png checkview -display result -2d -path ${imagedir}/${test_image}-2d.png diff --git a/tests/bugs/modalg_7/bug27390_2 b/tests/bugs/modalg_7/bug27390_2 index 3338c17756..61231570de 100755 --- a/tests/bugs/modalg_7/bug27390_2 +++ b/tests/bugs/modalg_7/bug27390_2 @@ -19,16 +19,18 @@ checkprops result -s 34566 set nbshapes_expected " Number of shapes in shape VERTEX : 13 - EDGE : 21 + EDGE : 20 WIRE : 8 FACE : 8 SHELL : 1 SOLID : 1 COMPSOLID : 0 COMPOUND : 1 - SHAPE : 53 + SHAPE : 52 " checknbshapes result -ref ${nbshapes_expected} -t -m "Boolean operations cut" +set tolres [checkmaxtol result] + checkview -display result -3d -path ${imagedir}/${test_image}-3d.png checkview -display result -2d -path ${imagedir}/${test_image}-2d.png diff --git a/tests/bugs/modalg_7/bug32291 b/tests/bugs/modalg_7/bug32291 new file mode 100644 index 0000000000..fb12577aaa --- /dev/null +++ b/tests/bugs/modalg_7/bug32291 @@ -0,0 +1,29 @@ +puts "=======================================================" +puts " 0032291: General Fuse produces wrong number of solids" +puts "=======================================================" +puts "" + +restore [locate_data_file bug32291.brep] s + +explode s +baddobjects s_1 +baddtools s_2 s_3 s_4 s_5 s_6 s_7 s_8 +bfillds +bbuild result + +checkshape result + +checknbshapes result -vertex 79 -edge 176 -wire 112 -face 112 -shell 18 -solid 18 + +set tolres [checkmaxtol result] + +if { ${tolres} > 7.e-5} { + puts "Error: bad tolerance of result" +} + +axo +clear +explode result So +fit + +checkview -screenshot -2d -path ${imagedir}/${test_image}.png