template struct geom::TRect

Template rectangle in an arbitrary dimension.

#include <GeometryStructures.h>

template <typename T>
struct TRect {
    // typedefs

    typedef glm::tvec2<T> Vec2;

    // fields

    Vec2 position = Vec2((T)0);
    Vec2 position2 = Vec2((T)0);
    utils::PropertyByValue<TRect<T>, T,&TRect<T>::GetX,&TRect<T>::SetX> x;
    utils::PropertyByValue<TRect<T>, T,&TRect<T>::GetY,&TRect<T>::SetY> y;
    utils::PropertyByValue<TRect<T>, T,&TRect<T>::GetWidth,&TRect<T>::SetWidth> width;
    utils::PropertyByValue<TRect<T>, T,&TRect<T>::GetHeight,&TRect<T>::SetHeight> height;
    utils::PropertyByValue<TRect<T>, T,&TRect<T>::GetX2,&TRect<T>::SetX2> x2;
    utils::PropertyByValue<TRect<T>, T,&TRect<T>::GetY2,&TRect<T>::SetY2> y2;
    utils::Property<TRect<T>, Vec2,&TRect<T>::GetSize,&TRect<T>::SetSize> size;

    // construction

    TRect();
    TRect(const T x1, const T y1, const T x2, const T y2);
    TRect(const Vec2& point1, const Vec2& point2);
    TRect(const Vec2& top_left_origin, const T size_width, const T size_height);

    // methods

    void SetSize(const Vec2& new_size);
    void Set(const TRect& rect);
    void Set(const T t_x1, const T t_y1, const T t_x2, const T t_y2);
    void Set(const Vec2& point1, const Vec2& point2);
    Vec2 GetSize() const;
    T GetX() const;
    T GetY() const;
    T GetWidth() const;
    T GetHeight() const;
    T GetX2() const;
    T GetY2() const;
    void SetX(const T value);
    void SetY(const T value);
    void SetWidth(const T value);
    void SetHeight(const T value);
    void SetX2(const T value);
    void SetY2(const T value);
    Vec2 Center(void) const;
    bool Contains(const Vec2& point) const;
    T Area(void) const;
};