/
sketch_190608a.pyde
126 lines (112 loc) · 4.15 KB
/
sketch_190608a.pyde
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# Alexandre B A Villares - https://abav.lugaralgum.com/sketch-a-day
"""
A minimal poly editor
- Add points
"""
import pickle
from copy import deepcopy
from poly import Poly
# add_library('GifAnimation')
# from gif_exporter import gif_export
# f_pts = [map(lambda x: x / 5 - 12, pair) for pair in f_pts]
polys = [Poly([(-8, -7), (-1, 0), (1, -9)],
holes=[[(-4, -4), (-6, -6), (-1, -7)], ]
),
Poly([(0, 0), (1, 1), (1, 0)], lw=5, closed=False)
]
def setup():
size(500, 500, P2D)
CELL_SIZE = 15
order = width // CELL_SIZE
x_offset = y_offset = int(order // 2)
Poly.setup_grid(CELL_SIZE, order, x_offset, y_offset)
Poly.text_on = False
Poly.polys = polys
f = createFont("Fira Mono", 16)
textFont(f)
def draw():
background(230)
# grade
Poly.draw_grid()
# polígonos
for p in polys:
p.plot()
def mousePressed():
if keyPressed and keyCode == CONTROL:
for p in polys:
if p.remove_pt(): # io, jo):
return
else:
for ip, p in enumerate(polys):
if p.set_drag(): # io, jo):
Poly.selected_drag = ip
return
Poly.selected_drag = -1 # click outside known vertices deselects
def mouseDragged():
if Poly.selected_drag >= 0 and not keyPressed:
# a Poly point has been selected to be dragged
# and no modifier key is pressed...
if Poly.drag_hole == -1: # if no hole was selected
polys[Poly.selected_drag].outer_pts[Poly.drag_pt] = (
int(mouseX / Poly.cell_size) - Poly.x_offset,
int(mouseY / Poly.cell_size) - Poly.y_offset)
else:
polys[Poly.selected_drag].holes[Poly.drag_hole][Poly.drag_pt] = (
int(mouseX / Poly.cell_size) - Poly.x_offset,
int(mouseY / Poly.cell_size) - Poly.y_offset)
def mouseReleased():
if Poly.selected_drag >= 0 and keyPressed and keyCode == SHIFT:
# a Poly point has been selected to be dragged
# and SHIFT key is pressed...
if Poly.drag_hole == -1: # if no hole wase selected
polys[Poly.selected_drag].outer_pts.insert(
Poly.drag_pt, (int(mouseX / Poly.cell_size) - Poly.x_offset,
int(mouseY / Poly.cell_size) - Poly.y_offset))
else:
polys[Poly.selected_drag].holes[Poly.drag_hole].insert(
Poly.drag_pt, (int(mouseX / Poly.cell_size) - Poly.x_offset,
int(mouseY / Poly.cell_size) - Poly.y_offset))
# Poly.selected_drag = -1 # No poly selected
Poly.drag_hole = -1 # No hole selected
Poly.drag_pt = -1 # No point selected
def keyPressed():
if key == "=":
Poly.selected_drag += 1
if Poly.selected_drag >= len(polys):
Poly.selected_drag = -1
if key == "d" and Poly.selected_drag >=0:
p = deepcopy(polys[Poly.selected_drag])
for i, pt in enumerate(p.outer_pts):
p.outer_pts[i] = (pt[0]+2, pt[1]+1)
polys.append(p)
if key == " " and Poly.selected_drag >=0:
p = polys[Poly.selected_drag]
p.outer_pts[:] = Poly.clockwise_sort(p.outer_pts)
for h in p.holes:
h[:] = Poly.clockwise_sort(h)[::-1]
# if key == "g":
# gif_export(GifMaker, filename=SKETCH_NAME)
if key == "p":
saveFrame(SKETCH_NAME + ".png")
if key == "t":
Poly.text_on = not Poly.text_on
global polys
if key == "s":
with open("data/project.data", "wb") as file_out:
pickle.dump(polys, file_out)
println("project saved")
if key == "r":
with open("data/project.data", "rb") as file_in:
polys = pickle.load(file_in)
println("project loaded")
def settings():
from os import path
global SKETCH_NAME
SKETCH_NAME = path.basename(sketchPath())
OUTPUT = ".png"
println(
"""
![{0}](2019/{0}/{0}{1})
[{0}](https://github.com/villares/sketch-a-day/tree/master/2019/{0}) [[Py.Processing](https://villares.github.io/como-instalar-o-processing-modo-python/index-EN)]
""".format(SKETCH_NAME, OUTPUT)
)