cesium-native  0.41.0
OctreeAvailability.h
1 #pragma once
2 
3 #include "Availability.h"
4 #include "Library.h"
5 #include "OctreeTileID.h"
6 #include "TileAvailabilityFlags.h"
7 
8 #include <gsl/span>
9 
10 #include <cstddef>
11 #include <memory>
12 #include <vector>
13 
14 namespace CesiumGeometry {
15 
16 class CESIUMGEOMETRY_API OctreeAvailability final {
17 public:
24  OctreeAvailability(uint32_t subtreeLevels, uint32_t maximumLevel) noexcept;
25 
35  uint8_t computeAvailability(const OctreeTileID& tileID) const noexcept;
36 
46  bool addSubtree(
47  const OctreeTileID& tileID,
48  AvailabilitySubtree&& newSubtree) noexcept;
49 
65  const OctreeTileID& tileID,
66  const AvailabilityNode* pNode) const noexcept;
67 
84  addNode(const OctreeTileID& tileID, AvailabilityNode* pParentNode) noexcept;
85 
97  AvailabilityNode* pNode,
98  AvailabilitySubtree&& newSubtree) noexcept;
115  std::optional<uint32_t> findChildNodeIndex(
116  const OctreeTileID& tileID,
117  const AvailabilityNode* pParentNode) const;
118 
135  const OctreeTileID& tileID,
136  AvailabilityNode* pParentNode) const;
137 
141  constexpr inline uint32_t getSubtreeLevels() const noexcept {
142  return this->_subtreeLevels;
143  }
144 
148  constexpr inline uint32_t getMaximumLevel() const noexcept {
149  return this->_maximumLevel;
150  }
151 
155  AvailabilityNode* getRootNode() noexcept { return this->_pRoot.get(); }
156 
157 private:
158  uint32_t _subtreeLevels;
159  uint32_t _maximumLevel;
160  uint32_t _maximumChildrenSubtrees;
161  std::unique_ptr<AvailabilityNode> _pRoot;
162 };
163 
164 } // namespace CesiumGeometry
OctreeAvailability(uint32_t subtreeLevels, uint32_t maximumLevel) noexcept
Constructs a new instance.
bool addLoadedSubtree(AvailabilityNode *pNode, AvailabilitySubtree &&newSubtree) noexcept
Attempts to add a loaded subtree onto the given node.
constexpr uint32_t getSubtreeLevels() const noexcept
Gets the number of levels in each subtree.
AvailabilityNode * getRootNode() noexcept
Gets a pointer to the root subtree node of this implicit tileset.
AvailabilityNode * addNode(const OctreeTileID &tileID, AvailabilityNode *pParentNode) noexcept
Attempts to add a child subtree node onto the given parent node.
constexpr uint32_t getMaximumLevel() const noexcept
Gets the index of the maximum level in this implicit tileset.
uint8_t computeAvailability(const OctreeTileID &tileID, const AvailabilityNode *pNode) const noexcept
Determines the currently known availability status of the given tile.
AvailabilityNode * findChildNode(const OctreeTileID &tileID, AvailabilityNode *pParentNode) const
Find the child node corresponding to this tile ID and parent node.
std::optional< uint32_t > findChildNodeIndex(const OctreeTileID &tileID, const AvailabilityNode *pParentNode) const
Find the child node index corresponding to this tile ID and parent node.
uint8_t computeAvailability(const OctreeTileID &tileID) const noexcept
Determines the currently known availability status of the given tile.
bool addSubtree(const OctreeTileID &tileID, AvailabilitySubtree &&newSubtree) noexcept
Attempts to add an availability subtree into the existing overall availability tree.
Basic geometry classes for Cesium.
Availability nodes wrap subtree objects and link them together to form a downwardly traversable avail...
Definition: Availability.h:44
A structure serving as a unique identifier for a node in an octree.
Definition: OctreeTileID.h:18