0026650: Coding rules - fix misprint in NCollection_Vec3::operator/()
[occt.git] / src / BVH / BVH_Geometry.lxx
1 // Created on: 2013-12-20
2 // Created by: Denis BOGOLEPOV
3 // Copyright (c) 2013-2014 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 under
8 // the terms of the GNU Lesser General Public License 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 #include <BVH_BinnedBuilder.hxx>
17
18 // =======================================================================
19 // function : BVH_Geometry
20 // purpose  :
21 // =======================================================================
22 template<class T, int N>
23 BVH_Geometry<T, N>::BVH_Geometry()
24 : myIsDirty (Standard_False),
25   myBVH (new BVH_Tree<T, N>())
26 {
27   // Set default builder - binned SAH split
28   myBuilder = new BVH_BinnedBuilder<T, N, 32> (1 /* primitive per leaf */);
29 }
30
31 // =======================================================================
32 // function : ~BVH_Geometry
33 // purpose  :
34 // =======================================================================
35 template<class T, int N>
36 BVH_Geometry<T, N>::~BVH_Geometry()
37 {
38   myBVH.Nullify();
39   myBuilder.Nullify();
40 }
41
42 // =======================================================================
43 // function : MarkDirty
44 // purpose  :
45 // =======================================================================
46 template<class T, int N>
47 void BVH_Geometry<T, N>::MarkDirty()
48 {
49   myIsDirty = Standard_True;
50 }
51
52 // =======================================================================
53 // function : Box
54 // purpose  :
55 // =======================================================================
56 template<class T, int N>
57 BVH_Box<T, N> BVH_Geometry<T, N>::Box() const
58 {
59   if (!myIsDirty)
60   {
61     return myBox;
62   }
63
64   myBox = BVH_Set<T, N>::Box();
65   return myBox;
66 }
67
68 // =======================================================================
69 // function : BVH
70 // purpose  :
71 // =======================================================================
72 template<class T, int N>
73 const NCollection_Handle<BVH_Tree<T, N> >& BVH_Geometry<T, N>::BVH()
74 {
75   if (myIsDirty)
76   {
77     Update();
78   }
79
80   return myBVH;
81 }
82
83 // =======================================================================
84 // function : Update
85 // purpose  :
86 // =======================================================================
87 template<class T, int N>
88 void BVH_Geometry<T, N>::Update()
89 {
90   if (!myIsDirty)
91   {
92     return;
93   }
94
95   myBuilder->Build (this, myBVH.operator->(), Box());
96
97   myIsDirty = Standard_False;
98 }
99
100 // =======================================================================
101 // function : Builder
102 // purpose  :
103 // =======================================================================
104 template<class T, int N>
105 const NCollection_Handle<BVH_Builder<T, N> >& BVH_Geometry<T, N>::Builder() const
106 {
107   return myBuilder;
108 }
109
110 // =======================================================================
111 // function : SetBuilder
112 // purpose  :
113 // =======================================================================
114 template<class T, int N>
115 void BVH_Geometry<T, N>::SetBuilder (NCollection_Handle<BVH_Builder<T, N> >& theBuilder)
116 {
117   myBuilder = theBuilder;
118 }