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
24 // File : SMESH_Octree.hxx
25 // Created : Tue Jan 16 16:00:00 2007
26 // Author : Nicolas Geimer & Aurélien Motteux (OCC)
29 #ifndef _SMESH_OCTREE_HXX_
30 #define _SMESH_OCTREE_HXX_
32 #include <Bnd_B3d.hxx>
38 SMESH_Octree (const int maxLevel = -1, const double minBoxSize = 0.);
41 virtual ~SMESH_Octree ();
43 // Tell if Octree is a leaf or not (has to be implemented in inherited classes)
44 virtual const bool isLeaf() = 0;
49 // Set the maximal level of the Octree
50 void setMaxLevel(const int maxLevel);
52 // Set the minimal size of the Box
53 void setMinBoxSize(const double minBoxSize){myMinBoxSize = minBoxSize;};
55 // Set the bounding box of the Octree
56 void setBox(const Bnd_B3d* box);
58 // Set box to the 3d Bounding Box of the Octree
59 void getBox(Bnd_B3d & box);
61 // Compute the bigger dimension of the box
62 static double maxSize(const Bnd_B3d* box);
65 int level() const { return myLevel; }
68 // Constructor for children (has to be implemented in inherited classes)
69 virtual SMESH_Octree* allocateOctreeChild() = 0;
71 // Build the 8 children boxes
74 // Build the data in the 8 children (has to be implemented in inherited classes)
75 virtual void buildChildrenData() = 0;
82 // Array of 8 Octree children
83 SMESH_Octree** myChildren;
85 // Point the father, set to NULL for the level 0
86 SMESH_Octree* myFather;
88 // Level of the Octree
91 // MaxLevel of the Octree
94 // Minimal size of the Box
97 // Tell us if the Octree is a leaf or not (-1 if not initialized)