# Rectangle

By Martin McBride, 2020-08-18
Tags: geometry rectangle
Categories: generativepy generative art

The Rectangle class draws a rectangle.

There is also a rectangle function that just creates a rectangle as a new path.

## Rectangle class methods

The Rectangle class inherits add, fill, stroke, fill_stroke, path, clip and other methods from Shape.

• of_corner_size

### of_corner_size

Creates a rectangle based on the position and size.

of_corner_size(corner, width, height)

Parameter Type Description
corner (number, number) A tuple of two numbers, giving the (x, y) position of the top left corner.
width number The width.
height number The height.

## rectangle function

Adds a rectangle as a new path, without the need to create a Rectangle object in code.

rectangle(ctx, corner, width, height)

Parameter Type Description
ctx Context The Pycairo Context to draw to
corner (number, number) A tuple of two numbers, giving the (x, y) position of the top left corner.
width number The width.
height number The height.

## Example

Here is some example code that draws rectangles using the class and the utility function. The full code can be found on github.

from generativepy.drawing import make_image, setup
from generativepy.color import Color
from generativepy.geometry import Rectangle, rectangle

'''
Create rectangles using the geometry module.
'''

def draw(ctx, width, height, frame_no, frame_count):
setup(ctx, width, height, width=5, background=Color(0.8))

# The rectangle function is a convenience function that adds a rectangle as a new the path.
# You can fill or stroke it as you wish.
rectangle(ctx, (1, 1), 1, 1.2)
ctx.set_source_rgba(*Color(1, 0, 0))
ctx.fill()

# Rectangle objects can be filled, stroked, filled and stroked.
Rectangle(ctx).of_corner_size((3, 1), 1, 1.2).fill(Color(0, .5, 0))
Rectangle(ctx).of_corner_size((1, 3), 1.2, 1).stroke(Color(0, .5, 0), 0.1)
Rectangle(ctx).of_corner_size((3, 3), 1.2, 1).fill_stroke(Color(0, 0, 1), Color(0), 0.2)

make_image("/tmp/geometry-rectangles.png", draw, 500, 500)