UFO 1.0.0
An Efficient Probabilistic 3D Mapping Framework That Embraces the Unknown
Loading...
Searching...
No Matches
block.hpp
1
41#ifndef UFO_MAP_DISTANCE_BLOCK_HPP
42#define UFO_MAP_DISTANCE_BLOCK_HPP
43
44// UFO
45#include <ufo/geometry/aabb.hpp>
46#include <ufo/map/distance/info.hpp>
47#include <ufo/numeric/vec.hpp>
48#include <ufo/utility/create_array.hpp>
49
50// STL
51#include <array>
52#include <cassert>
53#include <cstddef>
54#include <limits>
55
56namespace ufo
57{
58template <std::size_t Dim, std::size_t BF, bool WithBounds>
60 using Point = typename DistanceInfo<Dim>::Point;
62
63 constexpr DistanceBlock() = default;
64
65 constexpr DistanceBlock(DistanceBlock const& parent, std::size_t offset)
66 : info_(createArray<BF>(parent.info_[offset]))
67 , bounds_(createArray<BF>(parent.bounds_[offset]))
68 {
69 }
70
71 constexpr void fill(DistanceBlock const& parent, std::size_t offset)
72 {
73 info_ = createArray<BF>(parent.info_[offset]);
74 bounds_ = createArray<BF>(parent.bounds_[offset]);
75 }
76
77 [[nodiscard]] constexpr DistanceInfo<Dim>& operator[](std::size_t pos)
78 {
79 assert(BF > pos);
80 return info_[pos];
81 }
82
83 [[nodiscard]] constexpr DistanceInfo<Dim> const& operator[](std::size_t pos) const
84 {
85 assert(BF > pos);
86 return info_[pos];
87 }
88
89 [[nodiscard]] constexpr auto& info() { return info_; }
90
91 [[nodiscard]] constexpr auto const& info() const { return info_; }
92
93 [[nodiscard]] constexpr auto& bounds() { return bounds_; }
94
95 [[nodiscard]] constexpr auto const& bounds() const { return bounds_; }
96
97 [[nodiscard]] constexpr Bounds& bounds(std::size_t pos)
98 {
99 assert(BF > pos);
100 return bounds_[pos];
101 }
102
103 [[nodiscard]] constexpr Bounds const& bounds(std::size_t pos) const
104 {
105 assert(BF > pos);
106 return bounds_[pos];
107 }
108
109 [[nodiscard]] static constexpr DistanceInfo<Dim> resetInfo()
110 {
111 return DistanceInfo<Dim>{Point(std::numeric_limits<float>::max()), 0.0f};
112 }
113
114 [[nodiscard]] static constexpr Bounds resetBounds()
115 {
116 return Bounds(Point(std::numeric_limits<float>::max()),
117 Point(std::numeric_limits<float>::lowest()));
118 }
119 void reset() { fill(resetInfo(), resetBounds()); }
120
121 void reset(std::size_t pos)
122 {
123 assert(BF > pos);
124 info_[pos] = resetInfo();
125 bounds_[pos] = resetBounds();
126 }
127
128 private:
129 // We have them in different arrays to simplify (de)serialization
130 std::array<DistanceInfo<Dim>, BF> info_ = createArray<BF>(resetInfo());
131 // TODO: Store single per block
132 std::array<Bounds, BF> bounds_ = createArray<BF>(resetBounds());
133};
134} // namespace ufo
135
136#endif // UFO_MAP_DISTANCE_BLOCK_HPP
All vision-related classes and functions.
Definition cloud.hpp:49
Axis-Aligned Bounding Box (AABB) in Dim-dimensional space.
Definition aabb.hpp:70