0029516: Visualization - eliminate redundant property Graphic3d_MaterialAspect::Refle...
[occt.git] / src / Graphic3d / Graphic3d_Layer.hxx
CommitLineData
d325cb7f 1// Copyright (c) 2011-2019 OPEN CASCADE SAS
2//
3// This file is part of Open CASCADE Technology software library.
4//
5// This library is free software; you can redistribute it and/or modify it under
6// the terms of the GNU Lesser General Public License version 2.1 as published
7// by the Free Software Foundation, with special exception defined in the file
8// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9// distribution for complete text of the license and disclaimer of any warranty.
10//
11// Alternatively, this file may be used under the terms of Open CASCADE
12// commercial license or contractual agreement.
13
14#ifndef _Graphic3d_Layer_HeaderFile
15#define _Graphic3d_Layer_HeaderFile
16
17#include <Graphic3d_BvhCStructureSet.hxx>
18#include <Graphic3d_BvhCStructureSetTrsfPers.hxx>
19#include <Graphic3d_Camera.hxx>
1c728f2d 20#include <Graphic3d_ZLayerId.hxx>
d325cb7f 21#include <Graphic3d_ZLayerSettings.hxx>
22#include <Graphic3d_RenderingParams.hxx>
23#include <NCollection_Array1.hxx>
24#include <NCollection_IndexedMap.hxx>
25#include <NCollection_Sequence.hxx>
26
27//! Defines index map of structures.
28typedef NCollection_IndexedMap<const Graphic3d_CStructure*> Graphic3d_IndexedMapOfStructure;
29
30//! Defines array of indexed maps of structures.
31typedef NCollection_Array1<Graphic3d_IndexedMapOfStructure> Graphic3d_ArrayOfIndexedMapOfStructure;
32
33class Graphic3d_CullingTool;
34
35//! Presentations list sorted within priorities.
36class Graphic3d_Layer : public Standard_Transient
37{
38 DEFINE_STANDARD_RTTIEXT(Graphic3d_Layer, Standard_Transient)
39public:
40
41 //! Initializes associated priority list and layer properties
1c728f2d 42 Standard_EXPORT Graphic3d_Layer (Graphic3d_ZLayerId theId,
43 Standard_Integer theNbPriorities,
d325cb7f 44 const Handle(Select3D_BVHBuilder3d)& theBuilder);
45
46 //! Destructor.
47 Standard_EXPORT virtual ~Graphic3d_Layer();
48
1c728f2d 49 //! Return layer id.
50 Graphic3d_ZLayerId LayerId() const { return myLayerId; }
51
d325cb7f 52 //! Returns BVH tree builder for frustom culling.
53 const Handle(Select3D_BVHBuilder3d)& FrustumCullingBVHBuilder() const { return myBVHPrimitivesTrsfPers.Builder(); }
54
55 //! Assigns BVH tree builder for frustom culling.
56 void SetFrustumCullingBVHBuilder (const Handle(Select3D_BVHBuilder3d)& theBuilder) { myBVHPrimitivesTrsfPers.SetBuilder (theBuilder); }
57
58 //! Return true if layer was marked with immediate flag.
59 Standard_Boolean IsImmediate() const { return myLayerSettings.IsImmediate(); }
60
61 //! Returns settings of the layer object.
62 const Graphic3d_ZLayerSettings& LayerSettings() const { return myLayerSettings; };
63
64 //! Sets settings of the layer object.
65 Standard_EXPORT void SetLayerSettings (const Graphic3d_ZLayerSettings& theSettings);
66
67 Standard_EXPORT void Add (const Graphic3d_CStructure* theStruct,
68 Standard_Integer thePriority,
69 Standard_Boolean isForChangePriority = Standard_False);
70
71 //! Remove structure and returns its priority, if the structure is not found, method returns negative value
72 Standard_EXPORT bool Remove (const Graphic3d_CStructure* theStruct,
73 Standard_Integer& thePriority,
74 Standard_Boolean isForChangePriority = Standard_False);
75
76 //! @return the number of structures
77 Standard_Integer NbStructures() const { return myNbStructures; }
78
79 //! Number of NOT culled structures in the layer.
80 Standard_Integer NbStructuresNotCulled() const { return myNbStructuresNotCulled; }
81
82 //! Returns the number of available priority levels
83 Standard_Integer NbPriorities() const { return myArray.Length(); }
84
85 //! Append layer of acceptable type (with similar number of priorities or less).
86 //! Returns Standard_False if the list can not be accepted.
87 Standard_EXPORT Standard_Boolean Append (const Graphic3d_Layer& theOther);
88
89 //! Returns array of structures.
90 const Graphic3d_ArrayOfIndexedMapOfStructure& ArrayOfStructures() const { return myArray; }
91
92 //! Marks BVH tree for given priority list as dirty and
93 //! marks primitive set for rebuild.
94 Standard_EXPORT void InvalidateBVHData();
95
96 //! Marks cached bounding box as obsolete.
97 void InvalidateBoundingBox() const
98 {
99 myIsBoundingBoxNeedsReset[0] = myIsBoundingBoxNeedsReset[1] = true;
100 }
101
102 //! Returns layer bounding box.
103 //! @param theViewId view index to consider View Affinity in structure
104 //! @param theCamera camera definition
105 //! @param theWindowWidth viewport width (for applying transformation-persistence)
106 //! @param theWindowHeight viewport height (for applying transformation-persistence)
107 //! @param theToIncludeAuxiliary consider also auxiliary presentations (with infinite flag or with trihedron transformation persistence)
108 //! @return computed bounding box
109 Standard_EXPORT Bnd_Box BoundingBox (Standard_Integer theViewId,
110 const Handle(Graphic3d_Camera)& theCamera,
111 Standard_Integer theWindowWidth,
112 Standard_Integer theWindowHeight,
113 Standard_Boolean theToIncludeAuxiliary) const;
114
115 //! Returns zoom-scale factor.
116 Standard_EXPORT Standard_Real considerZoomPersistenceObjects (Standard_Integer theViewId,
117 const Handle(Graphic3d_Camera)& theCamera,
118 Standard_Integer theWindowWidth,
119 Standard_Integer theWindowHeight) const;
120
121 //! Update culling state - should be called before rendering.
122 //! Traverses through BVH tree to determine which structures are in view volume.
123 Standard_EXPORT void UpdateCulling (Standard_Integer theViewId,
124 const Graphic3d_CullingTool& theSelector,
125 const Graphic3d_RenderingParams::FrustumCulling theFrustumCullingState);
126
127 //! Returns TRUE if layer is empty or has been discarded entirely by culling test.
128 bool IsCulled() const { return myNbStructuresNotCulled == 0; }
129
130 //! Returns number of transform persistence objects.
131 Standard_Integer NbOfTransformPersistenceObjects() const
132 {
133 return myBVHPrimitivesTrsfPers.Size();
134 }
135
136public:
137
138 //! Returns set of Graphic3d_CStructures structures for building BVH tree.
139 const Graphic3d_BvhCStructureSet& CullableStructuresBVH() const { return myBVHPrimitives; }
140
141 //! Returns set of transform persistent Graphic3d_CStructures for building BVH tree.
142 const Graphic3d_BvhCStructureSetTrsfPers& CullableTrsfPersStructuresBVH() const { return myBVHPrimitivesTrsfPers; }
143
144 //! Returns indexed map of always rendered structures.
145 const NCollection_IndexedMap<const Graphic3d_CStructure*>& NonCullableStructures() const { return myAlwaysRenderedMap; }
146
147protected:
148
149 //! Updates BVH trees if their state has been invalidated.
150 Standard_EXPORT void updateBVH() const;
151
152private:
153
154 //! Array of Graphic3d_CStructures by priority rendered in layer.
155 Graphic3d_ArrayOfIndexedMapOfStructure myArray;
156
157 //! Overall number of structures rendered in the layer.
158 Standard_Integer myNbStructures;
159
160 //! Number of NOT culled structures in the layer.
161 Standard_Integer myNbStructuresNotCulled;
162
163 //! Layer setting flags.
164 Graphic3d_ZLayerSettings myLayerSettings;
165
1c728f2d 166 //! Layer id.
167 Graphic3d_ZLayerId myLayerId;
168
d325cb7f 169 //! Set of Graphic3d_CStructures structures for building BVH tree.
170 mutable Graphic3d_BvhCStructureSet myBVHPrimitives;
171
172 //! Set of transform persistent Graphic3d_CStructures for building BVH tree.
173 mutable Graphic3d_BvhCStructureSetTrsfPers myBVHPrimitivesTrsfPers;
174
175 //! Indexed map of always rendered structures.
176 mutable NCollection_IndexedMap<const Graphic3d_CStructure*> myAlwaysRenderedMap;
177
178 //! Is needed for implementation of stochastic order of BVH traverse.
179 Standard_Boolean myBVHIsLeftChildQueuedFirst;
180
181 //! Defines if the primitive set for BVH is outdated.
182 mutable Standard_Boolean myIsBVHPrimitivesNeedsReset;
183
184 //! Defines if the cached bounding box is outdated.
185 mutable bool myIsBoundingBoxNeedsReset[2];
186
187 //! Cached layer bounding box.
188 mutable Bnd_Box myBoundingBox[2];
189
190};
191
192#endif // _Graphic3d_Layer_HeaderFile