0025128: Memory leak in BOPDS_DS::Paves()
[occt.git] / src / BOPDS / BOPDS_DS.cxx
index 0023f46..fc8ee91 100644 (file)
@@ -3,8 +3,8 @@
 //
 // This file is part of Open CASCADE Technology software library.
 //
-// This library is free software; you can redistribute it and / or modify it
-// under the terms of the GNU Lesser General Public version 2.1 as published
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
 // by the Free Software Foundation, with special exception defined in the file
 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
 // distribution for complete text of the license and disclaimer of any warranty.
@@ -14,6 +14,8 @@
 
 #include <BOPDS_DS.ixx>
 //
+#include <Standard_Assert.hxx>
+//
 #include <NCollection_IncAllocator.hxx>
 #include <NCollection_BaseAllocator.hxx>
 
@@ -38,6 +40,9 @@
 #include <BOPDS_PassKey.hxx>
 #include <BOPDS_DataMapOfPassKeyListOfPaveBlock.hxx>
 #include <BOPDS_PassKey.hxx>
+#include <BOPDS_MapOfPave.hxx>
+#include <BOPDS_MapOfPaveBlock.hxx>
+#include <BOPDS_VectorOfPave.hxx>
 
 #include <Geom_Curve.hxx>
 #include <BRep_Builder.hxx>
@@ -45,7 +50,8 @@
 #include <IntTools_Tools.hxx>
 #include <BOPTools_AlgoTools.hxx>
 #include <GeomAPI_ProjectPointOnCurve.hxx>
-#include <BOPDS_MapOfPave.hxx>
+
+#include <algorithm>
 
 //
 static
@@ -61,8 +67,6 @@ static
 static
   Standard_Real ComputeParameter(const TopoDS_Vertex& aV,
                                  const TopoDS_Edge& aE);
-static
-  void SortShell(const int n, BOPDS_Pave *a);
 
 //=======================================================================
 //function : 
@@ -272,7 +276,8 @@ Standard_Integer BOPDS_DS::Append(const TopoDS_Shape& theS)
 //function : ShapeInfo
 //purpose  : 
 //=======================================================================
-const BOPDS_ShapeInfo& BOPDS_DS::ShapeInfo(const Standard_Integer theI)const
+const BOPDS_ShapeInfo& BOPDS_DS::ShapeInfo
+  (const Standard_Integer theI)const
 {
   return myLines(theI);
 }
@@ -318,8 +323,8 @@ Standard_Integer BOPDS_DS::Index(const TopoDS_Shape& theS)const
 //=======================================================================
 void BOPDS_DS::Init()
 {
-  Standard_Integer i1, i2, j, aI, aNb, aNbS, aNbE, aNbSx, nV, nW, nE, aNbF;
-  Standard_Integer n1, n2, n3;
+  Standard_Integer i1, i2, j, aI, aNb, aNbS, aNbE, aNbSx;
+  Standard_Integer n1, n2, n3, nV, nW, nE, aNbF;
   Standard_Real aTol;
   TopAbs_ShapeEnum aTS;
   TopoDS_Iterator aItS;
@@ -526,11 +531,11 @@ void BOPDS_DS::Init()
       // pure internal vertices on the face
       aItS.Initialize(aS);
       for (; aItS.More(); aItS.Next()) {
-       const TopoDS_Shape& aSx=aItS.Value();
-       if (aSx.ShapeType()==TopAbs_VERTEX){
-         nV=Index(aSx);
-         aMI.Add(nV);
-       }
+        const TopoDS_Shape& aSx=aItS.Value();
+        if (aSx.ShapeType()==TopAbs_VERTEX){
+          nV=Index(aSx);
+          aMI.Add(nV);
+        }
       }
       //
       //
@@ -567,26 +572,26 @@ void BOPDS_DS::Init()
       n1=aIt1.Value();
       BOPDS_ShapeInfo& aSI1=ChangeShapeInfo(n1);
       if (aSI1.ShapeType()!=TopAbs_SHELL) {
-       continue;
+        continue;
       }
       //
       const BOPCol_ListOfInteger& aLI2=aSI1.SubShapes(); 
       aIt2.Initialize(aLI2);
       for (; aIt2.More(); aIt2.Next()) {
-       n2=aIt2.Value();
-       BOPDS_ShapeInfo& aSI2=ChangeShapeInfo(n2);
-       if (aSI2.ShapeType()!=TopAbs_FACE) {
-         continue;
-       }
-       //
-       aMI.Add(n2);
-       //
-       const BOPCol_ListOfInteger& aLI3=aSI2.SubShapes(); 
-       aIt3.Initialize(aLI3);
-       for (; aIt3.More(); aIt3.Next()) {
-         n3=aIt3.Value();
-         aMI.Add(n3);
-       }
+        n2=aIt2.Value();
+        BOPDS_ShapeInfo& aSI2=ChangeShapeInfo(n2);
+        if (aSI2.ShapeType()!=TopAbs_FACE) {
+          continue;
+        }
+        //
+        aMI.Add(n2);
+        //
+        const BOPCol_ListOfInteger& aLI3=aSI2.SubShapes(); 
+        aIt3.Initialize(aLI3);
+        for (; aIt3.More(); aIt3.Next()) {
+          n3=aIt3.Value();
+          aMI.Add(n3);
+        }
       }
     }
     //
@@ -618,10 +623,11 @@ void BOPDS_DS::Init()
 //function : InitShape
 //purpose  : 
 //=======================================================================
-void BOPDS_DS::InitShape(const Standard_Integer aI,
-                        const TopoDS_Shape& aS,
-                        Handle(NCollection_BaseAllocator)& theAllocator,
-                        BOPCol_DataMapOfShapeInteger& aMSI)
+void BOPDS_DS::InitShape
+  (const Standard_Integer aI,
+   const TopoDS_Shape& aS,
+   Handle(NCollection_BaseAllocator)& theAllocator,
+   BOPCol_DataMapOfShapeInteger& aMSI)
 {
   Standard_Integer aIx;
   TopoDS_Iterator aIt;
@@ -703,12 +709,12 @@ Standard_Boolean BOPDS_DS::HasInterfShapeSubShapes
     bRet=HasInterf(theI1, n2);
     if (theFlag) {
       if(bRet) {
-       break;
+ break;
       }
     }
     else {
       if(!bRet) {
-       break;
+ break;
       }
     }
   }
@@ -718,8 +724,9 @@ Standard_Boolean BOPDS_DS::HasInterfShapeSubShapes
 //function : HasInterfSubShapes
 //purpose  : 
 //=======================================================================
-Standard_Boolean BOPDS_DS::HasInterfSubShapes(const Standard_Integer theI1,
-                                             const Standard_Integer theI2)const
+Standard_Boolean BOPDS_DS::HasInterfSubShapes
+  (const Standard_Integer theI1,
+   const Standard_Integer theI2)const
 {
   Standard_Boolean bRet;
   Standard_Integer n1;
@@ -768,7 +775,8 @@ Standard_Boolean BOPDS_DS::HasPaveBlocks(const Standard_Integer theI)const
 //function : PaveBlocks
 //purpose  : 
 //=======================================================================
-const BOPDS_ListOfPaveBlock& BOPDS_DS::PaveBlocks(const Standard_Integer theI)const
+const BOPDS_ListOfPaveBlock& BOPDS_DS::PaveBlocks
+  (const Standard_Integer theI)const
 {
   static BOPDS_ListOfPaveBlock sLPB;
   Standard_Integer aRef;
@@ -784,7 +792,8 @@ const BOPDS_ListOfPaveBlock& BOPDS_DS::PaveBlocks(const Standard_Integer theI)co
 //function : ChangePaveBlocks
 //purpose  : 
 //=======================================================================
-BOPDS_ListOfPaveBlock& BOPDS_DS::ChangePaveBlocks(const Standard_Integer theI)
+BOPDS_ListOfPaveBlock& BOPDS_DS::ChangePaveBlocks
+  (const Standard_Integer theI)
 {
   Standard_Boolean bHasReference;
   Standard_Integer aRef;
@@ -1095,15 +1104,10 @@ Standard_Boolean BOPDS_DS::IsCommonBlock
 //function : CommonBlock
 //purpose  : 
 //=======================================================================
-const Handle(BOPDS_CommonBlock)& BOPDS_DS::CommonBlock
+Handle(BOPDS_CommonBlock) BOPDS_DS::CommonBlock
     (const Handle(BOPDS_PaveBlock)& thePB) const
 {
-  Handle(BOPDS_CommonBlock) aNullCB;
-  //
-  const Handle(BOPDS_CommonBlock)& aCB = 
-    IsCommonBlock(thePB) ? myMapPBCB.Find(thePB) : aNullCB;
-  //
-  return aCB;
+  return (IsCommonBlock(thePB) ? myMapPBCB.Find(thePB) : NULL);
 }
 
 //=======================================================================
@@ -1111,7 +1115,7 @@ const Handle(BOPDS_CommonBlock)& BOPDS_DS::CommonBlock
 //purpose  : 
 //=======================================================================
 void BOPDS_DS::SetCommonBlock(const Handle(BOPDS_PaveBlock)& thePB,
-                             const Handle(BOPDS_CommonBlock)& theCB)
+                              const Handle(BOPDS_CommonBlock)& theCB)
 {
   if (IsCommonBlock(thePB)) {
     Handle(BOPDS_CommonBlock)& aCB = myMapPBCB.ChangeFind(thePB);
@@ -1241,8 +1245,8 @@ void BOPDS_DS::UpdateFaceInfoOn(const Standard_Integer theI)
 //purpose  : 
 //=======================================================================
 void BOPDS_DS::FaceInfoOn(const Standard_Integer theF,
-                         BOPDS_IndexedMapOfPaveBlock& theMPB,
-                         BOPCol_MapOfInteger& theMI)
+                          BOPDS_IndexedMapOfPaveBlock& theMPB,
+                          BOPCol_MapOfInteger& theMI)
 {
   Standard_Integer nS, nSD, nV1, nV2;
   BOPCol_ListIteratorOfListOfInteger aIt;
@@ -1280,8 +1284,8 @@ void BOPDS_DS::FaceInfoOn(const Standard_Integer theF,
 //purpose  : 
 //=======================================================================
 void BOPDS_DS::FaceInfoIn(const Standard_Integer theF,
-                         BOPDS_IndexedMapOfPaveBlock& theMPB,
-                         BOPCol_MapOfInteger& theMI)
+                          BOPDS_IndexedMapOfPaveBlock& theMPB,
+                          BOPCol_MapOfInteger& theMI)
 {
   Standard_Integer i, aNbVF, aNbEF, nV, nE, nVSD;
   TopoDS_Iterator aItS;
@@ -1295,7 +1299,7 @@ void BOPDS_DS::FaceInfoIn(const Standard_Integer theF,
     if (aSx.ShapeType()==TopAbs_VERTEX){
       nV=Index(aSx);
       if (HasShapeSD(nV, nVSD)) {
-       nV=nVSD;
+ nV=nVSD;
       }
       theMI.Add(nV);
     }
@@ -1374,7 +1378,7 @@ void BOPDS_DS::RefineFaceInfoOn()
 //purpose  : 
 //=======================================================================
 void BOPDS_DS::AloneVertices(const Standard_Integer theI,
-                            BOPCol_ListOfInteger& theLI)const
+                             BOPCol_ListOfInteger& theLI)const
 {
   if (HasFaceInfo(theI)) {
     //
@@ -1387,7 +1391,8 @@ void BOPDS_DS::AloneVertices(const Standard_Integer theI,
     const BOPDS_FaceInfo& aFI=FaceInfo(theI);
     //
     for (i=0; i<2; ++i) {
-      const BOPDS_IndexedMapOfPaveBlock& aMPB=(!i) ? aFI.PaveBlocksIn() : aFI.PaveBlocksSc();
+      const BOPDS_IndexedMapOfPaveBlock& aMPB=
+        (!i) ? aFI.PaveBlocksIn() : aFI.PaveBlocksSc();
       aItMPB.Initialize(aMPB);
       for (; aItMPB.More(); aItMPB.Next()) {
         const Handle(BOPDS_PaveBlock)& aPB=aItMPB.Value();
@@ -1398,11 +1403,12 @@ void BOPDS_DS::AloneVertices(const Standard_Integer theI,
     }
     //
     for (i=0; i<2; ++i) {
-      const BOPCol_MapOfInteger& aMIV=(!i) ? aFI.VerticesIn() : aFI.VerticesSc();
+      const BOPCol_MapOfInteger& aMIV=
+        (!i) ? aFI.VerticesIn() : aFI.VerticesSc();
       aItMI.Initialize(aMIV);
       for (; aItMI.More(); aItMI.Next()) {
         nV=aItMI.Value();
-        if (nV>0) {
+        if (nV>=0) {
           if (aMI.Add(nV)) {
             theLI.Append(nV);
           }
@@ -1415,28 +1421,28 @@ void BOPDS_DS::AloneVertices(const Standard_Integer theI,
 //function : VerticesOnIn
 //purpose  : 
 //=======================================================================
-void BOPDS_DS::VerticesOnIn(const Standard_Integer nF1,
-                           const Standard_Integer nF2,
-                           BOPCol_MapOfInteger& aMI,
-                           BOPDS_MapOfPaveBlock& aMPB)const
+void BOPDS_DS::VerticesOnIn
+  (const Standard_Integer nF1,
+   const Standard_Integer nF2,
+   BOPCol_MapOfInteger& aMI,
+   BOPDS_IndexedMapOfPaveBlock& aMPB)const
 {
-  Standard_Integer i, nV, nV1, nV2;
+  Standard_Integer i, j, nV, nV1, nV2, aNbPB;
   BOPCol_MapIteratorOfMapOfInteger aIt;
-  BOPDS_IndexedMapOfPaveBlock* pMPB[4];
-  BOPDS_MapIteratorOfMapOfPaveBlock aItMPB;
+  BOPDS_IndexedMapOfPaveBlock pMPB[4];
   //
   const BOPDS_FaceInfo& aFI1=FaceInfo(nF1);
   const BOPDS_FaceInfo& aFI2=FaceInfo(nF2);
   //
-  pMPB[0]=(BOPDS_IndexedMapOfPaveBlock*)&aFI1.PaveBlocksOn();
-  pMPB[1]=(BOPDS_IndexedMapOfPaveBlock*)&aFI1.PaveBlocksIn();
-  pMPB[2]=(BOPDS_IndexedMapOfPaveBlock*)&aFI2.PaveBlocksOn();
-  pMPB[3]=(BOPDS_IndexedMapOfPaveBlock*)&aFI2.PaveBlocksIn();
+  pMPB[0]=aFI1.PaveBlocksOn();
+  pMPB[1]=aFI1.PaveBlocksIn();
+  pMPB[2]=aFI2.PaveBlocksOn();
+  pMPB[3]=aFI2.PaveBlocksIn();
   //
   for (i=0; i<4; ++i) {
-    aItMPB.Initialize(*pMPB[i]);
-    for (; aItMPB.More(); aItMPB.Next()) {
-      const Handle(BOPDS_PaveBlock)& aPB=aItMPB.Value();
+    aNbPB = pMPB[i].Extent();
+    for (j = 1; j <= aNbPB; ++j) {
+      const Handle(BOPDS_PaveBlock)& aPB = pMPB[i](j);
       aMPB.Add(aPB);
       aPB->Indices(nV1, nV2);
       aMI.Add(nV1);
@@ -1455,7 +1461,7 @@ void BOPDS_DS::VerticesOnIn(const Standard_Integer nF1,
     for (; aIt.More(); aIt.Next()) {
       nV=aIt.Value();
       if (aMVOn2.Contains(nV) || aMVIn2.Contains(nV)) {
-       aMI.Add(nV);
+        aMI.Add(nV);
       }
     }
   }
@@ -1465,9 +1471,9 @@ void BOPDS_DS::VerticesOnIn(const Standard_Integer nF1,
 //purpose  : 
 //=======================================================================
 void BOPDS_DS::SharedEdges(const Standard_Integer nF1,
-                          const Standard_Integer nF2,
-                          BOPCol_ListOfInteger& theLI,
-                          const Handle(NCollection_BaseAllocator)& aAllocator)
+      const Standard_Integer nF2,
+      BOPCol_ListOfInteger& theLI,
+      const Handle(NCollection_BaseAllocator)& aAllocator)
 {
   Standard_Integer nE, nSp;
   BOPCol_ListIteratorOfListOfInteger aItLI;
@@ -1540,7 +1546,7 @@ BOPCol_DataMapOfIntegerInteger& BOPDS_DS::ShapesSD()
 //purpose  : 
 //=======================================================================
 void BOPDS_DS::AddShapeSD(const Standard_Integer theIndex,
-                            const Standard_Integer theIndexSD)
+                          const Standard_Integer theIndexSD)
 {
   myShapesSD.Bind(theIndex, theIndexSD);
 }
@@ -1548,8 +1554,9 @@ void BOPDS_DS::AddShapeSD(const Standard_Integer theIndex,
 //function : HasShapeSD
 //purpose  : 
 //=======================================================================
-Standard_Boolean BOPDS_DS::HasShapeSD(const Standard_Integer theIndex,
-                                     Standard_Integer& theIndexSD)const
+Standard_Boolean BOPDS_DS::HasShapeSD
+  (const Standard_Integer theIndex,
+   Standard_Integer& theIndexSD)const
 {
   Standard_Boolean bRet;
   //
@@ -1595,8 +1602,9 @@ void BOPDS_DS::Dump()const
 // function: CheckCoincidence
 // purpose:
 //=======================================================================
-Standard_Boolean BOPDS_DS::CheckCoincidence(const Handle(BOPDS_PaveBlock)& aPB1,
-                                           const Handle(BOPDS_PaveBlock)& aPB2)
+Standard_Boolean BOPDS_DS::CheckCoincidence
+  (const Handle(BOPDS_PaveBlock)& aPB1,
+   const Handle(BOPDS_PaveBlock)& aPB2)
 {
   Standard_Boolean bRet;
   Standard_Integer nE1, nE2, aNbPoints;
@@ -1635,7 +1643,6 @@ Standard_Boolean BOPDS_DS::CheckCoincidence(const Handle(BOPDS_PaveBlock)& aPB1,
   }
   return bRet;
 }
-
 //=======================================================================
 // function: SortPaveBlocks
 // purpose:
@@ -1670,13 +1677,13 @@ void BOPDS_DS::SortPaveBlocks(const Handle(BOPDS_CommonBlock)& aCB)
   //
   aCB->AddPaveBlocks(aLPBN);
 }
-
 //=======================================================================
 // function: IsToSort
 // purpose:
 //=======================================================================
-Standard_Boolean BOPDS_DS::IsToSort(const Handle(BOPDS_CommonBlock)& aCB,
-                                   Standard_Integer& theI)
+Standard_Boolean BOPDS_DS::IsToSort
+  (const Handle(BOPDS_CommonBlock)& aCB,
+   Standard_Integer& theI)
 {
   Standard_Boolean bRet;
   bRet = Standard_False;
@@ -1712,13 +1719,13 @@ Standard_Boolean BOPDS_DS::IsToSort(const Handle(BOPDS_CommonBlock)& aCB,
 
   return bRet;
 }
-
 //=======================================================================
 // function: IsSubShape
 // purpose:
 //=======================================================================
-Standard_Boolean BOPDS_DS::IsSubShape(const Standard_Integer theI1,
-                                     const Standard_Integer theI2)
+Standard_Boolean BOPDS_DS::IsSubShape
+  (const Standard_Integer theI1,
+   const Standard_Integer theI2)
 {
   Standard_Boolean bRet;
   Standard_Integer nS;
@@ -1745,39 +1752,44 @@ Standard_Boolean BOPDS_DS::IsSubShape(const Standard_Integer theI1,
 // purpose:
 //=======================================================================
 void BOPDS_DS::Paves(const Standard_Integer theEdge,
-                    BOPDS_ListOfPave& theLP)
+                     BOPDS_ListOfPave& theLP)
 {
   Standard_Integer aNb, i;
-  BOPDS_Pave *pPaves;
   BOPDS_ListIteratorOfListOfPaveBlock aIt;
   BOPDS_MapOfPave aMP;
   //
   const BOPDS_ListOfPaveBlock& aLPB = PaveBlocks(theEdge);
-  aNb = aLPB.Extent();
-  aNb = (aNb==0) ? 0 : (aNb+1);
-  //
-  pPaves=(BOPDS_Pave *)myAllocator->Allocate(aNb*sizeof(BOPDS_Pave));
-  for (i=0; i<aNb; ++i) {
-    new (pPaves+i) BOPDS_Pave();
+  aNb = aLPB.Extent() + 1;
+  if (aNb == 1) {
+    return;
   }
   //
-  i = 0;
-  for (aIt.Initialize(aLPB); aIt.More(); aIt.Next()) {
+  BOPDS_VectorOfPave pPaves(1, aNb);
+  //
+  i = 1;
+  aIt.Initialize(aLPB);
+  for (; aIt.More(); aIt.Next()) {
     const Handle(BOPDS_PaveBlock)& aPB = aIt.Value();
-    if (aMP.Add(aPB->Pave1())){
-      pPaves[i] = aPB->Pave1();
+    const BOPDS_Pave& aPave1 = aPB->Pave1();
+    const BOPDS_Pave& aPave2 = aPB->Pave2();
+    //
+    if (aMP.Add(aPave1)){
+      pPaves(i) = aPave1;
       ++i;
     }
-    if (aMP.Add(aPB->Pave2())){
-      pPaves[i] = aPB->Pave2();
+    //
+    if (aMP.Add(aPave2)){
+      pPaves(i) = aPave2;
       ++i;
     }
   }
   //
-  SortShell(aNb, pPaves);
+  Standard_ASSERT_VOID(aNb == aMP.Extent(), "Abnormal number of paves");
+  //
+  std::sort(pPaves.begin(), pPaves.end());
   //
-  for (i = 0; i < aNb; ++i) {
-    theLP.Append(pPaves[i]);
+  for (i = 1; i <= aNb; ++i) {
+    theLP.Append(pPaves(i));
   }
 }
 
@@ -1786,7 +1798,7 @@ void BOPDS_DS::Paves(const Standard_Integer theEdge,
 // purpose:
 //=======================================================================
 void BOPDS_DS::UpdateEdgeTolerance(const Standard_Integer nE,
-                                  const Standard_Real aTol)
+                                   const Standard_Real aTol)
 {
   Standard_Integer nV;
   Standard_Real aTolV;
@@ -1862,8 +1874,6 @@ void ResetShapes(const TopoDS_Shape& aS)
     ResetShape(aSx);
   }
 }
-#include <Geom_Curve.hxx>
-
 //=======================================================================
 //function : ComputeParameter
 //purpose  : 
@@ -1903,42 +1913,11 @@ Standard_Real ComputeParameter(const TopoDS_Vertex& aV,
   return aTRet;
 }
 //=======================================================================
-// function: SortShell
-// purpose : 
-//=======================================================================
-void SortShell(const int n, BOPDS_Pave *a) 
-{
-  int nd, i, j, l, d=1;
-  BOPDS_Pave x;
-  //
-  while(d<=n) {
-    d*=2;
-  }
-  //
-  while (d) {
-    d=(d-1)/2;
-    //
-    nd=n-d;
-    for (i=0; i<nd; ++i) {
-      j=i;
-    m30:;
-      l=j+d;
-      if (a[l] < a[j]){
-        x=a[j];
-        a[j]=a[l];
-        a[l]=x;
-        j-=d;
-        if (j > -1) goto m30;
-      }//if (a[l] < a[j]){
-    }//for (i=0; i<nd; ++i) 
-  }//while (1)
-}
-//=======================================================================
 //function : BuildBndBoxSolid
 //purpose  : 
 //=======================================================================
 void BOPDS_DS::BuildBndBoxSolid(const Standard_Integer theIndex,
-                               Bnd_Box& aBoxS)
+                                Bnd_Box& aBoxS)
 {
   Standard_Boolean bIsOpenBox, bIsInverted;
   Standard_Integer nSh, nFc;
@@ -1967,25 +1946,25 @@ void BOPDS_DS::BuildBndBoxSolid(const Standard_Integer theIndex,
       nFc=aItLI1.Value();
       const BOPDS_ShapeInfo& aSIFc=ShapeInfo(nFc);
       if (aSIFc.ShapeType()!=TopAbs_FACE) {
-       continue;
+        continue;
       }
       //
       const Bnd_Box& aBFc=aSIFc.Box();
       aBoxS.Add(aBFc);
       //
       if (!bIsOpenBox) {
-       bIsOpenBox=(aBFc.IsOpenXmin() || aBFc.IsOpenXmax() ||
-                   aBFc.IsOpenYmin() || aBFc.IsOpenYmax() ||
-                   aBFc.IsOpenZmin() || aBFc.IsOpenZmax()); 
-       if (bIsOpenBox) {
-         break;
-       }
+        bIsOpenBox=(aBFc.IsOpenXmin() || aBFc.IsOpenXmax() ||
+                    aBFc.IsOpenYmin() || aBFc.IsOpenYmax() ||
+                    aBFc.IsOpenZmin() || aBFc.IsOpenZmax()); 
+        if (bIsOpenBox) {
+          break;
+        }
       }
       //
       const TopoDS_Face& aFc=*((TopoDS_Face*)&aSIFc.Shape());
       aTolFc=BRep_Tool::Tolerance(aFc);
       if (aTolFc>aTolS) {
-       aTolS=aTolFc;
+        aTolS=aTolFc;
       }
     }//for (; aItLI1.More(); aItLI1.Next()) {
     if (bIsOpenBox) {