Planning Session 02

2026-05-29

"""2026-05-29
Planning Session 02
Lembranças de um planejamento com post its
ericof.com|https://ericof.com/en/sketches/2024-10-19
png
Sketch,py5,CreativeCoding
"""

from random import shuffle
from sketches.utils.draw import canvas
from sketches.utils.draw.cores.paletas import gera_paleta
from sketches.utils.draw.grade import cria_grade
from sketches.utils.helpers import sketches as helpers

import py5


sketch = helpers.info_for_sketch(__file__, __doc__)

cor_fundo = py5.color(0)

celula_x = 80
celula_y = 80
largura_base = 70
altura_base = 70
traco_peso_min = 4
traco_peso_max = 6
GRADE: list[tuple[tuple[float, float], py5.Py5Shape]] = []


def calcula_grade() -> list[tuple[tuple[float, float], py5.Py5Shape]]:
    """Monta as formas da grade posicionadas sobre a area interna do canvas.

    Para cada ponto da grade (embaralhada) cria um retangulo com cor de
    preenchimento sorteada da paleta ``Navy-Orange``, traco preto de peso
    aleatorio, escala aleatoria e rotacao que cresce conforme a posicao
    ``x``/``y`` do ponto.

    :returns: pares ``((x, y), forma)`` com a posicao e a forma a desenhar.
    """
    grade = []
    paleta = gera_paleta("Navy-Orange", False)
    pontos = cria_grade(*helpers.DIMENSOES.internal, 0, 0, celula_x, celula_y, False)
    shuffle(pontos)
    for x, y in pontos:
        cor_interna = py5.color(py5.random_choice(paleta))
        traco = py5.color("#000")
        peso = py5.random_int(traco_peso_min, traco_peso_max)
        mult = py5.random(1.2, 1.5)
        largura = largura_base * mult
        altura = altura_base * mult
        rotacao_max = float(
            py5.remap(y, -200, 1000, 0, 15) + py5.remap(x, -200, 1000, 0, 2)
        )
        rotacao = float(py5.radians(py5.random(-rotacao_max, rotacao_max)))
        forma = py5.create_shape(py5.RECT, 0, 0, largura, altura)
        forma.set_stroke(traco)
        forma.set_stroke_weight(peso)
        forma.set_fill(cor_interna)
        forma.rotate(rotacao)
        grade.append(((x, y), forma))
    return grade


def setup():
    py5.size(*helpers.DIMENSOES.external, py5.P3D)
    py5.rect_mode(py5.CORNER)
    GRADE.extend(calcula_grade())


def draw():
    py5.background(cor_fundo)
    with py5.push():
        py5.translate(*helpers.DIMENSOES.pos_interno, 0)
        for (x, y), forma in GRADE:
            py5.shape(forma, x, y)
    # Credits and go
    canvas.sketch_frame(
        sketch,
        cor_fundo,
        "large_transparent_white",
        "transparent_white",
        version=2,
    )


def key_pressed():
    key = py5.key
    if key == " ":
        save_and_close()


def save_and_close():
    py5.no_loop()
    canvas.save_sketch_image(sketch)
    py5.exit_sketch()


if __name__ == "__main__":
    py5.run_sketch()