Graphical User Interface

Choix de langage

Historiquement, les développements graphiques de la suite logicielle WOLF ont été réalisés en Visual Basic 6. De nombreux outils existent sous cette forme et, malgré le fait que le langage ne soit plus officiellement supporté, sont toujours pleinement fonctionnels.

Cependant, il est nécessaire de faire évoluer les outils vers des solutions plus pérennes. Dès lors, après analyse approfondie des possibilités, les choix posés pour les nouveaux développements de l’interface graphique de WOLF sont les suivants :

  • Langages de programmation : Python (3.10)

  • OpenGL

  • Widgets WX et plus spécifiquement son portage sous Python

Ces choix rendent normalement l’interface graphique indépendante du système d’exploitation, « cross-platform GUI », tout en assurant une qualité graphique propre à chaque OS. Les développements quotidiens se réalisent cependant sous Windows. Les tests sous d’autres plateformes ne sont pas réalisés.

Pour l’affichage de données matricielles, le recours aux instructions OpenGL permet de bénéficier de la puissance de la carte graphique même pour des visualisation 2D. Actuellement, il est fait recours aux listes d’affichage pour les rendus 2D. Des techniques plus modernes telles que les shaders, les Vertex Buffer Objects (VBO) ou les Vertex Array Objects (VAO) sont quant à eux utilisés pour le viewer interne 3D.

Le langage Python rend également accessible une panoplie de librairies open source additionnelles. Parmi celles-ci, sont utilisées dans les développements actuels : Numpy, Matplotlib, Pandas, Scipy, Owslib, Pillow, Dbfread, Graphviz, Owslib, Requests, Notebook, Beautifoulsoup4, Typing, Ctypes… La liste complète est disponible dans les requirements.txt` et sont installés automatiquement lors de l’installation du paquet.

Les outils Python de WOLF sont donc accessibles via un paquet spécifique wolfhece disponible sur Pypi.org, ce qui facilite grandement le déploiement et les mises à jour.

Le code source est hébergé sur le Gitlab de l’ULiège afin d’assurer un suivi du développement organisé sous forme de branches.

Interaction code de calcul

Le langage Python est un langage interprété pour lequel l’efficacité de calcul n’est pas une priorité. Parmi les nombreuses techniques possibles pour remédier à ce problème, le choix d’une interaction avec un code Fortran compilé a semblé une évidence compte-tenu de l’historique de WOLF.

Ainsi, une librairie Python compilée avec l’outil f2py permet l’interaction de scripts et de routines de calcul plus consommatrices en temps. Cette librairie ne permet toutefois pas une interaction complète. Une approche complémentaire basée sur ctypes a donc été développée notamment afin de fournir une porte vers les paramètres à optimiser des codes de calcul. Cette interaction Fortran/ctypes/Python permet le partage direct de mémoire vive, évitant des lenteurs d’échanges par fichiers. Ceci est fortement exploité dans le code hydrologique lors des phases de calibration/optimisation. Dans la même idée de flexibilité, il est possible de recourir à des fonctionnalités de callbacks permettant la programmation d’une routine en Python et appelée lors des calcul Fortran. Les interactions Python🡪Fotran ou Fortran🡪Python sont donc opérationnelles grâce à l’emploi d’une librairie dynamique DLL. Cette approche est plus générale que l’utilisation de f2py et vient donc la compléter.

Gestion des données

En l’état, l’interface graphique Python actuelle permet d’afficher des informations:

  • matricielles en fausses couleurs (topographie, index de bassin versant, accumulation…)

  • vectorielles (contours, réseau hydrographique…)

  • ponctuelles (stations de mesures, exutoires locaux…)

  • extraites via des webservices WMS (Walonmap - orthophotoplans, réseau aqualim, IGN Français…)

Toutes ces données peuvent être combinées.

Il ne s’agit toutefois pas d’un SIG et ne le sera plus que probablement jamais.

Le système de référence est fixe (Lambert72 par défaut pour la Belgique). Le cas échéant, des conversions de système sont possibles au travers de l’outil GDAL.

Lancement de l’application

Lors de l’installation du paquet wolfhece, un exécutable nommé wolf (et wolf_gui) est créé et ajouté au répertoire Scripts de l’installation Python. Il est donc possible de lancer l’application depuis n’importe quel répertoire en tapant wolf (ou wolf_gui) dans une console si le Python est dans votre PATH.

Note

Pour plus de sécurité et d’isolation, il est recommandé de lancer l’application depuis un environnement virtuel Python. Pour cela, il est nécessaire d’installer le paquet virtualenv via la commande pip install virtualenv. Ensuite, il est possible de créer un environnement virtuel via la commande python -m venv wolfenv (le nom wolfenv est donné à titre d’exemple). Enfin, il est nécessaire d’activer l’environnement virtuel via la commande .wolfenvScriptsactivate sous Windows ou source wolfenv/bin/activate sous Linux. L’application peut alors être lancée via la commande wolf.

Philisophie générale

L’interface graphique est multifenêtres. Chaque fenêtre est indépendante. Il n’est pas actuellement possible de mettre minimiser l’ensemble de l’application en une seule opération.

Les fenêtres sont redimensionnables et peuvent être déplacées. Cette configuation est bien adaptée aux postes de travail à plusieurs écrans.

Durant le chargement, un logo d’application apparaît. Le chargement total peut prendre jusqu’à 30 secondes. Une tentative de connexion au site “hydrometrie.wallonie.be” est réalisée.

Après chargement, trois fenêtres sont ouvertes :

  • La fenêtre principale

  • la fenêtre de propriétés

  • la fenêtre de log

Initial windows

Vidéo : 3 fenêtres principales

Note

La fenêtre de propriétés est liée à la fenêtre principale et se place par défaut à sa droite.

Si la touche Ctrl est maintenue enfoncée, la fenêtre de propriétés se déplace avec la souris de’ l’utilisateur.

Un repositionnement de la fenêtre de propriétés est possible par un simple déplacement via sa barra de titre. Elle doit revenir à sa place dès que la touche CTRL est relâchée.

Si MAJ est maintenue enfoncée, la fenêtre de propriétés est replacée à droite de la fenêtre principale et sa hauteur est ajustée à la même hauteur que la fenêtre principale.

Elle affiche les informations de tous les objets visibles et qui se trouvent sous le curseur de la souris.

Il est possible d’activer un mode multiviewers via le menu File`🡪`Multiviewer. Dans ce mode, des fenêtres principales additionnelles sont créées de même que leur fenêtre de propriétés.

Chaque fenêtre principale dispose de son contexte OpenGL et de ses propres données.

Il est possible de les lier, ce qui signifie que tout redimensionnement sera appliqué aux autres fenêtres. Le niveau de zoom est également appliqué.

La fenêtre de propriétés proposera, si possible, les informations de toutes les données sous la position du curseur. Ceci permet via une seule fenêtre de comparer les informations de plusieurs fenêtres principales.

Note

Il n’y a pas de limite au nombre de fenêtres principales. Cependant, il est recommandé de ne pas en ouvrir trop pour des raisons de performances. Ceci est toutefois à tester en fonction de la puissance de votre machine et de votre carte graphique.

Attention

Il n’y a pas actuellement de barre d’outils. Les actions sont réalisées via le menu contextuel de la fenêtre ou des raccourcis clavier.

La liste des raccourcis clavier est disponible via le menu Help`🡪`Shortcuts.

Il est possible que les raccourcis évoluent en fonction des versions.

Il est possible de créer ou d’ajouter certains éléments via le menu File`🡪`Add ou File`🡪`Create.

Create menu Add menu

Attention

La position des entrées pourra changer sans préavis, de même que les noms associés.

Les données sont chargées en mémoire vive et associées à un ID. En fonction de leur type, elles sont affichées dans l’arbre situé à gauche de la fenêtre principale.

Il est possible de masquer/afficher les données en décochant/cochant l’entrée de l’arbre. Pour les matrices/arrays un message apparaîtra vous demandant s’il faut simplement masquer la donnée ou décharger complètement les données de la mémoire vive. Ceci peut être utile pour libérer de la mémoire vive lors de l’analyse de portion de terrain sans pour autant supprimer la donnée du projet courant. Décocher tout en maintenant la touche Ctrl enfoncée n’affichera pas le message et masquera simplement la donnée sans la décharger.

Attention

La gestion de la mémoire est sous la responsabilité du garbage collector de Python. Il est donc possible que la mémoire ne se libère pas instantanément.

Il faut également noter qu’en cas de déchargement, un temps supplémentaire de lecture est attendu qui dépend de la taille et de votre type de disque dur.

Note

Chaque entrée de l’arbre peut être déployée ou rétractée.

Certaines entrées peuvent être préencodées en fonction de l’app ouverte. Il s’agit par exemple du grid ou des services WMS associé à Walonmap.

Tree

Au fur et à mesure du chargement des données, en arrière-plan, les derniers objets sont mémorisés comme actifs. Il s’agit des objets de type:

  • active_zones: Zones

  • active_zone: zone

  • active_vector: vector

  • active_vertex: wolfvertex

  • active_array: WolfArray

  • active_bc: BcManager

  • active_view: WolfViews

  • active_cs: crosssections

  • active_tri: Triangulation

  • active_tile: Tiles

  • active_particle_system: Particle_system

  • active_viewer3d: Wolf_Viewer3D

Attention

Cet état de fait est extrêmement important à garder en mémoire car cela a un impact direct sur les actions réalisées. Plusieurs actions travaillent en effet sans (re)poser la question à l’utilisateur sur l’objet courant ou sur un groupe d’objets courants.

Afin rendre un objet actif, il “suffit” de double-cliquer sur l’ID dans l’arbre.

Afin de réinitialiser les objets actifs, il faut presser la touche Esc.

Déplacement dans la fenêtre principale

Les actions possible sont les suivantes :

  • zoom avant/arrière
    • via la molette de la souris

    • écran tactile normalement supporté, de même que les trackpad

    • touches z, Z

  • déplacement latéral
    • via le clic gauche de la souris (maintenu enfoncé et déplacé)

    • via les flèches du clavier

  • recentrage sous la position du curseur via double click-gauche

  • Autoscale via F5

  • Refresh via F7

Presse-papier

Il est possible de copier/coller des données matricielles sélectionnées dans une matrice vers une autre matrice via les raccourcis clavier Ctrl+C et Ctrl+V en activant successivement les 2 objets. certaines données seront également copiées dans le presse-papier pour utilisation externe.

Il est également possible de copier/coller les positions sélectionnées (et non les données) via les raccourcis Ctrl+C` et Ctrl+Alt+V ou AltGr+V.

Certaines lignes de scripts peuvent êtres copiées dans le press-papier par Ctrl+Alt+C ou AltGr+C (par exemple dans un script de définition de zones d’infiltration).

L’entièreté du contenu du canvas OpenGL peut être copié vers le presse-papier via la touche C ou le raccourci Alt+C et collé dans n’importe quelle application supportant les images. C copiera le canvas sans axes tandis que Alt+C copiera le canvas avec axes via la librairie Matplotlib. L’intervalle des ticks est paramétrable dans les options de l’application.

Chargement des données/résultats

Il est donc possible de charger/créer des données via les menus File`🡪`Add ou File`🡪`Create.

Il est également possible de charger un fichier de projet via le menu File`🡪`Open project.

Attention

Actuellement, le support des projets est limité. Il est nécessaire de les créer à la main via un éditeur de texte.

La sauvegrade de projet sur base des éléments actuellement chargés n’est pas encore pleinement opérationnel.

L’utilisation d’un projet est cependant nécessaire pour charger efficacement un large set de données ou un tuilage.

Matrices

Les formats de fichiers supportés pour les matrices sont les suivants :

  • .bin : binaire WOLF

  • .top : binaire WOLF associé à une simulation cs-2D

  • .tif : GeoTIFF

  • .flt : Float ESRI

  • .npy : Numpy

  • .npz : Numpy compressé

  • .* : sans spécification de format, le format est équivalent au .bin

Supported array formats

Il est possible de lire une portion d’une grande matrice via Add array and crop. Dans ce cas, une fenêtre s’ouvre pour définir les limites de la portion à extraire.

Chaque matrice dispose de sa propre fenêtre de propriétés (raccourci Ctrl+double-click gauche) permettant de gérer la palette de couleur mais également des opérations de sélection de mailles, d’interpolation, d’opérations mathématiques…

Note

Ces opérations seront décrites ultérieurement

Array properties 1 Array properties 2 Array properties 3 Array properties 4 Array properties 5 Array properties 6 Array properties 7

Chaque matrice dispose en outre de sa propre gestion vectorielle accessible via le bouton Manage vectors du premier onglet. Il est également possible de lire/écrire ces informations vectorielles via les boutons situés en-dessous.

Entre les boutons, se trouve 2 champs textuels qui affichent quel vecteur est actuellement actif ainsi que sa zone parent.

Les méthodes de sélection de mailles sont les suivantes :

  • Select all nodes : sélectionne toutes les mailles

  • by clicks : sélectionne les mailles individuellement (click droit)

  • inside active vector : sélectionne les mailles à l’intérieur du vecteur actif

  • inside active zone : sélectionne les mailles à l’intérieur de la zone active

  • inside temporary vector : sélectionne les mailles à l’intérieur d’un vecteur temporaire stocké dans la zone tmp du gestionnaire de vecteurs

  • along active vector : sélectionne les mailles le long du vecteur actif

  • along active zone : sélectionne les mailles le long de la zone active

  • along temporary vector : sélectionne les mailles le long d’un vecteur temporaire stocké dans la zone tmp du gestionnaire de vecteurs

L’action de sélection est activée par le bouton Actions ! et désactivée par la touche Return du clavier ou un double-click droit (pas adapté à tous les modes).

Les mailles sélectionnées peuvent être transférées vers un dictionnaire spécifique via Move current selection to… ou via les touches 1 à 9 du Numpad (si présent su le PC). Ce transfert est utile pour certaines opérations d’interpolation ou de génération de scripts.

How to create/save/add array in the viewer ?

How to select nodes of an array in the viewer ?

Attention

Description plus détaillée à venir

Vecteurs

Les formats de fichiers supportés pour les vecteurs sont les suivants :

  • .vec : format 2D WOLF

  • .vecz : format 3D WOLF

  • .shp : ESRI Shapefile

  • .dxf : AutoCAD

  • .* : sans spécification de format, le format est équivalent au .vec

Supported vector formats

Chaque zone vectorielle dispose de sa propre fenêtre de propriétés (raccourci Ctrl+double-click gauche) permettant de gérer le découpage en objet “zone” et “vector”.

Vector properties

La fenêtre de propriétés est décomposée en 2 grande parties:

  • la partie gauche est relative à la composition en “zones” et “vectors” avec un arbre et une série de boutons d’action

  • la partie droite est relative aux données du vecteur actif (Coordonnées X-Y-(Z) et boutons d’action)

La zone tabulaire de droite permet d’obtenir les coordonnées et de les manipuler. Il suffit de double-cliquer sur un vecteur pour le rendre actif (idem pour une zone).

Des opérations de copier/coller sont possibles dans le tableau:

  • depuis/vers Excel ou autre tableur

  • entre cellules (sélection multiple possibles)

La mise à jour des données est réalisée via le bouton Update coordonates. Sans cette opération, les modifications ne sont pas prises en compte.

Via les boutons de la colonne de droite, les actions suivantes sont possibles:

  • Add rows : ajout de lignes au tableau, par exemple en vue de coller des données d’un autre tableur (par défaut 10 lignes sont activées)

  • Add : active l’action d’ajout de points via la viewer ; les points sont ajoutés par click-droit, l’image est mise à jour dynamiquement

  • Add and parallel : active l’action d’ajout de points et création de parallèles via la viewer ; les points sont ajoutés par click-droit, l’image est mise à jour dynamiquement

  • Create parallel : création de parallèles via boîte de dialogue

  • Modify : active l’action de modification de points via la viewer ; le point à modifier est trouvé par recherche du plus proche et replacé par click-droit, l’image est mise à jour dynamiquement

  • Insert : active l’action d’insertion de points via la viewer ; le point à insérer est trouvé par recherche du segment le plus proche et inséré par click-droit, l’image est mise à jour dynamiquement

  • Copy and Split : Crée une copie du vecteur et le divise sr base des informations entrées dans la boîte de dialogue

  • Zoom on active vector : recentre et zoome sur le vecteur actif

  • Zoom on active vertex : recentre et zoome sur le vertex actif (défini par la position choisie dans le tableur)

  • Veify vertices positions : vérifie la position des vertices et les corrige si nécessaire (utile pour interpolation de sections en travers)

  • Evaluate s : calcule la position de chaque vertex selonj la trace de la section (en 2D ou en 3D)

  • Get xy from sz : calcule les coordonnées X-Y des vertices à partir de la trace de la section

  • Interpolate coords : interpolation linéaire de la coordonnée Z de chaque vertex sur base des valeurs non nulles et de la coordonnée S

  • Get values (self or active array) : récupère les valeurs de la matrice active sous les positions X-Y des vertices et les place dans le tableur comme Z

  • Get values (all arrays) : récupère les valeurs de toutes les matrices sous les positions X-Y des vertices et les place dans le tableur dans les colonnes à droite de X-Y

  • Get values (all arrays and remeshing) : récupère les valeurs de toutes les matrices sous les positions X-Y des vertices après redécoupage et les place dans le tableur dans les colonnes à droite de X-Y

Note

Une valeur nulle pour l’opération d’interpolation est soit un vide, soit la valeeur -99999.

Chaque vecteur a également sa fenêtre de propriétés accessible via un click-droit sur le vecteur dans l’arbre. Il est possible d’y définir la couleur, l’épaisseur du trait, une légende attachée et éventuellement une image attachée.

Vector properties

Attention

Description plus détaillée à venir

Nuage de points

Les formats de fichiers supportés pour les nuages de points sont les suivants :

  • .xyz : format XYZ (ACSII) avec attributs éventuels

  • .dxf : AutoCAD

  • .shp : ESRI Shapefile

  • .txt : format XYZ (ACSII)

  • .* : sans spécification de format, le format est équivalent au .xyz

Supported point cloud formats

Modélisations 2D

Il est possible de charger des résultats de modélisations 2D (Fortran ou GPU).

Note

Si un résultat de modélisation 2D est chargé, un menu supplémentaire Options 2D apparaît.

Les représentations graphiques sont les suivantes :

  • hauteur d’eau

  • altitude de surface libre

  • topographie

  • débit spécifique selon X

  • débit spécifique selon Y

  • Norme des débits spécifiques

  • Vitesse selon X

  • Vitesse selon Y

  • Norme des vitesses

  • Charge hydraulique

  • Froude

  • Energie cinétique turbulente (si calculée)

  • Taux de dissipation turbulente (si calculé)

  • Viscosité turbulente 2D (si calculée)

  • Viscosité turbulente 3D (si calculée)

  • Champs vectoriel de débits spécifiques

  • Champs vectoriel de vitesses

  • Nombre de Shields (loi de Manning/Strickler)

  • Diamètre critique d’emportement - selon Shields (calcul itératif)

  • Diamètre critique d’emportement - selon Izbach (calcul explicite)

  • Diamètre critique de mise en suyspension (50%)

  • Diamètre critique de mise en suyspension (100%)

  • Vue combinée:
    • Norme de débit + champ vectoriel

    • Norme de vitesse + champ vectoriel

    • altitude de surface libre + champ vectoriel de débits

    • hauteur d’eau + champ vectoriel de débits

    • altitude de surface libre + champ vectoriel de vitesses

    • hauteur d’eau + champ vectoriel de vitesses

    • Topographie + hauteur d’eau + champ vectoriel de vitesses

    • Topographie + hauteur d’eau + champ vectoriel de débits

    • Topographie + altitude de surface libre + champ vectoriel de débits

2D views

Certaines représentations graphiques sont associées à des palettes de couleurs spécifiques qui peuvent toutefois être modifiées dans les propriétés.

Note

Lors de la lecture des résultats, les 3 inconnues de calcul pour le pas de temps souhaité sont chargées en mémoire vive. Elles sont alors éventuellement combinées pour fournir l’information demandée.

Il faut noter que le calcul du diamètre critique de Shields est une formule implicite qui nécessite une résolution itérative. Cela peut donc prendre un certain temps pour les grands domaines.

Attention

Description plus détaillée à venir

Gestion et opérations

La plupart des opérations sont réalisées via le menu contextuel de la fenêtre principale ou via les boutons d’action des fenêtres de propriétés.

Matricielles

Travailler avec plusieurs matrices

Modification de valeurs ponctuelles

Interpolation spatiale

Utilisation des groupes mémoire pour l’interpolation :

Autres vidéos sans commentaires :

Mémoire de sélection

  • Comment resélectionner des mailles mises en mémoire?

  • Comment dilater/éroder une sélection?

  • Copier les coordonnées/indices dans le presse-papier pour export dans un autre outil (ex. Excel).

Vectorielles

Attention

Description plus détaillée à venir

Modèles 2D

Attention

Description plus détaillée à venir

Conditions aux limites

Attention

Description plus détaillée à venir

Combinées

Attention

Description plus détaillée à venir

Viewer 3D

Deux modes de visualisation 3D sont disponibles:
  • une vue matricielle

  • une vue combinée du nuage de points Lidar et de la matrice

Vue matricielle

Attention

Description plus détaillée à venir

Vues combinées du nuage de points Lidar et de la matrice

Attention

Description plus détaillée à venir

Données extérieures

Via les services WMS, il est possible de charger des données extérieures.

Actuellement, pour la Région wallonne, il est possible d’afficher les données suivantes en arrière-plan:

  • orthophotoplans 1971

  • orthophotoplans 1994-2000

  • orthophotoplans 2006-2007

  • orthophotoplans 2009-2010

  • orthophotoplans 2012-2013

  • orthophotoplans 2015

  • orthophotoplans 2016

  • orthophotoplans 2017

  • orthophotoplans 2018

  • orthophotoplans 2019

  • orthophotoplans 2020

  • orthophotoplans 2021

  • orthophotoplans 2022 printemps

  • orthophotoplans 2022 été

  • orthophotoplans 2023 été

  • orthophotoplans France

Note

Les orthophotoplans sont chargés directement depuis le site Walonmap pour le zoom et la précision d’affichage courante. Ceci afin de minimiser les échanges réseau et le stockage local/mémoire vive.

Il n’y a pas de rechargement automatique lors d’opérations de translation/zoom. C’est à l’utilisateur de le demander via la touche F7 (chaque appui sur la touche déclenchera l’action de téléchargement depuis Walonmap).

Actuellement, pour la Région wallonne, il est possible d’afficher les données suivantes en avant-plan:

  • réseau aqualim

  • Aléa d’inondation en vigueur

  • Carte Lidaxes

  • Secteurs statistiques

  • Limites administratives

  • Plan parcellaire

Via l’entrée Others, il est possible d’ajouter:

  • la position des stations actives du réseau de mesure du site hydrometrie.wallonie.be (les propriétés de cette couche permet d’afficher une fenêtre de chargement de données)

  • les données du PICC (via extract du fichier .gdb complet – si disponible)

  • les données du cadastre (via extract du fichier .gpkg complet – si disponible)

  • les plans terriers (via affichage des fichiers .tif – si disponibles)

Attention

Ces données sont en rapport direct avec le projet MODREC et ne sont pas nécessairement disponibles pour le grand public.