0025159: Collections and common types in BVH package are named in non-conformant...
[occt.git] / src / BVH / BVH_Geometry.lxx
CommitLineData
3c4e78f2 1// Created on: 2013-12-20
2// Created by: Denis BOGOLEPOV
d5f74e42 3// Copyright (c) 2013-2014 OPEN CASCADE SAS
3c4e78f2 4//
5// This file is part of Open CASCADE Technology software library.
6//
d5f74e42 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
3c4e78f2 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// =======================================================================
22template<class T, int N>
23BVH_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// =======================================================================
35template<class T, int N>
36BVH_Geometry<T, N>::~BVH_Geometry()
37{
38 myBVH.Nullify();
39 myBuilder.Nullify();
40}
41
42// =======================================================================
43// function : MarkDirty
44// purpose :
45// =======================================================================
46template<class T, int N>
47void BVH_Geometry<T, N>::MarkDirty()
48{
49 myIsDirty = Standard_True;
50}
51
52// =======================================================================
53// function : Box
54// purpose :
55// =======================================================================
56template<class T, int N>
57BVH_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// =======================================================================
72template<class T, int N>
73const 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// =======================================================================
87template<class T, int N>
88void BVH_Geometry<T, N>::Update()
89{
90 if (!myIsDirty)
91 {
92 return;
93 }
94
265d4508 95 myBuilder->Build (this, myBVH.operator->(), Box());
3c4e78f2 96
3c4e78f2 97 myIsDirty = Standard_False;
98}
99
100// =======================================================================
101// function : Builder
102// purpose :
103// =======================================================================
104template<class T, int N>
105const 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// =======================================================================
114template<class T, int N>
115void BVH_Geometry<T, N>::SetBuilder (NCollection_Handle<BVH_Builder<T, N> >& theBuilder)
116{
117 myBuilder = theBuilder;
118}