Program Listing for File BoundingBox.hpp
↰ Return to documentation for file (include/lvr2/geometry/BoundingBox.hpp)
/*
* BoundingBox.hpp
*
* @date 22.10.2008
* @author Thomas Wiemann (twiemann@uos.de)
*/
#pragma once
#include <cmath>
#include <ostream>
#include "lvr2/io/LineReader.hpp"
#include "lvr2/util/Timestamp.hpp"
namespace lvr2
{
template<typename BaseVecT>
class BoundingBox
{
public:
using VectorType = BaseVecT;
BoundingBox();
template<typename T>
BoundingBox(T v1, T v2);
explicit BoundingBox(std::string plyPath);
template<typename T>
inline void expand(T v);
inline void expand(const BoundingBox<BaseVecT>& bb);
typename BaseVecT::CoordType getRadius() const;
bool isValid() const;
BaseVecT getCentroid() const;
bool contains(const BaseVecT& v) const;
bool overlap(const BoundingBox<BaseVecT>& bb) const;
typename BaseVecT::CoordType getLongestSide() const;
typename BaseVecT::CoordType getXSize() const;
typename BaseVecT::CoordType getYSize() const;
typename BaseVecT::CoordType getZSize() const;
typename BaseVecT::CoordType getVolume() const;
BaseVecT getMax() const;
BaseVecT getMin() const;
private:
BaseVecT m_min;
BaseVecT m_max;
BaseVecT m_centroid;
};
template<typename BaseVecT>
inline std::ostream& operator<<(std::ostream& os, const BoundingBox<BaseVecT>& bb)
{
os << timestamp << "Bounding Box" << std::endl;
os << timestamp << "\t\tMin: " << bb.getMin();
os << timestamp << "\t\tMax: " << bb.getMax();
os << timestamp << "\t\tDimensions: " << bb.getXSize() << ", " << bb.getYSize() << ", "<< bb.getZSize() << "]" << std::endl;
return os;
}
} // namespace lvr2
#include "lvr2/geometry/BoundingBox.tcc"