kopia lustrzana https://github.com/villares/sketch-a-day
more 51 comments
rodzic
3c985e61b2
commit
2703c037e8
|
|
@ -8,7 +8,7 @@ CEL_SIZE = 64
|
|||
HALF_CEL = CEL_SIZE / 2
|
||||
MARGIN = 100
|
||||
GRADE_PONTOS = [] # lista de tuplas (x, y)
|
||||
NUM_NODES = 30 # número de elementos do desenho
|
||||
NUM_NODES = 30 # número de elementos do desenho
|
||||
DESENHO = [] # lista de tuplas dos elementos do desenho
|
||||
# (x, y, diâmetro, espessura, se é seta, pra quem aponta
|
||||
|
||||
|
|
@ -19,7 +19,8 @@ def setup():
|
|||
h, w = height - 2 * MARGIN, width - 2 * MARGIN
|
||||
# calcula número de filas e colunas de 'células' de uma grade
|
||||
n_rows, n_cols = int(h / CEL_SIZE), int(w / CEL_SIZE)
|
||||
# popula uma lista com a grade de pontos que seriam os centros das 'células'
|
||||
# popula uma lista com a grade de pontos que seriam os centros das
|
||||
# 'células'
|
||||
for r in range(n_rows):
|
||||
for c in range(n_cols):
|
||||
x, y = HALF_CEL + c * CEL_SIZE,\
|
||||
|
|
@ -29,25 +30,31 @@ def setup():
|
|||
novo_desenho()
|
||||
println("'s' to save, and 'n' for a new drawing")
|
||||
|
||||
|
||||
def novo_desenho():
|
||||
DESENHO[:] = [] # esvazia a lista de setas e linhas, se tiver um desenho anterior
|
||||
# esvazia a lista de setas e linhas, se tiver um desenho anterior
|
||||
DESENHO[:] = []
|
||||
for _ in range(NUM_NODES):
|
||||
# sorteia um ponto da grade (unpack x, y)
|
||||
x, y = rnd.choice(GRADE_PONTOS)
|
||||
DESENHO.append((
|
||||
DESENHO.append(( # acrescenta na lista de elementos uma tupla com:
|
||||
x, # x
|
||||
y, # y
|
||||
rnd.choice([10, 20, 30]), # size
|
||||
rnd.choice([2, 4, 6]), # strokeWeight
|
||||
# circle size (sorteia um tamanho de círculo)
|
||||
rnd.choice([10, 20, 30]),
|
||||
rnd.choice([2, 4, 6]), # strokeWeight (espessura da linha)
|
||||
rnd.choice([True, False]), # arrow (se é seta)
|
||||
list() # other nodes (para onde aponta)
|
||||
# other nodes (nesta lista pode ser posta ref. a outro elem.))
|
||||
list()
|
||||
))
|
||||
for node in DESENHO: # para cada elemento do desenho
|
||||
rnd_node = rnd.choice(DESENHO) # sorteia outro elemento
|
||||
x1, y1, x2, y2 = node[0], node[1], rnd_node[0], rnd_node[1]
|
||||
if (x1, y1) != (x2, y2): # se não for no mesmo ponto
|
||||
node[-1].append(rnd_node) # "aponta" para este elemento
|
||||
# compara coordenadas, se não for no mesmo ponto
|
||||
if (x1, y1) != (x2, y2):
|
||||
# 'aponta' para este elemento, acrescenta na sub_lista
|
||||
node[-1].append(rnd_node)
|
||||
# pode acontecer de um elemento não apontar para ninguém
|
||||
# caso ele mesmo tenha sido sorteado, ou um outro na mesma posição
|
||||
|
||||
def seta(x1, y1, x2, y2, shorter=12, head=12):
|
||||
"""
|
||||
|
|
@ -70,16 +77,16 @@ def draw():
|
|||
# para cada elemento do desenho, pegue as coordenandas e atributos
|
||||
for x1, y1, d1, sw, arrow, points_to in DESENHO:
|
||||
strokeWeight(sw)
|
||||
for other in points_to:
|
||||
x2, y2 = other[0], other[1]
|
||||
if arrow: # se for arrow == True, desenhe seta preta
|
||||
for other in points_to: # se estiver apontando para alguém
|
||||
x2, y2 = other[0], other[1] # pega as coordenadas do outro elemento
|
||||
if arrow: # se for arrow == True, desenhe seta preta apontando
|
||||
stroke(0)
|
||||
# x1, y1, x2, y2, circle offset, arrow head size
|
||||
seta(x1, y1, x2, y2, d1, sw * 5)
|
||||
else: # senão desenhe linha branca
|
||||
else: # senão desenhe linha branca até ele
|
||||
stroke(255)
|
||||
line(x1, y1, x2, y2)
|
||||
ellipse(x1, y1, d1, d1) # desenha o círculo
|
||||
ellipse(x1, y1, d1, d1) # desenha o círculo
|
||||
|
||||
def keyPressed():
|
||||
if key == 's':
|
||||
|
|
|
|||
Ładowanie…
Reference in New Issue