17#include <spdlog/fmt/bundled/ostream.h>
63 template <
typename PNT_TYPE>
64 AABB(std::vector<PNT_TYPE*>
const& pnts,
65 std::vector<std::size_t>
const& ids)
69 for (std::size_t i = 1; i < ids.size(); ++i)
86 template <
typename InputIterator>
87 AABB(InputIterator first, InputIterator last)
89 if (std::distance(first, last) <= 0)
92 "AABB::AABB(InputIterator first, InputIterator last): first > "
96 InputIterator it(first);
107 template <
typename PNT_TYPE>
113 std::pair<bool, std::bitset<3>> updated(
false, 0);
114 for (std::size_t k(0); k < 3; k++)
120 updated.first =
true;
127 updated.second[k] =
true;
131 if (updated.second.any())
136 return updated.first;
142 template <
typename T>
160 template <
typename T>
205 os <<
"\tx [" << min[0] <<
", " << max[0] <<
") (extent "
206 << max[0] - min[0] <<
")\n";
207 os <<
"\ty [" << min[1] <<
", " << max[1] <<
") (extent "
208 << max[1] - min[1] <<
")\n";
209 os <<
"\tz [" << min[2] <<
", " << max[2] <<
") (extent "
210 << max[2] - min[2] <<
")";
215 Eigen::Vector3d
_min_pnt{std::numeric_limits<double>::max(),
216 std::numeric_limits<double>::max(),
217 std::numeric_limits<double>::max()};
218 Eigen::Vector3d
_max_pnt{std::numeric_limits<double>::lowest(),
219 std::numeric_limits<double>::lowest(),
220 std::numeric_limits<double>::lowest()};
228 for (std::size_t k = 0; k < 3; ++k)
233 _max_pnt[k], std::numeric_limits<double>::max());
238 template <
typename PNT_TYPE>
246 template <
typename PNT_TYPE>
247 void init(PNT_TYPE*
const& pnt)
257 template <
typename PNT_TYPE>
260 for (std::size_t k(0); k < 3; k++)
273 template <
typename PNT_TYPE>
279 template <
typename PNT_TYPE>
Class AABB is an axis aligned bounding box around a given set of geometric points of (template) type ...
void updateWithoutEnlarge(PNT_TYPE *const &pnt)
Eigen::Vector3d const & getMaxPoint() const
AABB(InputIterator first, InputIterator last)
friend std::ostream & operator<<(std::ostream &os, AABB const &aabb)
AABB(std::vector< PNT_TYPE * > const &pnts, std::vector< std::size_t > const &ids)
bool containsPoint(T const &pnt, double eps) const
void update(PNT_TYPE const *pnt)
void init(PNT_TYPE const &pnt)
void updateWithoutEnlarge(PNT_TYPE const &p)
Eigen::Vector3d const & getMinPoint() const
void init(PNT_TYPE *const &pnt)
MinMaxPoints getMinMaxPoints() const
bool update(PNT_TYPE const &p)
bool containsAABB(AABB const &other_aabb) const
bool containsPointXY(T const &pnt) const
void enlarge(std::bitset< 3 > to_update=7)