Salome HOME
0020104: EDF 861 SMESH : Mesh element info evolution
[modules/smesh.git] / src / SMESH / SMESH_Octree.cxx
index 5b224ae5d8ff163c56c6b4a097cb6373e3f43bea..4642fa61da1e918da114a3f2546445e2318f71a4 100644 (file)
@@ -1,6 +1,6 @@
-//  SMESH  SMESH_Octree : global Octree implementation
+//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
 //
-//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //
 //  This library is free software; you can redistribute it and/or
 //  License along with this library; if not, write to the Free Software
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+//  SMESH  SMESH_Octree : global Octree implementation
 //
-// File      : SMESH_Octree.cxx
-// Created   : Tue Jan 16 16:00:00 2007
-// Author    : Nicolas Geimer & AurĂ©lien Motteux(OCC)
-// Module    : SMESH
+//  File      : SMESH_Octree.cxx
+//  Created   : Tue Jan 16 16:00:00 2007
+//  Author    : Nicolas Geimer & AurĂ©lien Motteux(OCC)
+//  Module    : SMESH
 
 #include "SMESH_Octree.hxx"
 
@@ -35,6 +35,7 @@
  */
 //===========================================================================
 SMESH_Octree::SMESH_Octree (const int maxLevel, const double minBoxSize):
+    myChildren(NULL),
     myFather(NULL),
     myLevel(0),
     myMaxLevel(maxLevel),
@@ -57,7 +58,7 @@ SMESH_Octree::~SMESH_Octree ()
     {
       for(int i = 0; i<8; i++)
         delete myChildren[i];
-      delete[] myChildren ;
+      delete[] myChildren;
     }
   }
   delete myBox;
@@ -71,8 +72,9 @@ SMESH_Octree::~SMESH_Octree ()
 //===========================================================================
 void SMESH_Octree::setBox(const Bnd_B3d* box)
 {
-  delete myBox;
-  myBox=new Bnd_B3d(*box);
+//   delete myBox;
+//   myBox=new Bnd_B3d(*box);
+  *myBox = *box;
 }
 
 //===========================================================================
@@ -81,11 +83,12 @@ void SMESH_Octree::setBox(const Bnd_B3d* box)
  * \param box          - Set box to the 3d Bounding Box of the Octree
  */
 //===========================================================================
-void SMESH_Octree::getBox(Bnd_B3d* box)
+void SMESH_Octree::getBox(Bnd_B3d& box)
 {
-  if(box != NULL)
-    delete box;
-  box = new Bnd_B3d (*myBox);
+//   if(box != NULL)
+//     delete box;
+//   box = new Bnd_B3d (*myBox);
+  box = *myBox;
 }
 
 //===========================================================================
@@ -135,7 +138,7 @@ void SMESH_Octree::Compute()
 //=================================================================
 void SMESH_Octree::buildChildren()
 {
-  myChildren = new (SMESH_Octree*)[8];
+  myChildren = new SMESH_Octree*[8];
 
   gp_XYZ min = myBox->CornerMin();
   gp_XYZ max = myBox->CornerMax();
@@ -146,10 +149,10 @@ void SMESH_Octree::buildChildren()
   Standard_Real XminChild, YminChild, ZminChild;
   Bnd_B3d* box;
   gp_XYZ minChild;
-  for (int i =0; i<8; i++)
+  for (int i = 0; i < 8; i++)
   {
-    // We build the eight boxes, we need 2 points to do that.
-    // Min, and Mid
+    // We build the eight boxes, we need 2 points to do that:
+    // Min and Mid
     // In binary, we can write i from 0 to 7
     // For instance :
     // 5 is 101, it corresponds here in coordinates to ZYX
@@ -158,14 +161,14 @@ void SMESH_Octree::buildChildren()
     // Same scheme for X and Z
     // I need the minChild to build the Bnd_B3d box.
 
-    XminChild= (i%2==0)?min.X():mid.X();
-    YminChild= ((i%4)/2==0)?min.Y():mid.Y();
-    ZminChild= (i<4)?min.Z():mid.Z();
+    XminChild = (i%2==0)?min.X():mid.X();
+    YminChild = ((i%4)/2==0)?min.Y():mid.Y();
+    ZminChild = (i<4)?min.Z():mid.Z();
     minChild.SetCoord(XminChild, YminChild, ZminChild);
 
     box = new Bnd_B3d(minChild+childHsize,childHsize);
     // The child is of the same type than its father (For instance, a SMESH_OctreeNode)
-    // We allocate the memory we need fot the child
+    // We allocate the memory we need for the child
     myChildren[i] = allocateOctreeChild();
     // and we assign to him its box.
     myChildren[i]->setBox(box);
@@ -176,6 +179,6 @@ void SMESH_Octree::buildChildren()
   buildChildrenData();
 
   //After we pass to the next level of the Octree
-  for (int i =0; i<8; i++)
+  for (int i = 0; i < 8; i++)
     myChildren[i]->Compute();
 }