Examples

The UK Union Flag

The following code will produce an SVG file of the British flag:

import math
import omnicanvas

def create_union_flag(height):
    # The union flag is twice as wide as it is high
    canvas = omnicanvas.Canvas(height * 2, height, background_color="#000066")

    #This is the length of the diagonal of the flag, with Pythagoras
    diagonal_length = math.sqrt((height ** 2) + ((height * 2) ** 2))

    # This is the angle of the diagonal strips from the horizontal
    # tan(θ) = opposite / adjacent, so θ = atan(opposite / adjacent)
    diagonal_angle = math.degrees(math.atan((height / 2) / height))

    # Add The diagonal white strips
    canvas.add_rectangle(
     height - (height * 0.1),
     (height / 2) - (diagonal_length / 2),
     height * 0.2,
     diagonal_length,
     line_width=0,
     rotation=(
      height, height / 2, 270 + diagonal_angle
     )
    )
    canvas.add_rectangle(
     height - (height * 0.1),
     (height / 2) - (diagonal_length / 2),
     height * 0.2,
     diagonal_length,
     line_width=0,
     rotation=(
      height, height / 2, 90 - diagonal_angle
     )
    )

    # Add diagonal red strips - these'll be partly covered by the white cross
    canvas.add_rectangle(
     height - (height / 15),
     (height / 2) - (diagonal_length / 2),
     height / 15,
     diagonal_length / 2,
     line_width=0,
     fill_color="#CC0000",
     rotation=(
      height, height / 2, 90 - diagonal_angle
     )
    )
    canvas.add_rectangle(
     height - (height / 15),
     (height / 2) - (diagonal_length / 2),
     height / 15,
     diagonal_length / 2,
     line_width=0,
     fill_color="#CC0000",
     rotation=(
      height, height / 2, 270 - diagonal_angle
     )
    )
    canvas.add_rectangle(
     height - (height / 15),
     (height / 2) - (diagonal_length / 2),
     height / 15,
     diagonal_length / 2,
     line_width=0,
     fill_color="#CC0000",
     rotation=(
      height, height / 2, 270 + diagonal_angle
     )
    )
    canvas.add_rectangle(
     height - (height / 15),
     (height / 2) - (diagonal_length / 2),
     height / 15,
     diagonal_length / 2,
     line_width=0,
     fill_color="#CC0000",
     rotation=(
      height, height / 2, 90 + diagonal_angle
     )
    )

    # Add the white cross
    canvas.add_rectangle(
     height - (height / 6),
     0,
     height / 3,
     height,
     line_width=0
    )
    canvas.add_rectangle(
     0,
     (height / 2) - (height / 6),
     height * 2,
     height / 3,
     line_width=0
    )

    # Add the red cross
    canvas.add_rectangle(
     height - (height / 10),
     0,
     height / 5,
     height,
     line_width=0,
     fill_color="#CC0000",
    )
    canvas.add_rectangle(
     0,
     (height / 2) - (height / 10),
     height * 2,
     height / 5,
     line_width=0,
     fill_color="#CC0000",
    )

    return canvas

# Create a flag of height 360px (and so width 720px)
create_union_flag(360).save("ukflag.svg")