Salome HOME
Bug 0020057: EDF GEOM: Impossible to explode an object to faces. Infinite loop.
authorjfa <jfa@opencascade.com>
Fri, 21 Nov 2008 07:37:05 +0000 (07:37 +0000)
committerjfa <jfa@opencascade.com>
Fri, 21 Nov 2008 07:37:05 +0000 (07:37 +0000)
src/GEOMImpl/GEOMImpl_IShapesOperations.cxx

index a3f2353dceb5375602c794214df687a0bd789246..89814e895da32577b5581d54f6d85caac2fbd2ce 100644 (file)
@@ -3130,6 +3130,7 @@ void GEOMImpl_IShapesOperations::SortShapes(TopTools_ListOfShape& SL)
     Sort = Standard_False;
     for (Index=1; Index < MaxShapes; Index++)
     {
+      exchange = Standard_False;
       Standard_Real dMidXYZ = MidXYZ(OrderInd(Index)) - MidXYZ(OrderInd(Index+1));
       Standard_Real dLength = Length(OrderInd(Index)) - Length(OrderInd(Index+1));
       if ( dMidXYZ >= tol ) {
@@ -3162,13 +3163,14 @@ void GEOMImpl_IShapesOperations::SortShapes(TopTools_ListOfShape& SL)
           val1 = (aXmin+aXmax)*999 + (aYmin+aYmax)*99 + (aZmin+aZmax)*0.9;
           box2.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax);
           val2 = (aXmin+aXmax)*999 + (aYmin+aYmax)*99 + (aZmin+aZmax)*0.9;
-          exchange = val1 > val2;
-//           cout << "box: " << val1<<" > "<<val2 << endl;
+          //exchange = val1 > val2;
+          if ((val1 - val2) >= tol) {
+            exchange = Standard_True;
+          }
+          //cout << "box: " << val1<<" > "<<val2 << endl;
         }
       }
-      else {
-       exchange = Standard_False;
-      }
+
       if (exchange)
       {
 //         cout << "exchange " << Index << " & " << Index+1 << endl;
@@ -3179,7 +3181,7 @@ void GEOMImpl_IShapesOperations::SortShapes(TopTools_ListOfShape& SL)
       }
     }
   }
-    
+
   for (Index=1; Index <= MaxShapes; Index++)
     SL.Append( aShapes( OrderInd(Index) ));
 }