]> OCCT Git - occt.git/commitdiff
0032291: Modeling Algorithms - General Fuse produces wrong number of solids
authorjgv <jgv@opencascade.com>
Sat, 8 May 2021 16:29:46 +0000 (19:29 +0300)
committerbugmaster <bugmaster@opencascade.com>
Fri, 14 May 2021 17:43:59 +0000 (20:43 +0300)
Modify method IntWalk_IWalking::ComputeCloseLine: add new flag "isOnDegeneratedBorder" to reach the border successfully.

src/IntWalk/IntWalk_IWalking_4.gxx
tests/bugs/modalg_7/bug27390_1
tests/bugs/modalg_7/bug27390_2
tests/bugs/modalg_7/bug32291 [new file with mode: 0644]

index 9558bb1c1d71af10407d57345d4fda7763c837dd..c2b236a33a04bff268968e44cc50471cde6969e8 100644 (file)
@@ -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;
index 7839fb43e8ed4a7d3c344615907b6eeb535a5b35..2ec6521b9d3211ed86c3c66dd58e0000a657b2b6 100755 (executable)
@@ -19,16 +19,22 @@ 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]
+
+if { ${tolres} > 6.e-6} {
+   puts "Error: bad tolerance of result"
+}
+
 checkview -display result -3d -path ${imagedir}/${test_image}-3d.png
 checkview -display result -2d -path ${imagedir}/${test_image}-2d.png
index 3338c177563c0f029943d688e4665e92120ca59b..c1b41651afea0edbf9e0672ec3220bf4a3fd2373 100755 (executable)
@@ -19,16 +19,22 @@ 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]
+
+if { ${tolres} > 6.e-6} {
+   puts "Error: bad tolerance of 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 (file)
index 0000000..fb12577
--- /dev/null
@@ -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