# Struct Rect

GoDiagram®
v10.0.8
by Northwoods Software®

A Rect describes a rectangular two-dimensional area as a top-left point (x and y values) and a size (width and height values).

##### Syntax
``public struct Rect``
##### Remarks

Use the static functions Parse(string) and Stringify(Rect) to convert to and from a standard string representation that is independent of the current locale.

### Constructors

#### Rect(Point, Point)

Initializes a Rect that is exactly large enough to contain the given Points.

##### Declaration
``public Rect(Point a, Point b)``
##### Parameters
Type Name Description
Point a

The first Point to be contained.

Point b

The second Point to be contained.

#### Rect(Point, Size)

Initializes a Rect that is located and sized by the given Point and Rect.

##### Declaration
``public Rect(Point pt, Size sz)``
##### Parameters
Type Name Description
Point pt

The Point specifying the x-y coordinates.

Size sz

The Size specifying the width and height.

#### Rect(double, double, double, double)

Initializes a Rect with the given x, y, width, and height values. The default constructor produces the Rect(0,0,0,0).

##### Declaration
``public Rect(double x = 0, double y = 0, double w = 0, double h = 0)``
##### Parameters
Type Name Description
double x

The x value.

double y

The y value.

double w

The width.

double h

The height.

### Properties

#### Bottom

Gets or sets the y-axis value of the bottom of the Rect. This is equal to the sum of the y value and the height.

##### Declaration
``````[JsonIgnore]
public double Bottom { get; set; }``````
Type Description
double

#### Center

Gets or sets the Point at the center of this Rect. Setting this property just shifts the X and Y values.

##### Declaration
``````[JsonIgnore]
public Point Center { get; set; }``````
Type Description
Point

#### CenterX

Gets or sets the horizontal center X coordinate of the Rect.

##### Declaration
``````[JsonIgnore]
public double CenterX { get; set; }``````
Type Description
double

#### CenterY

Gets or sets the vertical center Y coordinate of the Rect.

##### Declaration
``````[JsonIgnore]
public double CenterY { get; set; }``````
Type Description
double

#### Height

Gets or sets the height of the Rect. The value must not be negative.

##### Declaration
``public double Height { get; set; }``
Type Description
double

#### Left

Gets or sets the leftmost value of the Rect. This is the same as the X value.

##### Declaration
``````[JsonIgnore]
public double Left { get; set; }``````
Type Description
double

#### Position

Gets or sets the x- and y-axis position of the Rect as a Point.

##### Declaration
``````[JsonIgnore]
public Point Position { get; set; }``````
Type Description
Point

#### Right

Gets or sets the x-axis value of the right of the Rect. This is equal to the sum of the x value and the width.

##### Declaration
``````[JsonIgnore]
public double Right { get; set; }``````
Type Description
double

#### Size

Gets or sets the width and height of the Rect as a Size.

##### Declaration
``````[JsonIgnore]
public Size Size { get; set; }``````
Type Description
Size

#### Top

Gets or sets the topmost value of the Rect. This is the same as the Y value.

##### Declaration
``````[JsonIgnore]
public double Top { get; set; }``````
Type Description
double

#### Width

Gets or sets the width of the Rect. The value must not be negative.

##### Declaration
``public double Width { get; set; }``
Type Description
double

#### X

Gets or sets the top-left x coordinate of the Rect.

##### Declaration
``public double X { readonly get; set; }``
Type Description
double

#### Y

Gets or sets the top-left y coordinate of the Rect.

##### Declaration
``public double Y { readonly get; set; }``
Type Description
double

### Methods

#### Contains(Point)

Indicates whether this Rect contains the given Point.

##### Declaration
``public bool Contains(Point p)``
##### Parameters
Type Name Description
Point p

The Point to check.

##### Returns
Type Description
bool

True if the Point is contained within this Rect, false otherwise.

#### Contains(Rect)

Indicates whether this Rect contains the given Rect.

##### Declaration
``public bool Contains(Rect r)``
##### Parameters
Type Name Description
Rect r

The Rect to check.

##### Returns
Type Description
bool

True if the Rect is contained within this Rect, false otherwise.

#### Contains(double, double, double, double, double, double, double, double)

This static function indicates whether a Rect contains the given Point/Rect.

##### Declaration
``public static bool Contains(double rx, double ry, double rw, double rh, double x, double y, double w = 0, double h = 0)``
##### Parameters
Type Name Description
double rx

The X coordinate of a Rect.

double ry

The Y coordinate of a Rect.

double rw

The Width of a Rect.

double rh

The Height of a Rect.

double x

The X coordinate of the Point or Rect that might be in the bounds (RX, RY, RW, RH).

double y

The Y coordinate of the Point or Rect that might be in the bounds (RX, RY, RW, RH).

double w

The Width of the Rect to include in the new bounds, defaults to zero.

double h

The Height of the Rect to include in the new bounds, defaults to zero.

##### Returns
Type Description
bool

True if the Point/Rect is contained within this Rect, false otherwise.

#### Contains(double, double, double, double)

Indicates whether this Rect contains the given Point/Rect.

##### Declaration
``public bool Contains(double x, double y, double w = 0, double h = 0)``
##### Parameters
Type Name Description
double x

The X coordinate of the Point or Rect to include in the new bounds.

double y

The Y coordinate of the Point or Rect to include in the new bounds.

double w

The Width of the Rect to include in the new bounds, defaults to zero.

double h

The Height of the Rect to include in the new bounds, defaults to zero.

##### Returns
Type Description
bool

True if the Point/Rect is contained within this Rect, false otherwise.

#### Deflate(Margin)

Returns a new Rect that is this Rect with the given Margin subtracted from each side.

##### Declaration
``public Rect Deflate(Margin m)``
##### Parameters
Type Name Description
Margin m

The Margin to subtract from the Rect.

Type Description
Rect

A new Rect.

#### Deflate(double, double, double, double)

Returns a new Rect that is this Rect with some distance subtracted from each side. This will not deflate the Rect beyond zero. This method is the same as calling Inflate(double, double, double, double) with negative parameters.

##### Declaration
``public Rect Deflate(double t, double r, double b, double l)``
##### Parameters
Type Name Description
double t

the amount to move the top side downwards.

double r

the amount to move the right side leftwards.

double b

the amount to move the bottom side upwards.

double l

the amount to move the left side rightwards.

Type Description
Rect

A new Rect.

#### Deflate(double, double)

Returns a new Rect that is this Rect with its width and height changed on all four sides, equally on the left and right sides, and equally on the top and bottom sides. This will not deflate the Rect beyond zero. This method is the same as calling Inflate(double, double) with negative parameters.

##### Declaration
``public Rect Deflate(double w, double h)``
##### Parameters
Type Name Description
double w

The subtracted width on each side, left and right.

double h

The subtracted height on each side, top and bottom.

Type Description
Rect

A new Rect.

#### Equals(double, double, double, double)

Indicates whether the given Rect is equal to the current Rect.

##### Declaration
``public bool Equals(double x, double y, double w, double h)``
##### Parameters
Type Name Description
double x
double y
double w

the width.

double h

the height.

##### Returns
Type Description
bool

True if the Rects are equivalent in x, y, width, and height.

#### Equals(object)

Indicates whether the given Rect is equal to the current Rect.

##### Declaration
``public override bool Equals(object obj)``
##### Parameters
Type Name Description
object obj

The rectangle to compare to the current rectangle.

##### Returns
Type Description
bool

True if the Rects are equivalent in x, y, width, and height.

#### EqualsApprox(Rect)

Indicates whether the given Rect is nearly equal to this Rect.

##### Declaration
``public bool EqualsApprox(Rect r)``
##### Parameters
Type Name Description
Rect r

The Rect to compare to the current Rect.

##### Returns
Type Description
bool

True if the two Rects have respective X, Y, Width, and Height values within 0.5, false otherwise.

#### GetHashCode()

Creates a hash code for the rectangle.

##### Declaration
``public override int GetHashCode()``
##### Returns
Type Description
int

A hash code for the current rectangle structure.

#### Inflate(Margin)

Returns a new Rect that is this Rect with the given Margin added to each side.

##### Declaration
``public Rect Inflate(Margin m)``
##### Parameters
Type Name Description
Margin m

The Margin to add to the Rect.

Type Description
Rect

A new Rect.

#### Inflate(double, double, double, double)

Returns a new Rect that is this Rect with some distance added to each side.

##### Declaration
``public Rect Inflate(double t, double r, double b, double l)``
##### Parameters
Type Name Description
double t

the amount to move the top side upwards; may be negative.

double r

the amount to move the right side rightwards; may be negative.

double b

the amount to move the bottom side downwards; may be negative.

double l

the amount to move the left side leftwards; may be negative.

Type Description
Rect

A new Rect.

#### Inflate(double, double)

Returns a new Rect that is this Rect with its width and height changed on all four sides, equally on the left and right sides, and equally on the top and bottom sides. When the arguments are negative, this operation deflates this Rect, but not beyond zero.

##### Declaration
``public Rect Inflate(double w, double h)``
##### Parameters
Type Name Description
double w

The additional width on each side, left and right; may be negative.

double h

The additional height on each side, top and bottom; may be negative.

Type Description
Rect

A new Rect.

#### Intersect(Rect)

Returns a new Rect that is the intersection of this Rect and the given Rect.

##### Declaration
``public Rect Intersect(Rect r)``
##### Parameters
Type Name Description
Rect r

Rect to intersect with.

Type Description
Rect

A new Rect.

#### Intersect(double, double, double, double)

Returns a new Rect that is the intersection of this Rect and the rectangle defined by x, y, w, h.

##### Declaration
``public Rect Intersect(double x, double y, double w, double h)``
##### Parameters
Type Name Description
double x
double y
double w
double h
Type Description
Rect

A new Rect.

#### Intersects(Rect)

Determine if a given Rect is partly or wholly inside of this Rect.

##### Declaration
``public bool Intersects(Rect r)``
##### Parameters
Type Name Description
Rect r

Rect to test intersection with.

##### Returns
Type Description
bool

true if there is an intersection.

#### Intersects(double, double, double, double, double, double, double, double)

This static function indicates whether a Rect partly or wholly overlaps the given Rect.

##### Declaration
``public static bool Intersects(double rx, double ry, double rw, double rh, double x, double y, double w, double h)``
##### Parameters
Type Name Description
double rx

The X coordinate of a Rect.

double ry

The Y coordinate of a Rect.

double rw

The Width of a Rect.

double rh

The Height of a Rect.

double x

The X coordinate of the Point or Rect that might overlap the bounds (RX, RY, RW, RH).

double y

The Y coordinate of the Point or Rect that might overlap the bounds (RX, RY, RW, RH).

double w
double h
##### Returns
Type Description
bool

true if there is any overlap.

#### Intersects(double, double, double, double)

Determine if this Rect partly or wholly overlaps the rectangle defined by x, y, w, h.

##### Declaration
``public bool Intersects(double x, double y, double w, double h)``
##### Parameters
Type Name Description
double x
double y
double w
double h
##### Returns
Type Description
bool

true if there is any overlap.

#### IntersectsLineSegment(double, double, double, double, double, double, double, double)

This static function is true if a rectangular area is intersected by a finite straight line segment.

##### Declaration
``public static bool IntersectsLineSegment(double x, double y, double w, double h, double p1x, double p1y, double p2x, double p2y)``
##### Parameters
Type Name Description
double x

The X coordinate of the rectangle to check for intersection with the line segment.

double y

The Y coordinate of the rectangle to check for intersection with the line segment.

double w

The Width of the rectangle to check for intersection with the line segment.

double h

The Height of the rectangle to check for intersection with the line segment.

double p1x

The X coordinate of one end of the line segment.

double p1y

The Y coordinate of one end of the line segment.

double p2x

The X coordinate of other end of the line segment.

double p2y

The Y coordinate of other end of the line segment.

##### Returns
Type Description
bool

True if the given finite line segment intersects with the given rectangular area, false otherwise.

#### IsEmpty()

True if this Rect has a Width and Height of zero.

##### Declaration
``public bool IsEmpty()``
Type Description
bool

#### IsReal()

True if this Rect has X, Y, Width, and Height values that are real numbers and not infinity.

##### Declaration
``public bool IsReal()``
Type Description
bool

#### Offset(double, double)

Returns a new Rect by shifting this Rect's x and y values with the given DX and DY offsets.

##### Declaration
``public Rect Offset(double dx, double dy)``
##### Parameters
Type Name Description
double dx
double dy
Type Description
Rect

A new Rect.

#### Parse(object)

This is a convenience method for Parse(string) that can be used as a Converter.

##### Declaration
``public static object Parse(object str)``
##### Parameters
Type Name Description
object str
Type Description
object

#### Parse(string)

This static method can be used to read in a Rect from a string that was produced by Stringify(Rect).

##### Declaration
``public static Rect Parse(string str)``
##### Parameters
Type Name Description
string str
Type Description
Rect
##### Remarks

`Rect.Parse("1 2 3 4")` produces the Rect `new Rect(1, 2, 3, 4)`.

#### SetSpot(double, double, Spot)

Returns a new Rect so that a given Spot in this Rect is at a given (x, y) point. The returned Rect's size will be the same as this Rect.

##### Declaration
``public Rect SetSpot(double x, double y, Spot spot)``
##### Parameters
Type Name Description
double x

the point where the spot should be.

double y

the point where the spot should be.

Spot spot

a Spot; IsSpot() must be true.

Type Description
Rect

A new Rect.

##### Remarks

The result is meaningless if IsNoSpot() is true.

#### Stringify(Rect)

This static method can be used to write out a Rect as a string that can be read by Parse(string).

##### Declaration
``public static string Stringify(Rect val)``
##### Parameters
Type Name Description
Rect val
Type Description
string
##### Remarks

`Rect.Stringify(new Rect(1, 2, 3, 4))` produces the string "1 2 3 4".

#### Stringify(object)

This is a convenience method for Stringify(Rect) that can be used as a BackConverter.

##### Declaration
``public static object Stringify(object rect)``
##### Parameters
Type Name Description
object rect
Type Description
object

#### ToString()

Returns a string representation of the rectangle.

##### Declaration
``public override string ToString()``
##### Returns
Type Description
string

A string representation of the current rectangle.

#### Union(Point)

Returns a new Rect that is exactly big enough to contain this Rect and the given Point.

##### Declaration
``public Rect Union(Point p)``
##### Parameters
Type Name Description
Point p

The Point to include in the new bounds.

Type Description
Rect

A new Rect.

#### Union(Rect)

Returns a new Rect that is exactly big enough to contain this Rect and the given Rect.

##### Declaration
``public Rect Union(Rect r)``
##### Parameters
Type Name Description
Rect r

The Rect to include in the new bounds.

Type Description
Rect

A new Rect.

#### Union(double, double, double, double)

Returns a new Rect that is exactly big enough to contain this Rect and the given rectangular area.

##### Declaration
``public Rect Union(double x, double y, double w = 0, double h = 0)``
##### Parameters
Type Name Description
double x

The X coordinate of the Rect to include in the new bounds.

double y

The Y coordinate of the Rect to include in the new bounds.

double w

The Width of the Rect to include in the new bounds, defaults to zero.

double h

The Height of the Rect to include in the new bounds, defaults to zero.

Type Description
Rect

A new Rect.

### Operators

#### operator ==(Rect, Rect)

##### Declaration
``public static bool operator ==(Rect left, Rect right)``
##### Parameters
Type Name Description
Rect left
Rect right
Type Description
bool

#### operator !=(Rect, Rect)

##### Declaration
``public static bool operator !=(Rect left, Rect right)``
##### Parameters
Type Name Description
Rect left
Rect right
Type Description
bool