problemset_typeface/proof.py

67 lines
1.6 KiB
Python

# proof.py
# By Chris Proctor
#
# Draws a proof sheet, showing each letter in `typeface`
# at two different sizes.
# ---------------------------------------------------------
# ⚠️ You don't need to read or understand this code.
# Some of the code uses techniques you haven't learned yet.
# That said, feel free to poke around and don't hesistate to
# ask if you're curious.
from turtle import *
from grid import draw_grid, GRID_ROWS
from superturtle.movement import no_delay
import typeface
GRID_COLOR = "lightgrey"
GRID_SIZE = 1
LETTER_COLOR = "black"
LETTER_SIZE = 3
LETTERS_PER_ROW = 7
ALPHABET = "abcdefghijklmnopqrstuvwxyz"
def fly(distance):
penup()
forward(distance)
pendown()
def flyto(x, y):
penup()
goto(x, y)
pendown()
def go_to_next_line(unit):
right(180)
fly((GRID_ROWS + 1) * LETTERS_PER_ROW * unit)
left(90)
fly((GRID_ROWS + 1) * unit)
left(90)
def draw_proof_sheet(unit):
rows = ((len(ALPHABET) - 1) // LETTERS_PER_ROW) + 1
left(90)
fly((GRID_ROWS + 1) * (rows - 1) * unit)
right(90)
for i, letter in enumerate(ALPHABET):
if i > 0 and i % LETTERS_PER_ROW == 0:
go_to_next_line(unit)
color(GRID_COLOR)
pensize(GRID_SIZE)
draw_grid(unit)
color(LETTER_COLOR)
pensize(LETTER_SIZE)
letter_function = getattr(typeface, f"draw_letter_{letter}")
letter_function(unit)
fly((GRID_ROWS + 1) * unit)
fly((GRID_ROWS + 1) * (len(ALPHABET) % LETTERS_PER_ROW) * -unit)
with no_delay():
flyto(-310, -60)
draw_proof_sheet(10)
flyto(-310, -260)
draw_proof_sheet(5)
input()