3 #include <fsdk/Types/Vector2.h>
8 template <
typename Type>
10 typedef Type ElementType;
32 BaseRect(Type x_, Type y_, Type w_, Type h_) noexcept
54 template <
typename OtherType>
62 const auto r =
right();
94 return BaseRect(x0, y0, x1 - x0, y1 - y0);
103 const float inter = (rect1 & rect2).
getArea();
104 return inter / rect1.
getArea();
113 const float inter = (rect1 & rect2).
getArea();
133 template <
typename OtherType>
135 if(reinterpret_cast<const void*>(
this) != reinterpret_cast<const void*>(&other)) {
136 x =
static_cast<Type
>(other.x);
137 y =
static_cast<Type
>(other.y);
138 width =
static_cast<Type
>(other.width);
139 height =
static_cast<Type
>(other.height);
148 template <
typename OtherType>
150 return x == other.x &&
y == other.y &&
width == other.width &&
height == other.height;
157 template <
typename OtherType>
159 return !(*
this == other);
168 newRect.
x =
x > other.x ?
x : other.x;
169 newRect.
y =
y > other.y ?
y : other.y;
170 newRect.
width = (
x +
width < other.x + other.width ?
x +
width : other.x + other.width) - newRect.
x;
172 (
y +
height < other.y + other.height ?
y +
height : other.y + other.height) - newRect.
y;
184 *
this = *
this & other;
195 newRect.
x =
x < other.x ?
x : other.x;
196 newRect.
y =
y < other.y ?
y : other.y;
197 newRect.
width = (
x +
width > other.x + other.width ?
x +
width : other.x + other.width) - newRect.
x;
199 (
y +
height > other.y + other.height ?
y +
height : other.y + other.height) - newRect.
y;
210 *
this = *
this & other;
221 newRect.
x =
static_cast<Type
>(
x * scaleFactor);
222 newRect.
y =
static_cast<Type
>(
y * scaleFactor);
223 newRect.
width =
static_cast<Type
>(
width * scaleFactor);
224 newRect.
height =
static_cast<Type
>(
height * scaleFactor);
235 newRect.
x =
static_cast<Type
>(
x / scaleFactor);
236 newRect.
y =
static_cast<Type
>(
y / scaleFactor);
237 newRect.
width =
static_cast<Type
>(
width / scaleFactor);
238 newRect.
height =
static_cast<Type
>(
height / scaleFactor);
251 BaseRect operator-(Vector2<typename BaseRect::ElementType> vec) {
290 Type
top() const noexcept {
332 void adjust(Type dx, Type dy, Type dw, Type dh) noexcept {
348 rect.
adjust(dx, dy, dw, dh);
382 template <
typename Type>
385 out.
x = in.x - 0.5 * (scaleFactor - 1) * in.width;
386 out.
y = in.y - 0.5 * (scaleFactor - 1) * in.height;
387 out.
width = in.width * scaleFactor;
388 out.
height = in.height * scaleFactor;
392 using Rect = BaseRect<int>;
393 using FloatRect = BaseRect<float>;
void setBottom(Type b) noexcept
Set rect bottom.
Definition: Rect.h:83
Type height
Rectangle height.
Definition: Rect.h:15
BaseRect() noexcept
Initializes a default invalid rectangle.
Definition: Rect.h:19
Vector2< Type > size() const noexcept
Gets rect size (width, height).
Definition: Rect.h:262
bool inside(const BaseRect &other) const noexcept
Checks whether this rect is inside of another rect.
Definition: Rect.h:363
static BaseRect coords(Type x0, Type y0, Type x1, Type y1) noexcept
Create new Rect by coordinates.
Definition: Rect.h:93
static float intersectionOverForeground(const BaseRect &rect1, const BaseRect &rect2)
Calculates rects intersection rate over foreground.
Definition: Rect.h:122
Vector2< Type > center() const noexcept
Gets rect center coordinates.
Definition: Rect.h:276
Type left() const noexcept
Gets rect left x coordinate.
Definition: Rect.h:304
BaseRect & operator=(const BaseRect< OtherType > &other) noexcept
Copies another rect.
Definition: Rect.h:134
Type width
Rectangle width.
Definition: Rect.h:14
Type getArea() const noexcept
Computes rect area (width x height).
Definition: Rect.h:355
void setLeft(Type l) noexcept
Set rect left.
Definition: Rect.h:61
T x
x coordinate.
Definition: Vector2.h:11
BaseRect(Type x_, Type y_, Type w_, Type h_) noexcept
Initializes a rectangle with given values.
Definition: Rect.h:32
bool isValid() const noexcept
Checks whether a rect is valid.
Definition: Rect.h:372
void adjust(Type dx, Type dy, Type dw, Type dh) noexcept
Adjusts the rect by given amounts.
Definition: Rect.h:332
BaseRect operator|=(const BaseRect &other) noexcept
Returns minimum area rectangle containing both rects.
Definition: Rect.h:208
BaseRect(const BaseRect &other) noexcept
Copies another rect.
Definition: Rect.h:50
BaseRect operator*(float scaleFactor) const noexcept
Multiplicates Rect scale by specified scale factor.
Definition: Rect.h:219
BaseRect(const Vector2< Type > &topLeft, const Vector2< Type > &bottomRight) noexcept
Initializes a rectangle with given values.
Definition: Rect.h:43
Vector2< Type > topLeft() const noexcept
Gets rect top-left corner coordinates.
Definition: Rect.h:269
bool operator!=(const BaseRect< OtherType > &other) const noexcept
Checks whether two rects are not equal.
Definition: Rect.h:158
Type bottom() const noexcept
Gets rect bottom y coordinate.
Definition: Rect.h:297
static float intersectionOverFirstRect(const BaseRect &rect1, const BaseRect &rect2)
Calculates rects intersection rate over first rect.
Definition: Rect.h:102
BaseRect operator|(const BaseRect &other) const noexcept
Returns minimum area rectangle containing both rects.
Definition: Rect.h:193
void setRight(Type r) noexcept
Set rect right.
Definition: Rect.h:77
bool operator==(const BaseRect< OtherType > &other) const noexcept
Checks whether two rects are equal.
Definition: Rect.h:149
void setTop(Type t) noexcept
Set rect top.
Definition: Rect.h:69
static float intersectionOverUnion(const BaseRect &rect1, const BaseRect &rect2)
Calculates rects intersection rate over union.
Definition: Rect.h:112
BaseRect< Type > centerScale(const BaseRect< Type > &in, float scaleFactor) noexcept
scale rect out of center
Definition: Rect.h:383
BaseRect operator/(float scaleFactor) const noexcept
Divides Rect scale by specified scale factor.
Definition: Rect.h:233
BaseRect adjusted(Type dx, Type dy, Type dw, Type dh) const noexcept
Copies and adjusts the rect by given amounts.
Definition: Rect.h:346
Vector2< Type > bottomRight() const noexcept
Gets rect bottom-right corner coordinates.
Definition: Rect.h:283
BaseRect operator&=(const BaseRect &other) noexcept
Returns rect that is intersection of rects.
Definition: Rect.h:182
BaseRect operator&(const BaseRect &other) const noexcept
Returns rect that is intersection of rects.
Definition: Rect.h:166
Rectangle.
Definition: Rect.h:9
Type top() const noexcept
Gets rect top y coordinate.
Definition: Rect.h:290
T y
y coordinate.
Definition: Vector2.h:12
void set(const Vector2< Type > &topLeft, const Vector2< Type > &bottomRight) noexcept
Sets rect corner coordinates.
Definition: Rect.h:319
Type right() const noexcept
Gets rect right x coordinate.
Definition: Rect.h:311
Type y
Upper left corner y-coordinate.
Definition: Rect.h:13
Generic 2D vector.
Definition: Vector2.h:10
Type x
Upper left corner x-coordinate.
Definition: Rect.h:12