Rect2

2D axis-aligned bounding box.

Description

Rect2 consists of a position, a size, and several utility functions. It is typically used for fast overlap tests.

It uses floating-point coordinates.

The 3D counterpart to Rect2 is AABB.

Tutorials

Properties

Vector2

end

Vector2( 0, 0 )

Vector2

position

Vector2( 0, 0 )

Vector2

size

Vector2( 0, 0 )

Methods

Rect2

Rect2 ( Vector2 position, Vector2 size )

Rect2

Rect2 ( float x, float y, float width, float height )

Rect2

abs ( )

Rect2

clip ( Rect2 b )

bool

encloses ( Rect2 b )

Rect2

expand ( Vector2 to )

float

get_area ( )

Vector2

get_center ( )

Rect2

grow ( float by )

Rect2

grow_individual ( float left, float top, float right, float bottom )

Rect2

grow_margin ( int margin, float by )

bool

has_no_area ( )

bool

has_point ( Vector2 point )

bool

intersects ( Rect2 b, bool include_borders=false )

bool

is_equal_approx ( Rect2 rect )

Rect2

merge ( Rect2 b )


Property Descriptions

Vector2 end = Vector2( 0, 0 )

Ending corner. This is calculated as position + size. Setting this value will change the size.


Vector2 position = Vector2( 0, 0 )

Beginning corner. Typically has values lower than end.


Vector2 size = Vector2( 0, 0 )

Size from position to end. Typically, all components are positive.

If the size is negative, you can use abs to fix it.


Method Descriptions

Rect2 Rect2 ( Vector2 position, Vector2 size )

Constructs a Rect2 by position and size.


Rect2 Rect2 ( float x, float y, float width, float height )

Constructs a Rect2 by x, y, width, and height.


Rect2 abs ( )

Returns a Rect2 with equivalent position and area, modified so that the top-left corner is the origin and width and height are positive.


Rect2 clip ( Rect2 b )

Returns the intersection of this Rect2 and b.


bool encloses ( Rect2 b )

Returns true if this Rect2 completely encloses another one.


Rect2 expand ( Vector2 to )

Returns a copy of this Rect2 expanded to include a given point.

Example:

# position (-3, 2), size (1, 1)
var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))
# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)
var rect2 = rect.expand(Vector2(0, -1))

float get_area ( )

Returns the area of the Rect2. See also has_no_area.


Vector2 get_center ( )

Returns the center of the Rect2, which is equal to position + (size / 2).


Rect2 grow ( float by )

Returns a copy of the Rect2 grown a given amount of units towards all the sides.


Rect2 grow_individual ( float left, float top, float right, float bottom )

Returns a copy of the Rect2 grown a given amount of units towards each direction individually.


Rect2 grow_margin ( int margin, float by )

Returns a copy of the Rect2 grown a given amount of units towards the Margin direction.


bool has_no_area ( )

Returns true if the Rect2 is flat or empty, false otherwise. See also get_area.

Note: If the Rect2 has a negative size and is not flat or empty, has_no_area will return true.


bool has_point ( Vector2 point )

Returns true if the Rect2 contains a point. By convention, the right and bottom edges of the Rect2 are considered exclusive, so points on these edges are not included.

Note: This method is not reliable for Rect2 with a negative size. Use abs to get a positive sized equivalent rectangle to check for contained points.


bool intersects ( Rect2 b, bool include_borders=false )

Returns true if the Rect2 overlaps with b (i.e. they have at least one point in common).

If include_borders is true, they will also be considered overlapping if their borders touch, even without intersection.


bool is_equal_approx ( Rect2 rect )

Returns true if this Rect2 and rect are approximately equal, by calling is_equal_approx on each component.


Rect2 merge ( Rect2 b )

Returns a larger Rect2 that contains this Rect2 and b.