Le poste de contrôle (PC) / Les graphes /
Plusieurs nodes dans le graphe

Plusieurs nodes permettent les interconnexions


Avant-propos


Correction d'un oubli :

Correction d'un bug :

La déconnexion du timer des fonctions retardées ne se faisait pas systématiquement, provoquant des répétitions inutiles de code.
La méthode utils.py > DateTime.delay() devient :

    def delay(self, client_function, delay=20, *args, **kwargs):
        """ Asynchrone (ne prend pas la main).
        :param client_function: Cette fonction sera exécutée après un délai.
        :param delay: Délai en ms (20ms par défaut).
        :param args: Optionnel. Arguments dans l'appel de la fonction (tuple ou liste).
        :param kwargs: Optionnel. Arguments dans l'appel de la fonction (dictionnaire).
        :return: NA
        """
        key = client_function.__name__
        if key in self.d_tempo:
            try:
                self.d_tempo[key].disconnect()
            except TypeError:
                pass
        else:
            self.d_tempo[key] = QTimer()
            self.d_tempo[key].setSingleShot(True)

        self.d_tempo[key].timeout.connect(lambda: client_function(*args, **kwargs))

        self.d_tempo[key].start(delay)

 


Description

L'ajout de nodes apporte son lot de problèmes à résoudre : chevauchements, passage au premier plan, sélection multiple, etc.
  1. Ajout de 2 autres nodes dans le code provisoire de CtrlScene.
  2. Z-index : lorsque des nodes se chevauchent, passage au 1er plan du node cliqué.
  3. Multi-sélection de nodes, pouvant être déplacée à la souris : mémorisation de chaque position dans le pkl.
  4. Affichage des paramètres généraux d'un node dans le dockable.
  5. Paramètres d'une multi-sélection.
  6. Édition, mémorisation et affichage du titre du node.
  7. Paramètres spécifiques dans le dockable.

1 - Ajout de 2 autres nodes dans le code provisoire.


2 - Z-index - Le node cliqué doit passer au premier plan.


3 - Multi-sélection de nodes :

   Plusieurs clics avec la touche Ctrl appuyée.

   Cliqué-glissé (lasso) à la souris.


4 - Affichage des paramètres généraux du node sélectionné :
    def mouseReleaseEvent(self, ev):
        if ev.button() in [Qt.RightButton, Qt.MiddleButton]:
            """ Molette ou bouton droit relâché. """
            self.right_button_released(ev)
        elif ev.button() in [Qt.LeftButton]:
            """ Affichage des paramètres retardé pour laisser le temps à l'UI de s'actualiser. """
            self.dt.delay(self.o_scene.show_params)
        super().mouseReleaseEvent(ev)

 

 


5 - Paramètres d'une multi-sélection :


6 - Modification et affichage du titre du node :
Options : Vous pouvez modifier le code à votre convenance. Exemple - Ajout d'une tooltip.

UiNode.init_ui(), section Flags, ajoutez cette ligne : 

        self.setToolTip(f"{self.o_node.get_param('Titre du node', 'Le titre')}\n{self.o_node.pos}")

 


7 - Paramètres spécifiques :

 

 


Vérification

Pas de TDD car il s'agit d'un contrôle visuel. Méthode à vérifier : CtrlScene.get_z_max()

Le node cliqué passe au premier plan.


Pas de TDD car il s'agit d'un contrôle visuel. Méthode à vérifier : Parameters.multi_selection()

Multi-sélection : affichage d'une image et d'un texte.


Snippets

Essayez de résoudre cette fonctionnalité par vous-même.
Consultez les réponses (snippets) seulement si vous n'avez pas trop de temps.

Bonjour les codeurs !