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.

The Polygon class inherits `add`

, `fill`

, `stroke`

, `fill_stroke`

, `path`

, `clip`

and other methods from Shape.

It has additional methods:

- of_points
- open

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.

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.

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 |

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)

Copyright (c) Axlesoft Ltd 2020