Salome HOME
0020973: EDF 1554 GHS3DPLUGIN: Make possible to have a mixed mesh hexa-tetra with...
authoreap <eap@opencascade.com>
Mon, 31 Jan 2011 13:07:07 +0000 (13:07 +0000)
committereap <eap@opencascade.com>
Mon, 31 Jan 2011 13:07:07 +0000 (13:07 +0000)
   enlarge box size of each branch by 1e-10 of root size

src/SMESH/SMESH_Octree.cxx

index 519f9ad14ba78550bee645270e2b0dad9fba4893..9cc501e32b4d669c878a4392d3afe67fb7206323 100644 (file)
@@ -107,6 +107,14 @@ void SMESH_Octree::buildChildren()
   gp_XYZ mid = min + HSize;
   gp_XYZ childHsize = HSize/2.;
 
   gp_XYZ mid = min + HSize;
   gp_XYZ childHsize = HSize/2.;
 
+  // get the whole model size
+  double rootSize = 0;
+  {
+    SMESH_Octree* root = this;
+    while ( root->myLevel > 0 )
+      root = root->myFather;
+    rootSize = root->maxSize();
+  }
   Standard_Real XminChild, YminChild, ZminChild;
   gp_XYZ minChild;
   for (int i = 0; i < 8; i++)
   Standard_Real XminChild, YminChild, ZminChild;
   gp_XYZ minChild;
   for (int i = 0; i < 8; i++)
@@ -134,6 +142,7 @@ void SMESH_Octree::buildChildren()
     myChildren[i]->myLimit = myLimit;
     myChildren[i]->myLevel = myLevel + 1;
     myChildren[i]->myBox = new Bnd_B3d(minChild+childHsize,childHsize);
     myChildren[i]->myLimit = myLimit;
     myChildren[i]->myLevel = myLevel + 1;
     myChildren[i]->myBox = new Bnd_B3d(minChild+childHsize,childHsize);
+    myChildren[i]->myBox->Enlarge( rootSize * 1e-10 );
     if ( myLimit->myMinBoxSize > 0. && myChildren[i]->maxSize() <= myLimit->myMinBoxSize )
       myChildren[i]->myIsLeaf = true;
   }
     if ( myLimit->myMinBoxSize > 0. && myChildren[i]->maxSize() <= myLimit->myMinBoxSize )
       myChildren[i]->myIsLeaf = true;
   }