kopia lustrzana https://github.com/villares/sketch-a-day
day 137
rodzic
eeba077648
commit
08d1325253
|
|
@ -0,0 +1,95 @@
|
|||
app
|
||||
app.ele
|
||||
app.mga
|
||||
app.mob
|
||||
app.oca
|
||||
app.ocv
|
||||
app.pfo
|
||||
app.sim
|
||||
app.sim.bio
|
||||
app.sim.fis
|
||||
app.sim.neu
|
||||
app.sim.phy
|
||||
app.snd
|
||||
com
|
||||
com.net
|
||||
con
|
||||
con.cnd
|
||||
con.ite
|
||||
con.ite.nes
|
||||
con.rcr
|
||||
csc
|
||||
csc.ana
|
||||
csc.ana.bon
|
||||
dat
|
||||
dat.sco
|
||||
dat.str
|
||||
dat.str.map
|
||||
dat.tec
|
||||
dat.tex
|
||||
dat.tip
|
||||
dat.var
|
||||
dat.var.atr
|
||||
dat.var.sco
|
||||
dev
|
||||
dev.ide
|
||||
dev.int
|
||||
dev.str
|
||||
dev.tec
|
||||
dev.tec.deb
|
||||
dev.tec.ske
|
||||
dev.tec.suc
|
||||
gra
|
||||
gra.atr
|
||||
gra.atr.cor
|
||||
gra.for
|
||||
gra.img
|
||||
gra.img.pix
|
||||
gra.mov
|
||||
gra.poi
|
||||
gra.tip
|
||||
gra.tri
|
||||
gra.vec
|
||||
inp
|
||||
inp.dat
|
||||
inp.gui
|
||||
inp.hid
|
||||
inp.hid.eve
|
||||
inp.hid.kbd
|
||||
inp.hid.mou
|
||||
inp.tim
|
||||
mat
|
||||
mat.cur
|
||||
mat.geo
|
||||
mat.geo.coo
|
||||
mat.geo.cor
|
||||
mat.geo.cur
|
||||
mat.geo.ver
|
||||
mat.ope
|
||||
mat.rnd
|
||||
mat.tri
|
||||
mat.vec
|
||||
out
|
||||
out.dba
|
||||
out.fil
|
||||
pst
|
||||
pst.fun
|
||||
pst.fun.par
|
||||
pst.fun.par
|
||||
pst.fun.prc
|
||||
pst.fun.rtn
|
||||
pst.oop
|
||||
pst.oop.atr
|
||||
pst.oop.her
|
||||
pst.oop.met
|
||||
pst.rcr
|
||||
pst.sml
|
||||
sin
|
||||
sin.arg
|
||||
sin.cnd
|
||||
sin.com
|
||||
sin.dat
|
||||
sin.dat.str
|
||||
sin.ord
|
||||
snd
|
||||
snd.out
|
||||
Plik binarny nie jest wyświetlany.
|
|
@ -0,0 +1,210 @@
|
|||
# Alexandre B A Villares - https://abav.lugaralgum.com/sketch-a-day
|
||||
# SKETCH_NAME = "s137" # 180516
|
||||
# data/list.txt contém a lista
|
||||
|
||||
add_library('pdf')
|
||||
|
||||
def setup():
|
||||
CONCEPT_LIST = leitura_tabela("list.txt")
|
||||
size(500, 3000)
|
||||
#size(500, 3000, PDF, "diagram.pdf")
|
||||
|
||||
for c in CONCEPT_LIST:
|
||||
Concept.CONCEPTS.append(Concept(c))
|
||||
|
||||
c0_list = [c for c in Concept.CONCEPTS if c.level == 0]
|
||||
c1_list = [c for c in Concept.CONCEPTS if c.level == 1]
|
||||
c2_list = [c for c in Concept.CONCEPTS if c.level == 2]
|
||||
|
||||
for c0 in c0_list:
|
||||
for c1 in c1_list:
|
||||
if c0.l0 == c1.l0:
|
||||
Link.LINKS.append(Link(c0, c1))
|
||||
|
||||
for c1 in c1_list:
|
||||
for c2 in c2_list:
|
||||
if c1.l0 + c1.l1 == c2.l0 + c2.l1:
|
||||
Link.LINKS.append(Link(c1, c2))
|
||||
|
||||
def draw():
|
||||
background(200)
|
||||
for l in Link.LINKS:
|
||||
l.update()
|
||||
for c in Concept.CONCEPTS:
|
||||
c.update()
|
||||
noLoop()
|
||||
# exit() # para uso com o size(500, 300, PDF...) exportação de PDF...
|
||||
|
||||
|
||||
def mouseClicked():
|
||||
""" select and de-select items, shift+click to add items """
|
||||
for c in Concept.CONCEPTS:
|
||||
if c.under_mouse:
|
||||
c.selected = not c.selected
|
||||
if keyPressed and keyCode == SHIFT:
|
||||
x, y = mouseX, mouseY
|
||||
ct = input('new item')
|
||||
if ct:
|
||||
Concept.CONCEPTS.append(Concept(ct, x, y))
|
||||
|
||||
def keyPressed():
|
||||
""" Key pressed event, 'l' to create a link between items """
|
||||
if key == "l":
|
||||
list_of_selected_items = [c for c in Concept.CONCEPTS if c.selected]
|
||||
if len(list_of_selected_items) == 2:
|
||||
a, b = list_of_selected_items
|
||||
Link.LINKS.append(Link(a, b))
|
||||
|
||||
|
||||
class Concept():
|
||||
|
||||
WIDTH, HEIGHT, SPACING = 80, 20, 25
|
||||
MAX_W = 500
|
||||
C0, C1, C2 = MAX_W/4, MAX_W/2, 3*MAX_W/4
|
||||
TEXT_SIZE = 9
|
||||
CONCEPTS = []
|
||||
Y_STACK = 0
|
||||
|
||||
def __init__(self, content, x=None, y=None):
|
||||
self.under_mouse = False
|
||||
self.selected = False
|
||||
self.content = content
|
||||
if len(self.content) == 3:
|
||||
self.level = 0
|
||||
self.l0 = content
|
||||
elif len(self.content) == 7:
|
||||
self.level = 1
|
||||
self.l0 = content[:3]
|
||||
self.l1 = content[3:7]
|
||||
elif len(self.content) == 11:
|
||||
self.level = 2
|
||||
self.l0 = content[:3]
|
||||
self.l1 = content[3:7]
|
||||
self.l2 = content[7:]
|
||||
else:
|
||||
self.level = None
|
||||
|
||||
if x == None:
|
||||
if self.level == 0:
|
||||
self.x = Concept.C0
|
||||
elif self.level == 1:
|
||||
self.x = Concept.C1
|
||||
else:
|
||||
self.x = Concept.C2
|
||||
else:
|
||||
self.x = x
|
||||
if y == None:
|
||||
Concept.Y_STACK += Concept.SPACING
|
||||
self.y = Concept.Y_STACK
|
||||
else:
|
||||
self.y = y
|
||||
|
||||
|
||||
def update(self):
|
||||
self.under_mouse = self.mouse_over()
|
||||
self.move()
|
||||
self.plot()
|
||||
|
||||
|
||||
def move(self):
|
||||
if self.selected and mousePressed:
|
||||
deltaX = mouseX - pmouseX
|
||||
deltaY = mouseY - pmouseY
|
||||
self.x += deltaX
|
||||
self.y += deltaY
|
||||
|
||||
def plot(self):
|
||||
rectMode(CENTER)
|
||||
textAlign(CENTER, CENTER)
|
||||
textSize(Concept.TEXT_SIZE)
|
||||
strokeWeight(2)
|
||||
fill(200)
|
||||
if self.under_mouse:
|
||||
B = 0
|
||||
else:
|
||||
B = 255
|
||||
if self.selected:
|
||||
R = 255
|
||||
else:
|
||||
R = 0
|
||||
stroke(R, 0, B)
|
||||
# fill(200)
|
||||
rect(self.x, self.y, Concept.WIDTH, Concept.HEIGHT, Concept.HEIGHT / 4)
|
||||
fill(0)
|
||||
text(self.content, self.x, self.y)
|
||||
|
||||
def mouse_over(self):
|
||||
return (self.x - Concept.WIDTH / 2 <= mouseX <= self.x + Concept.WIDTH / 2 and
|
||||
self.y - Concept.HEIGHT / 2 <= mouseY <= self.y + Concept.HEIGHT / 2)
|
||||
|
||||
def relative_pos(self, ox, oy):
|
||||
""" compares self position with other (ox, oy) position"""
|
||||
if self.x - Concept.WIDTH <= ox <= self.x + Concept.WIDTH:
|
||||
rx = 10 # inside on x
|
||||
elif ox < self.x - Concept.WIDTH:
|
||||
rx = 0 # x to the left
|
||||
elif ox > self.x + Concept.WIDTH:
|
||||
rx = 20 # x to the right
|
||||
if self.y - Concept.HEIGHT <= oy <= self.y + Concept.HEIGHT:
|
||||
ry = 1 # inside on y
|
||||
elif oy < self.y - Concept.HEIGHT:
|
||||
ry = 0 # y is upwards
|
||||
elif oy > self.y + Concept.HEIGHT:
|
||||
ry = 2 # y is downwards
|
||||
return rx + ry
|
||||
|
||||
def linking_point(self, other):
|
||||
rp = self.relative_pos(other.x, other.y)
|
||||
|
||||
mpx = (self.x + other.x) / 2
|
||||
mpy = (self.y + other.y) / 2
|
||||
|
||||
if rp < 10:
|
||||
px, py = self.x - Concept.WIDTH / 2, self.y
|
||||
cx, cy = mpx, self.y
|
||||
elif rp > 12:
|
||||
px, py = self.x + Concept.WIDTH / 2, self.y
|
||||
cx, cy = mpx, self.y
|
||||
else:
|
||||
if rp <= 11:
|
||||
px, py = self.x, self.y - Concept.HEIGHT / 2
|
||||
else:
|
||||
px, py = self.x, self.y + Concept.HEIGHT / 2
|
||||
cx, cy = self.x, mpy
|
||||
|
||||
return px, py, cx, cy
|
||||
|
||||
class Link():
|
||||
|
||||
LINKS = []
|
||||
|
||||
def __init__(self, a, b):
|
||||
self.a = a
|
||||
self.b = b
|
||||
|
||||
def update(self):
|
||||
self.plot()
|
||||
|
||||
def plot(self):
|
||||
p1x, p1y, c1x, c1y = self.a.linking_point(self.b)
|
||||
p2x, p2y, c2x, c2y = self.b.linking_point(self.a)
|
||||
noFill()
|
||||
stroke(0)
|
||||
strokeWeight(1)
|
||||
bezier(p1x, p1y, c1x, c1y,
|
||||
c2x, c2y, p2x, p2y)
|
||||
|
||||
|
||||
def input(message=''):
|
||||
from javax.swing import JOptionPane
|
||||
return JOptionPane.showInputDialog(frame, message)
|
||||
|
||||
def leitura_tabela(nome_arquivo):
|
||||
import csv
|
||||
with open(nome_arquivo) as arquivo:
|
||||
tabela = []
|
||||
for linha in csv.reader(arquivo):
|
||||
#linha = unicode(linha.strip(), 'utf-8')
|
||||
#linha = [unicode(item.strip(), 'utf-8') for item in linha]
|
||||
tabela.append(linha[0])
|
||||
return tabela
|
||||
Ładowanie…
Reference in New Issue