Martin McBride, 2020-08-18
Tags geometry polygon
Categories generativepy generative art
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
clip and other methods from Shape.
It has additional methods:
Creates a polygon based on a list of points.
|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
Creates an open polygon, rather than a closed polygon.
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)
|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
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)