0024473: TKMath, BVH - introduce template-based package for Bounding volume hierarchy...
[occt.git] / src / BVH / BVH_Builder.lxx
1 // Created on: 2013-12-20
2 // Created by: Denis BOGOLEPOV
3 // Copyright (c) 2013 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and / or modify it
8 // under the terms of the GNU Lesser General Public version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 // =======================================================================
17 // function : BVH_Builder
18 // purpose  :
19 // =======================================================================
20 template<class T, int N>
21 BVH_Builder<T, N>::BVH_Builder (const Standard_Integer theLeafNodeSize,
22                                 const Standard_Integer theMaxTreeDepth)
23 : myMaxTreeDepth (theMaxTreeDepth),
24   myLeafNodeSize (theLeafNodeSize)
25 {
26   //
27 }
28
29 // =======================================================================
30 // function : ~BVH_Builder
31 // purpose  :
32 // =======================================================================
33 template<class T, int N>
34 BVH_Builder<T, N>::~BVH_Builder()
35 {
36   //
37 }
38
39 // =======================================================================
40 // function : Build
41 // purpose  :
42 // =======================================================================
43 template<class T, int N>
44 void BVH_Builder<T, N>::Build (BVH_Set<T, N>*       theSet,
45                                BVH_Tree<T, N>*      theBVH,
46                                const BVH_Box<T, N>& theBox)
47 {
48   if (theBVH == NULL)
49   {
50     return;
51   }
52
53   theBVH->Clear();
54   if (theSet->Size() == 0)
55   {
56     return;
57   }
58
59   const Standard_Integer aRoot = theBVH->AddLeafNode (theBox, 0, theSet->Size() - 1);
60   if (theSet->Size() == 1)
61   {
62     return;
63   }
64
65   myTasksQueue.Append (aRoot);
66   for (Standard_Integer aTask = 0; aTask < myTasksQueue.Size(); ++aTask)
67   {
68     BuildNode (theSet, theBVH, myTasksQueue.Value (aTask));
69   }
70
71   myTasksQueue.Clear();
72 }
73
74 // =======================================================================
75 // function : BuildNode
76 // purpose  :
77 // =======================================================================
78 template<class T, int N>
79 void BVH_Builder<T, N>::BuildNode (BVH_Set<T, N>* ,
80                                    BVH_Tree<T, N>* ,
81                                    const Standard_Integer )
82 {
83   // need to disable compile warnings
84 }