1 // Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // SMESH SMESH_Octree : global Octree implementation
23 // File : SMESH_Octree.hxx
24 // Created : Tue Jan 16 16:00:00 2007
25 // Author : Nicolas Geimer & Aurélien Motteux (OCC)
28 #ifndef _SMESH_OCTREE_HXX_
29 #define _SMESH_OCTREE_HXX_
31 #include <Bnd_B3d.hxx>
37 SMESH_Octree (const int maxLevel = -1, const double minBoxSize = 0.);
40 virtual ~SMESH_Octree ();
42 // Tell if Octree is a leaf or not (has to be implemented in inherited classes)
43 virtual const bool isLeaf() = 0;
48 // Set the maximal level of the Octree
49 void setMaxLevel(const int maxLevel);
51 // Set the minimal size of the Box
52 void setMinBoxSize(const double minBoxSize){myMinBoxSize = minBoxSize;};
54 // Set the bounding box of the Octree
55 void setBox(const Bnd_B3d* box);
57 // Set box to the 3d Bounding Box of the Octree
58 void getBox(Bnd_B3d & box);
60 // Compute the bigger dimension of the box
61 static double maxSize(const Bnd_B3d* box);
64 int level() const { return myLevel; }
67 // Constructor for children (has to be implemented in inherited classes)
68 virtual SMESH_Octree* allocateOctreeChild() = 0;
70 // Build the 8 children boxes
73 // Build the data in the 8 children (has to be implemented in inherited classes)
74 virtual void buildChildrenData() = 0;
81 // Array of 8 Octree children
82 SMESH_Octree** myChildren;
84 // Point the father, set to NULL for the level 0
85 SMESH_Octree* myFather;
87 // Level of the Octree
90 // MaxLevel of the Octree
93 // Minimal size of the Box
96 // Tell us if the Octree is a leaf or not (-1 if not initialized)