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"