sketch-a-day/s180108/s180108.pyde

49 wiersze
1.5 KiB
Python

"""
s180108 Platonic Solid Grid in Processing.Py
(c)2018 Alexandre B A Villares
https://abav.lugaralgum.com/sketch-a-day
"""
from PlatonicSolids import *
NUM_COLS, NUM_ROWS = 5, 5
NUM_CELLS = NUM_COLS * NUM_ROWS
solids = []
r_x = 0
r_y = 0
def setup():
global CELL_SIZE
size(500, 500, P3D)
CELL_SIZE = width / NUM_COLS
strokeWeight(5)
noFill()
colorMode(HSB)
for i in range(NUM_CELLS):
s = PlatonicFactory(int(random(5))) # Instancia aleatoriamente um dos sólidos
c = color(random(256), 200, 200, 128) # random HSB translucent colors
s.c = c # Tasca cor no sólido, vou usar no loop do draw!
solids.append(s)
def draw():
global r_x, r_y
# translate(-width/2, -height/2) # may need to use with PeasyCam
r_x += 0.02 # x rotation speed
r_y += 0.01 # y rotation speed
background(255) # clear frame with white
# lights() # use this if you use filled faces
for i in range(NUM_CELLS):
x, y = x_y_from_i(i, NUM_COLS, NUM_ROWS)
cx, cy = CELL_SIZE / 2 + x * CELL_SIZE, CELL_SIZE / 2 + y * CELL_SIZE
with pushMatrix():
d = dist(mouseX, mouseY, cx, cy)
translate(cx, cy)
if d < 80: # se o mouse está perto, gira!
rotateX(r_y)
rotateY(r_x)
stroke(solids[i].c) # Lembrando que de fábrica não tem .c
solids[i].create()
# if (frameCount < 200): saveFrame("###.tga") # para salvar frames
def x_y_from_i(i, max_x, max_y):
return i % max_x, (i / max_x) % max_y