# template struct geom::TAabb

## Overview

Template axis aligned bounding box in an arbitrary dimension. More…

    #include <GeometryStructures.h>

    template <int dimensions, typename Type>
    struct TAabb {
        // typedefs

        typedef glm::vec<dimensions, Type, glm::highp> Vec;

        // fields

        Vec min = Vec(std::numeric_limits<Type>::max());
        Vec max = Vec(std::numeric_limits<Type>::lowest());

        // construction

        TAabb();
        TAabb(const Vec& corner1, const Vec& corner2);

        // methods

        Vec GetSize() const;
        Vec GetCenter() const;
        float GetDiagonalSqr() const;
        float GetDiagonal() const;
        bool IsIncluded(const Vec& point) const;
        bool IsInside(const TAabb& aabb) const;
        void Include(const Vec& point);
        void Include(const TAabb<dimensions, Type>& aabb);
        bool IsValid() const;
        TAabb<dimensions, Type> GetIntersection(const TAabb<dimensions, Type>& aabb) const;
        bool AreIntersected(const TAabb<dimensions, Type>& aabb) const;
        Type Volume();
        void Clear();
        void Inflate(float d);
        TAabb<dimensions, Type>& operator+=(const TAabb<dimensions, Type>& other);
        TAabb<dimensions, Type>& operator+=(const Type& other);
        TAabb<dimensions, Type>& operator+=(const Vec& vector);
        TAabb<dimensions, Type>& operator-=(const TAabb<dimensions, Type>& other);
        TAabb<dimensions, Type>& operator-=(const Type& other);
        TAabb<dimensions, Type>& operator-=(const Vec& vector);
        TAabb<dimensions, Type>& operator*=(const Type& factor);
        TAabb<dimensions, Type>& operator*(const Type& factor);
        TAabb<dimensions, Type>& operator*=(const Vec& vector);
        TAabb<dimensions, Type>& operator/=(const Type& divisor);
        TAabb<dimensions, Type>& operator/(const Type& divisor);
        TAabb<dimensions, Type>& operator/=(const Vec& vector);
    };

## Detailed Documentation

Template axis aligned bounding box in an arbitrary dimension.

### Methods

    Vec GetSize() const

Returns sizing vector.

    Vec GetCenter() const

Returns center point of bounding box.

    float GetDiagonalSqr() const

Returns square size of diagonal.

    float GetDiagonal() const

Returns size of diagonal.

    bool IsIncluded(const Vec& point) const

Checks if point is included in range of bounding box.

    bool IsInside(const TAabb& aabb) const

Checks if this bounding box is inside other Aabb.

    void Include(const Vec& point)

Enlarges aabb so that it covers also defined point.

    void Include(const TAabb<dimensions, Type>& aabb)

Enlarges aabb so that it covers also area of specified aabb.

    bool IsValid() const

Checks if structure is valid. Invalid structure may have max < min.

    TAabb<dimensions, Type> GetIntersection(const TAabb<dimensions, Type>& aabb) const

Returns smaller bounding box computed as an intersection.

    bool AreIntersected(const TAabb<dimensions, Type>& aabb) const

Checks if aabb has an intersection with defined bounding box.

    Type Volume()

Returns volume of bounding box.

    void Clear()

Resets min and max to init values.

    void Inflate(float d)

Inflate in all directions.