Base de travail pour les graphes et les calculs
Avant-propos
od_pkl
: self.o_pkl.od_pkl
.od_pkl.print()
.Pkl.restore()
, grace à la lecture du fichier params.pkl
.Dictionary._sort_cut()
.Pkl.restore()
par celle-ci :
self.od_pkl = Dictionary(d_pkl, max_keys=100) # OrderedDict de tout le graphe (vue + nodes + edges)
Le nombre maximum de clés est 100, vous pouvez le modifier.
utils.py > Dictionary.read()
:
self._sort_cut(l_keys[0])
.Dictionary.write()
mais pas dans Dictionary.read()
.Description
Un node inactif devient grisé ⇒ tous ses edges se désactivent (grisés).
RSI
dans cette image).MACD
dans cette image).MACD-2 → Plots-6
).MACD
est inactif car le seul signal en entrée est inactif (case décochée dans les paramètres).MM-1
devient inactif.Plot-3
devient inactif.RSI
est inactif car sa checkbox est décochée.FFT-10
devient inactif.Plot-4
devient inactif Aleatoire-8
reste actif car il a au moins un edge de sortie actif (vers Union-5
).Signaux-0
reste actif car il a au moins un edge de sortie actif (vers Union-5
).UiNode.state_brush()
.@property UiEdge.state_pen()
, à coder ... 4 la couleur choisie ici est #888
.b_on
à la classe CtrlEdge
: à coder ... 3CtrlScene.infratructure()
: à coder ... 2
def infrastructure(self):
""" Le but de cette méthode est de :
- Positionner le flag b_on de chaque node.
- Positionner le flag b_on de chaque edge.
- Rafraîchir l'affichage pour griser les éléments inactifs (b_on == False).
"""
l_status_ante = list()
l_grnodes, l_gredges = self.get_grnodes(), self.get_gredges() # Capture unique pour ne pas alourdir.
""" On positionne le flag de chaque node, selon son état initial. """
for o_grnode in l_grnodes:
o_grnode.o_node.b_on = o_grnode.o_node.get_state()
l_status_ante.append(o_grnode.o_node.b_on)
""" On lève tous les flags des edges. """
for o_gredge in l_gredges:
o_gredge.o_edge.b_on = True
l_status_ante.append(True)
for nb_loops in range(10):
""" Positionnement des flags b_on de tous les nodes et de tous les edges. """
# à coder ...
""" Rafraîchit l'affichage du graphe. """
self.o_grscene.update()
CtrlScene.setup()
, à la fin :
""" Infrastructure. """
self.infrastructure()
CtrlNode.get_state()
n'existe pas. Créons-la.CtrlNode.get_state()
:
def get_state(self):
""" Chaque node, selon ses spécificités, retourne un booléen de son état on/off (True/False).
Attention ! Cette méthode est surchargée par les nodes n'ayant pas de sockets d'entrée (générateurs).
"""
b_on = False
if self.b_chk:
for key in self.o_params.od_params.key_list():
if key[-1] == 'Signal actif':
if self.o_params.od_params.read(key, False):
b_on = True
break
return b_on
Je répète : cette méthode doit être surchargée par les nodes générateurs : 3 méthodes à coder ... 1
CtrlNode.set_checked()
devient :
def set_checked(self, val):
self.b_chk = val
""" Enregistrement. """
self.od_pkl.write([self.s_id, 'b_chk'], val)
self.o_scene.o_pkl.backup()
""" Infrastructure. """
self.o_scene.infrastructure()
Signal actif
d'un des signaux, dans les paramètres d'un node.CtrlNode.refresh()
:
def refresh(self, l_keys):
""" Titre du node. """
if l_keys[-1] == 'Titre du node':
self.o_grnode.set_title()
""" Couleur des sockets et des edges. """
if l_keys[-2] == 'Couleurs':
self.set_colors(l_keys[1:])
""" Fin de refresh - Appel conditionnel à infrastructure(). """
if self.b_chk and (l_keys[0] == 'infrastructure' or l_keys[-1] == 'Signal actif'):
""" Les nodes de type générateur doivent insérer le mot 'infrastructure'
en 1ère place dans la liste l_keys[], car ils n'ont pas 'Signal actif' dans leurs paramètres. """
self.o_scene.infrastructure()
infrastructure()
est conditionné :
Signal actif
modifiée,'infrastructure'
dans la liste l_keys[]
, à l'indice 0.refresh()
de certains nodes de type générateur doit être modifiée :
/nodes/generateurs/histos.py > Node.refresh()
:
def refresh(self, l_keys):
""" Propagation en cascade : Seulement sur les noms de signaux (type valeur = bool). """
if isinstance(self.get_param(l_keys[-1]), bool):
self.lo_sockets_out[0].to_update()
""" Infrastructure :Insertion de 'infrastructure' en 1ère place. """
l_keys = ['infrastructure'] + l_keys
super().refresh(l_keys)
/nodes/generateurs/signaux.py > Node.refresh()
: Même code que ci-dessus.
self.show_params()
(même indentation).CtrlScene.remove_items()
:
""" Infrastructure. """
self.infrastructure()
self.show_params()
(même indentation).CtrlScene.new_node()
:
""" Infrastructure. """
self.infrastructure()
self.o_scene.save_edges(backup=True)
(même indentation).UiView.stop_edge()
:
""" Infrastructure. """
self.o_scene.infrastructure()
Il reste encore 2 endroits où recalculer l'infrastructure : à vous des les trouver.
Lorsqu'on crée un court-circuit (secousse) : à coder ... 5.
Lorsqu'on croise 2 edges (Sélection + touche Tab
) :à coder ... 6.
Vérification
Traiter chaque point après avoir validé le précédent.
Histos
ou Signaux
est inactif lorsque sa checkbox est cochée, mais aussi que toutes les cases des ses paramètres sont décochées.Signal actif
sont décochés.Tab
), l'infrastructure est recalculée.Snippets
Bonjour les codeurs !