Version: 9.16.0
SMESH_Octree.hxx
Go to the documentation of this file.
1// Copyright (C) 2007-2026 CEA, EDF, 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, or (at your option) any later version.
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
23// SMESH SMESH_Octree : Octree implementation
24// File : SMESH_Octree.hxx
25// Created : Tue Jan 16 16:00:00 2007
26// Author : Nicolas Geimer & Aurélien Motteux (OCC)
27// Module : SMESH
28//
29#ifndef _SMESH_OCTREE_HXX_
30#define _SMESH_OCTREE_HXX_
31
32#include "SMESH_Utils.hxx"
33#include "SMESH_Tree.hxx"
34#include <Bnd_B3d.hxx>
35
36//================================================================================
44class SMESHUtils_EXPORT SMESH_Octree : public SMESH_Tree< Bnd_B3d, 8 >
45{
46public:
48
49 // Constructor. limit must be provided at tree root construction.
50 // limit will be deleted by SMESH_Octree
52 virtual ~SMESH_Octree() {};
53
54 // Compute the bigger dimension of my box
55 double maxSize() const;
56
57 // Return index of a child the given point is in
58 inline static int getChildIndex(double x, double y, double z, const gp_XYZ& boxMiddle);
59
60 protected:
61
62 // Allocate a bndbox according to childIndex. childIndex is zero based
63 virtual Bnd_B3d* newChildBox(int childIndex) const;
64
65 // Change size of a box by a factor; each dimension changes independently of others
66 virtual void enlargeByFactor( Bnd_B3d* box, double factor ) const;
67};
68
69//================================================================================
73inline int SMESH_Octree::getChildIndex(double x, double y, double z, const gp_XYZ& mid)
74{
75 return (x > mid.X()) + ( y > mid.Y())*2 + (z > mid.Z())*4;
76}
77
78#endif
#define SMESHUtils_EXPORT
Definition: SMESH_Utils.hxx:37
3D tree of anything.
Definition: SMESH_Octree.hxx:45
virtual ~SMESH_Octree()
Definition: SMESH_Octree.hxx:52
static int getChildIndex(double x, double y, double z, const gp_XYZ &boxMiddle)
Return index of a child the given point is in.
Definition: SMESH_Octree.hxx:73
SMESH_Tree< Bnd_B3d, 8 > TBaseTree
Definition: SMESH_Octree.hxx:47
Base class for 2D and 3D trees.
Definition: SMESH_Tree.hxx:60
virtual double maxSize() const =0
virtual void enlargeByFactor(box_type *box, double factor) const =0
virtual box_type * newChildBox(int childIndex) const =0
Definition: SMESH_Tree.hxx:38