Alexandre B A Villares 2018-05-17 08:41:50 -03:00
rodzic eeba077648
commit 08d1325253
3 zmienionych plików z 305 dodań i 0 usunięć

95
s137/data/list.txt 100644
Wyświetl plik

@ -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

BIN
s137/diagram.pdf 100644

Plik binarny nie jest wyświetlany.

210
s137/s137.pyde 100644
Wyświetl plik

@ -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