Salome HOME
Copyright update 2022
[modules/smesh.git] / src / SMESHUtils / SMESH_Octree.hxx
index 5fa0e6533a3edb95ceb7f1bb8df23a716e473307..9d2837cf62e4f63a925a93d08a0684f6e5998d7e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2013  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
@@ -6,7 +6,7 @@
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -37,9 +37,9 @@
 /*!
  * \brief 3D tree of anything.
  * Methods to implement in a descendant are:
- * - Bnd_B3d*       buildRootBox(); // box of the whole tree
+ * - Bnd_B3d*       buildRootBox(); // box of a tree
  * - descendant*    newChild() const; // a new child instance
- * - void           buildChildrenData(); // Fill in data of the children
+ * - void           buildChildrenData(); // distribute own data among children
  */
 class SMESHUtils_EXPORT SMESH_Octree : public SMESH_Tree< Bnd_B3d, 8 >
 {
@@ -49,24 +49,28 @@ public:
   // Constructor. limit must be provided at tree root construction.
   // limit will be deleted by SMESH_Octree
   SMESH_Octree (SMESH_TreeLimit* limit=0);
+  virtual ~SMESH_Octree() {};
 
   // Compute the bigger dimension of my box
   double                 maxSize() const;
 
   // Return index of a child the given point is in
-  inline int             getChildIndex(double x, double y, double z, const gp_XYZ& boxMiddle)const;
+  inline static int      getChildIndex(double x, double y, double z, const gp_XYZ& boxMiddle);
 
  protected:
 
   // Allocate a bndbox according to childIndex. childIndex is zero based
   virtual Bnd_B3d*       newChildBox(int childIndex) const;
+
+  // Change size of a box by a factor; each dimension changes independently of others
+  virtual void           enlargeByFactor( Bnd_B3d* box, double factor ) const;
 };
 
 //================================================================================
 /*!
  * \brief Return index of a child the given point is in
  */
-inline int SMESH_Octree::getChildIndex(double x, double y, double z, const gp_XYZ& mid) const
+inline int SMESH_Octree::getChildIndex(double x, double y, double z, const gp_XYZ& mid)
 {
   return (x > mid.X()) + ( y > mid.Y())*2 + (z > mid.Z())*4;
 }