SALOME - SMESH
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
SMESH_Octree.hxx
Go to the documentation of this file.
1 // Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
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.
10 //
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.
15 //
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
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
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)
26 // Module : SMESH
27 //
28 #ifndef _SMESH_OCTREE_HXX_
29 #define _SMESH_OCTREE_HXX_
30 
31 #include <Bnd_B3d.hxx>
32 
33 class SMESH_Octree {
34 
35 public:
36  // Constructor
37  SMESH_Octree (const int maxLevel = -1, const double minBoxSize = 0.);
38 
39  // Destructor
40  virtual ~SMESH_Octree ();
41 
42  // Tell if Octree is a leaf or not (has to be implemented in inherited classes)
43  virtual const bool isLeaf() = 0;
44 
45  // Compute the Octree
46  void Compute();
47 
48  // Set the maximal level of the Octree
49  void setMaxLevel(const int maxLevel);
50 
51  // Set the minimal size of the Box
52  void setMinBoxSize(const double minBoxSize){myMinBoxSize = minBoxSize;};
53 
54  // Set the bounding box of the Octree
55  void setBox(const Bnd_B3d* box);
56 
57  // Set box to the 3d Bounding Box of the Octree
58  void getBox(Bnd_B3d & box);
59 
60  // Compute the bigger dimension of the box
61  static double maxSize(const Bnd_B3d* box);
62 
63  // Return its level
64  int level() const { return myLevel; }
65 
66 protected:
67  // Constructor for children (has to be implemented in inherited classes)
68  virtual SMESH_Octree* allocateOctreeChild() = 0;
69 
70  // Build the 8 children boxes
71  void buildChildren();
72 
73  // Build the data in the 8 children (has to be implemented in inherited classes)
74  virtual void buildChildrenData() = 0;
75 
76  // members
77 
78  // Box of the Octree
79  Bnd_B3d* myBox;
80 
81  // Array of 8 Octree children
83 
84  // Point the father, set to NULL for the level 0
86 
87  // Level of the Octree
88  int myLevel;
89 
90  // MaxLevel of the Octree
92 
93  // Minimal size of the Box
94  double myMinBoxSize;
95 
96  // Tell us if the Octree is a leaf or not (-1 if not initialized)
97  int myIsLeaf;
98 };
99 #endif
void setBox(const Bnd_B3d *box)
SMESH_Octree ** myChildren
virtual ~SMESH_Octree()
double myMinBoxSize
SMESH_Octree * myFather
virtual SMESH_Octree * allocateOctreeChild()=0
void setMinBoxSize(const double minBoxSize)
void setMaxLevel(const int maxLevel)
void Compute()
static double maxSize(const Bnd_B3d *box)
void getBox(Bnd_B3d &box)
void buildChildren()
SMESH_Octree(const int maxLevel=-1, const double minBoxSize=0.)
virtual const bool isLeaf()=0
int level() const
virtual void buildChildrenData()=0
Bnd_B3d * myBox