Skip to content
Fill Rules

Fill Rules

Compare even-odd and nonzero filling on one path.

Fill Rules

Usage

from canvas.color import Color
from canvas.buffer import Canvas
from canvas.path import Path, fill_path
from canvas.fill_rule import FillRule
from canvas.io.bmp import write_bmp
from canvas.io.png import write_png


def _square(
    mut p: Path, x0: Float64, y0: Float64, x1: Float64, y1: Float64
) raises:
    p.move_to(x0, y0)
    p.line_to(x1, y0)
    p.line_to(x1, y1)
    p.line_to(x0, y1)
    p.close()


def main() raises:
    var c = Canvas(1200, 600, Color(255, 255, 255))

    var p1 = Path()
    _square(p1, 60.0, 60.0, 360.0, 360.0)
    _square(p1, 210.0, 210.0, 510.0, 510.0)
    fill_path(c, p1, Color(40, 100, 200), fill_rule=FillRule.EVEN_ODD)

    var p2 = Path()
    _square(p2, 660.0, 60.0, 960.0, 360.0)
    _square(p2, 810.0, 210.0, 1110.0, 510.0)
    fill_path(c, p2, Color(40, 100, 200), fill_rule=FillRule.NONZERO)

    write_bmp(c, "examples/out_fill_rule.bmp")
    write_png(c, "examples/out_fill_rule.png")
    print("wrote examples/out_fill_rule.bmp and .png")