Salome HOME
Merge branch 'V9_9_BR'
[modules/smesh.git] / src / SMESHUtils / SMESH_Tree.hxx
index eb7b2b864886bdf06190f7816b44535eb287da82..7c444cb80b06adc51cf132f13f2672ea5697766c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2015  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2022  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -31,6 +31,8 @@
 
 #include "SMESH_Utils.hxx"
 
+const double theEnlargeFactor = 1. + 1e-10;
+
 //================================================================================
 // Data limiting the tree height
 struct SMESH_TreeLimit {
@@ -98,6 +100,9 @@ protected:
   // Allocate a bndbox according to childIndex. childIndex is zero based
   virtual box_type*      newChildBox(int childIndex) const = 0;
 
+  // Change size of a box by a factor; each dimension changes independently of others
+  virtual void           enlargeByFactor( box_type* box, double factor ) const = 0;
+
   // Fill in data of the children
   virtual void           buildChildrenData() = 0;
 
@@ -138,8 +143,8 @@ SMESH_Tree<BND_BOX,NB_CHILDREN>::SMESH_Tree (SMESH_TreeLimit* limit):
   myFather(0),
   myIsLeaf( false ),
   myLimit( limit ),
-  myLevel(0),
-  myBox(0)
+  myBox(0),
+  myLevel(0)
 {
   //if ( !myLimit ) myLimit = new SMESH_TreeLimit();
 }
@@ -157,6 +162,7 @@ void SMESH_Tree<BND_BOX,NB_CHILDREN>::compute()
   {
     if ( !myLimit ) myLimit = new SMESH_TreeLimit();
     myBox = buildRootBox();
+    enlargeByFactor( myBox, theEnlargeFactor );
     if ( myLimit->myMinBoxSize > 0. && maxSize() <= myLimit->myMinBoxSize )
       myIsLeaf = true;
     else
@@ -205,13 +211,13 @@ void SMESH_Tree<BND_BOX,NB_CHILDREN>::buildChildren()
   myChildren = new SMESH_Tree*[NB_CHILDREN];
 
   // get the whole model size
-  double rootSize = 0;
-  {
-    SMESH_Tree* root = this;
-    while ( root->myLevel > 0 )
-      root = root->myFather;
-    rootSize = root->maxSize();
-  }
+  // double rootSize = 0;
+  // {
+  //   SMESH_Tree* root = this;
+  //   while ( root->myLevel > 0 )
+  //     root = root->myFather;
+  //   rootSize = root->maxSize();
+  // }
   for (int i = 0; i < NB_CHILDREN; i++)
   {
     // The child is of the same type than its father (For instance, a SMESH_OctreeNode)
@@ -224,7 +230,7 @@ void SMESH_Tree<BND_BOX,NB_CHILDREN>::buildChildren()
     myChildren[i]->myLimit = myLimit;
     myChildren[i]->myLevel = myLevel + 1;
     myChildren[i]->myBox = newChildBox( i );
-    myChildren[i]->myBox->Enlarge( rootSize * 1e-10 );
+    enlargeByFactor( myChildren[i]->myBox, theEnlargeFactor );
     if ( myLimit->myMinBoxSize > 0. && myChildren[i]->maxSize() <= myLimit->myMinBoxSize )
       myChildren[i]->myIsLeaf = true;
   }
@@ -265,14 +271,14 @@ int SMESH_Tree<BND_BOX,NB_CHILDREN>::getHeight(const bool full) const
   if ( isLeaf() )
     return 1;
 
-  int heigth = 0;
+  int height = 0;
   for (int i = 0; i<NB_CHILDREN; i++)
   {
     int h = myChildren[i]->getHeight( false );
-    if ( h > heigth )
-      heigth = h;
+    if ( h > height )
+      height = h;
   }
-  return heigth + 1;
+  return height + 1;
 }
 
 #endif