# Polygon

Martin McBride, 2020-08-18
Tags geometry polygon
Categories generativepy generative art

The Polygon class draws a polygon.

A polygon is defined by a list of points. The polygon is formed by joining the points with straight lines.

It is also possible to use bezier curves rather than straight lines to join the points. A shape can be formed from any combination of stratght lines and curves.

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

See the polygons tutorial for examples.

## Polygon class methods

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

• of_points
• open

### of_points

Creates a polygon based on a list of points.

of_points(points)

Parameter Type Description
points sequence of points A sequence of line or curve specifiers.

To define a simple polygon with straight sides, points should just be a list of points, like this:

[(300, 100), (300, 150), (400, 200), (450, 100)]


This will create a polygon with 4 vertices, at the points (300, 100), (300, 150), (400, 200), (450, 100).

Alternatively, it is possible to specify that some of the sides are bezier curves rather than straight lines, like this:

[(1, 4.5), (1, 2.5), (2, 3, 3, 4, 4, 2.5), (4, 4.5)]


In this case, the third item is 6 elements long. This means that the second and third points are connected by a bezier curve (rather than a straight line) with values:

(1, 2.5), (2, 3), (3, 4), (4, 2.5)


See the composite paths tutorial for more details.

The polygon will be closed by default. To create an open polygon, call the open method.

### open

Creates an open polygon, rather than a closed polygon.

open()


Calling this method will cause the final polygon to be open - the last point will not be connected to the first point (see the example). To create a closed polygon, simply don't call this method.

## polygon function

Adds a polygon as a new path, without the need to create a Polygon object in code.

polygon(ctx, points, closed=True)

Parameter Type Description
ctx Context The Pycairo Context to draw to
points list of (number, number) A sequence of (x, y) tuples, giving the position of each vertex of the polygon.
closed boolean Optional, set to False to create an open polygon

## Example

Here is some example code that draws polygons 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 polygon, Polygon

'''
Create polygons using the geometry module.
'''

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

# The polygon function is a convenience function that adds a polygon as a new path.
# You can fill or stroke it as you wish.
polygon(ctx, ((100, 100), (150, 50), (200, 150), (200, 200)))
ctx.set_source_rgba(*Color(1, 0, 0))
ctx.fill()

Polygon(ctx).of_points([(300, 100), (300, 150), (400, 200), (450, 100)]).open().stroke(Color('orange'), 10)

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