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 `.\wolfenv\Scripts\activate` 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 .. image:: _static/ui/initial_windows.png :width: 600px :align: center :alt: Initial windows Vidéo : 3 fenêtres principales .. youtube:: zZ4SebFyRs8 :width: 600px :align: center .. 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`. .. image:: _static/ui/create.png :width: 600px :align: center :alt: Create menu .. image:: _static/ui/add.png :width: 600px :align: center :alt: 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. .. image:: _static/ui/tree.png :width: 300px :align: center :alt: 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` .. youtube:: zxa5XRs8d7Y :width: 600px :align: center Mémoire de position ------------------- Il est possible de mémoriser l'emprise actuelle de la fenêtre principale. Plusieurs positions sont possibles, chacune avec un nom associé. Cette fonctionnalité permet de se déplacer librement dans le domaine tout en permettant de revenir facilement à des positions spécifiques, y compris avec une taille de viewer différente (via `Canvas height`, la hauteur de la zone de dessin en pixels). La largeur est quant à elle calculée pour respecter l'emprise spatiale définie par les bornes selon X et Y. .. image:: _static/ui/memory_view_menu.png :width: 400px :align: center :alt: Memorize position Après avoir choii `Tools/Memory views...`, une nouvelle fenêtre apparaît qui permet de stocker l'emprise courante de la vue et la taille de la fenêtre. .. image:: _static/ui/memory_view_frame.png :width: 150px :align: center :alt: Memorize position - Frame Une aide contextuelle est disponible pour chaque boutons. Description des boutons : - `+` : ajoute une vue sur base de ce qui est dans les champs textuels - `-` : supprime la vue sélectionnée - `Reset` : Efface toutes les vues - `Zoom on` : Applique la vue sélectionnée - `Get` : Remplir les champs texte avec les caractéristiques de la vue courante - `Apply` : Utilise les valeurs des champs pour mettre à jour une vue existante - `Save` : Sauvegarde des vues dans un fihcier texte JSON - `Load` : Récupération des vues depuis un fichier texte JSON .. attention:: `Apply` demande qu'une vue existe et soit sélectionnée. Il faut donc commencer par ajouter une vue via `+` même si ces propriétés sont ensuite modifiées. Menu contextuel -------------------------------- Un menu contextuel est disponible par click-droit dans la partie de l'arbre. Il propose les actions suivantes qui seront appliquées au dernier objet activé : - Save : sauvegarde de l'objet sur disque -- si pas de nom de fichier associé, une fenêtre de dialogue s'ouvre - Save as : sauvegarde de l'objet sur disque -- une fenêtre de dialogue s'ouvre - Rename : modification d' l'ID - Duplicate : (WolfArray) duplication de l'objet avec changement potentiel de typage interne - Up : déplacement de l'objet dans l'arbre -- vers le haut - Down : déplacement de l'objet dans l'arbre -- vers le bas - Properties : ouverture de la fenêtre de propriétés de l'objet (si applicable) .. image:: _static/ui/tooltip.png :width: 300px :align: center :alt: Tooltip 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. .. attention:: Une seule palette de couleurs sera utilisée lors de cette opération. Dans le options globales, il est possible de choisir de donner la préférence à la palette de la matrice active ou au résultat actif. Si les 2 cases sont cochées, priorité sera donnée à la matrice active. .. image:: _static/ui/global_options.png :width: 300px :align: center :alt: Global options 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 :ref:`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 .. image:: _static/ui/formats_matrices.png :width: 300px :align: center :alt: 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 .. image:: _static/ui/prop_array1.png :width: 250px :align: center :alt: Array properties 1 .. image:: _static/ui/prop_array2.png :width: 250px :align: center :alt: Array properties 2 .. image:: _static/ui/prop_array3.png :width: 250px :align: center :alt: Array properties 3 .. image:: _static/ui/prop_array4.png :width: 250px :align: center :alt: Array properties 4 .. image:: _static/ui/prop_array5.png :width: 250px :align: center :alt: Array properties 5 .. image:: _static/ui/prop_array6.png :width: 250px :align: center :alt: Array properties 6 .. image:: _static/ui/prop_array7.png :width: 250px :align: center :alt: 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 ? .. youtube:: GkztuA0apNo :width: 600px :align: center How to select nodes of an array in the viewer ? .. youtube:: FILvWv5vCmk :width: 600px :align: center .. attention:: Description plus détaillée à venir Palette de couleurs ~~~~~~~~~~~~~~~~~~~~ Comme mentionné plus haut, chaque matrice dispose de sa propre palette de couleurs. Par défaut, une palette à 16 couleurs est employée. En mode automatique, les sauts de couleurs sont calculés de manière à répartir les couleurs de façon homogène (même nombre de mailles dans chaque intervalle, répartition par quantiles). Les couleurs sont interpolées linéairement entre chaque couple de couleurs sur base de la valeur locale de la matrice. .. image:: _static/ui/colormap_linear.png :width: 500px :align: center :alt: Exemple de matrice avec interpolation linéaire de couleurs Il est également possible de représenter les matrices avec des couleurs discrètes. Dans ce cas, il faut cocher la case "Uniform in parts". .. image:: _static/ui/colormap_constant_in_parts.png :width: 500px :align: center :alt: Exemple de matrice avec couleurs discrètes Les couleurs et leurs répartitions peuvent être changées à volonté. Il suffit pour cela de modifier le tableau de couleurs et de cliquer sur `Apply`. Les composantes de couleur seront remplies automatiquement sur base de la couleur choisie via `Choose color for current value`, pour la ligne du tableur sélectionnée. Il est également possible de sauvegarder la palette de couleurs pour une utilisation ultérieure dans un fichier d'extension `.pal` (fichier texte ASCII). Il est bien entendu possible de charger une palette depuis un fichier `.pal` ou depuis une palette préconfigurée via `Load precomputed`. Les palettes proposées via ce bouton se situent dans le répertoire `models`du paquet `wolfhece`. Il est possible de générer une image de la palette de couleurs via le bouton `Create image`. Une répartition semi-automatique des valeurs est également possible via `Evenly spaced`. On peut alors choisir une valeur minimale et opter soit pour une valeur maximale, soit pour une intervalle. Lors de l'export du canvas sous forme d'image, la palette de couleurs est éventuellement exportée. .. image:: _static/ui/export_canvas_linear.png :width: 300px :align: center :alt: Export canvas with linear colormap .. image:: _static/ui/export_canvas_discrete.png :width: 300px :align: center :alt: Export canvas with discrete colormap Vecteurs ~~~~~~~~~~~~ Les :ref:`formats de fichiers supportés pour les vecteurs <(multi)Polygon, (multi)Polylines>` 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 .. image:: _static/ui/formats_vecteurs.png :width: 300px :align: center :alt: 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". .. image:: _static/ui/prop_zones.png :width: 600px :align: center :alt: 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. .. image:: _static/ui/prop_vector.png :width: 500px :align: center :alt: Vector properties .. attention:: Description plus détaillée à venir Nuage de points ~~~~~~~~~~~~~~~ Les :ref:`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 .. image:: _static/ui/formats_clouds.png :width: 300px :align: center :alt: Supported point cloud formats Données Lidar - XYZ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Les données Lidar sont un type particulier de nuage de points. Elles sont généralement stockées dans des fichiers LAS (texte) ou LAZ (binaire). Dans Wolf, il est possible de charger un ensemble de données LAZ après un prétraitement qui ne va conserver que les données vraiment utiles: - Coordonnées X, Y, Z - classe .. image:: _static/laz/add_from_gridinfos.png :width: 400px :align: center :alt: Lidar from gridinfos Ces informations sont stockées dans une structure de répertoires spécifique qui permet de charger rapidement les données (habituellement un tuilage de 50 m x 50m). Cette structure est décrite dans des fichiers "gridinfo.txt", situé dans chaque sous-répertoire, contenant: - l'emprise selon X : Xmin, Xmax - l'emprise selon Y : Ymin, Ymax - le nombre de sous-tuiles selon X et Y : Nx, NbY - La structure du nom de fichier (exemple : 237500_145000_x1_y1_xyz.bin) - le format de stocage (exemple : xy_float32) Le chargement de la donnée via le menu `LAZ` 🡪 `LAZ grid` 🡪 `Initialize from GridInfos` permet au viewer d'analyser les données disponibles. Cela va ensuite permettre: - de restreindre les données selon l'emprise du viewer - de créer un viewer 3D pour visualiser les données - de tracer les données autour du vecteur actif - de tracer les données autour d'un vecteur temporaire - de remplir la matrice active avec les données (sur base d'un choix de la classe) - de sélectionner les mailles de la matrice active selon les données (sur base d'un choix de la classe) - de compter le nombre de points LAZ dans chaque maille de la matrice active (sur base d'un choix de la classe) Il est également possible de créer un nuage de points selon certaines classe prédéfinies (pont, bâtiments) si la classe existe. .. note:: Pour la Région wallonne, il existe un levé LAZ régional datant de 2013-2014 et 2019-2022. La classification n'est pas nécessairement la même. Pour la Vesdre, un levé LAZ spécifique a eu lieu en 2023 par la société Geofit avec également une classification propre. .. note:: Pour gérer les données LAS/LAZ, Wolf exploite le paquet `laspy `_. Triangulation ~~~~~~~~~~~~~~~ Pour rappel, les :ref:`formats de fichiers supportés pour les triangulations ` sont les suivants : - .tri : format WOLF - .dxf : format Autocad (polyface mesh) - .gltf : format GLTF (texte, ex : Blender) - .glb : format GLB (binaire, ex : Blender) L'affichage de la triangulation dans le viewer permet de visualiser les triangles et les sommets. Tuiles ~~~~~~~~~~~~~~~ Les tuiles sont des emprises spatiales associées à des données matricielles partagées dans de multiples fichiers. Elles sont utilisées pour visualiser rapidement l'emprise de l'ensemble de la donnée sans pour autant tout charger en mémoire. Une fois les tuiles chargées, il est ensuite possible de sélectionner une matrice particulière par simple click-droit à l'intérieur d'une tuile après avoir déclencher l'action `Pick tile` via le menu correspondant. Il est possible de créer une matrice spécifique à partir de plusieurs tuiles: - sur base de l'emprise du viewer - sur base du vecteur actif - sur base d'un vecteur temporaire défini par clicks droits .. note:: Ceci est utile notamment pour gérer l'ensemble des données d'un bassin versant tel que la Vesdre pour lequel une acquisition d'ensemble a été réalisée en 2023. .. image:: _static/ui/tiles.png :width: 300px :align: center :alt: Tiles 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 `Results 2D` apparaît. Navigation dans les résultats ++++++++++++++++++++++++++++++ Via l'entrée de menu `Explore time/index results`, il est possible de naviguer dans les résultats de modélisation. Une fenêtre s'ouvre alors pour choisir le pas de temps ou l'index à visualiser. .. image:: _static/2d_results/sim_explorer.png :width: 600px :align: center :alt: Explore results Ce choix peut être réalisé via le slider ou les listbox. Un choix d'un côté impactera les autres widgets. L'index est représentatif du fichier de résultats à charger. Il s'agit d'un entier positif qui n'est aucunement représentatif du temps réel. Le `Temps [s]` est représentatif du temps réel simulé. Il s'agit d'une nombre à virgule flottante en secondes. Une conversion en date est possible par le choix d'une date de référence associée à la condition initiale soit `0 seconde`. Le `Time step [-]` est l'itération de calcul. Il s'agit d'un entier positif. Cette information sera certainement moins utilisée que les précédentes mais est représentative du nombre d'itération nécessaire pour atteindre le temps courant. Il ne s'agit pas d'un intervalle constant étant donné que le code de calcul adapte automatiquement le pas de temps de calcul sur base d'un nombre de Courant cible et est donc dépendant des conditions hydrodynamiques locales les plus contraignantes. Une fois le choix effectué, il faut encore l'appliquer via le bouton `Apply`. Le bouton 'Update' permet de mettre à jour les pas de temps disponibles en rescannant le répertoire de stockage des résultats. Ceci peut être utile en cas de visualisation de résultats en cours de calcul. Les boutons `Next` et `Previous` permettent de naviguer dans les résultats sur base de l'incrément choisi dans la ListBox située en dessous. Il est possible de choisir un incrément sur base du temps en secondes, en heures, sur base de l'index ou de l'itéré de calcul. L'interface arrondira automatiquement au plus proche si la valeur souhaitée n'existe pas. Le bouton `Plot` permet de visualiser graphiquement certaines informations en fonction du temps total simulé : - L'évolution des itérations de calcul. Une évolution non linéaire indiquera des périodes plus ou moins complexes de calcul. - Le pas de temps de calcul. - Le temps réel (clock time) de la modélisation et un facteur d'accélération moyen (plus grand que l'unité est synonyme de calcul plus rapide que le temps modélisé). - Les mailles quasi-sèches `Mostly dry mesh` en fonction du temps. Une valeur importante est attendue en fin de simulation pour un hydrogramme par exemple. Représentations graphiques ++++++++++++++++++++++++++++++++++++ Les représentations graphiques possibles 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%) - Vitesse de cisaillement au fond - 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 .. image:: _static/ui/views_2d.png :width: 300px :align: center :alt: 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. Export de résultats ++++++++++++++++++++ Après avoir chargé une(plusieurs) résultat(s) de modélisation, il est possible d'extraire le pas courant dans un(des) fichier(s) tif ou shapefile. Pour ce faire, utiliser `Export results as...` du menu `Results 2D`. .. image:: _static/ui/2d_res_exportas.png :width: 600px :align: center :alt: Export results Il sera ensuite demandé : - le répertoire de sauvegarde - le format de sauvegarde (tif ou shapefile) - (si tif) si la sauvegarde doit être en multibandes (1 seul fichier) ou en bandes séparées (autant de fichiers que de bandes) - les modèles à sauvegarder (chargés en mémoire) - les bandes à utiliser (topgraphie, hauteur d'eau, débits...) L'export est ensuite réalisé. Les fichiers sont nommés comme l'id utilisé dans le viewer pour le chargement des résultats, éventuellement suffixé avec le nom de la bande en cas de sauvegarde en fichiers multiples. .. image:: _static/ui/2d_res_exportas_choosedir.png :width: 600px :align: center :alt: Choix du répertoire .. image:: _static/ui/2d_res_exportas_tif_shp.png :width: 600px :align: center :alt: tif ou shapefile .. image:: _static/ui/2d_res_exportas_tif_multi.png :width: 600px :align: center :alt: Multibandes ou bandes séparées .. image:: _static/ui/2d_res_exportas_choose_sims.png :width: 600px :align: center :alt: Choix des modèles .. image:: _static/ui/2d_res_exportas_choose_fields.png :width: 600px :align: center :alt: Choix des bandes .. note:: Il est possible de sauvegarder les résultats via l'API en appelant la méthode `export_as` d'un objet `Wolfresults_2D`. Les champs scalaires sont alors à choisir dans l'enum `views_2D` en évitant les vues complexes `VIEWS_COMPLEX`. .. attention:: La durée totale d'exportation dépend de la taille du domaine et du nombre de bandes à exporter. Certaines bandes sont nettement plus rapides à exporter que d'autres. Generating and Exporting Hydrographs ++++++++++++++++++++++++++++++++++++ Hydrographs can be generated from the results of a 2D simulation by summing the flow rates of the cells under a `vector `_ or multiple vectors in a `zone `_. The hydrographs, if exported, are saved as `.csv` files. The first column contains the time values, and the subsequent columns contain the flow rates for each vector (as below). .. list-table:: :header-rows: 1 :widths: auto * - Time [s] - Vector 1 - Vector 2 * - 0 - 0 - 0 * - 3600 - 0 - 0 * - 7200 - 3.44E-10 - 1 * - 10800 - 2.02 - 3.2 * - 14400 - 6.84 - 5.6 * - 18000 - 10.4 - 8.2 * - ... - ... - ... To generate hydrographs, use the `Analyze 🡪 Integrate Q` menu. You can proceed in two ways: a. **Plot hydrographs** using vector(s). b. **Export hydrographs** using vector(s). **Requirements**: 1. An `active vector `_ or an `active zone `_ containing one or more vectors. 2. An active Wolf2D result. **Plot Option**: If the **plot** option is selected, the hydrograph(s) will be displayed in a Matplotlib window after computation. Note that the computation time may increase with the number of recorded timesteps. **Export Option**: If the **export** option is selected, you will be prompted to specify the directory and filename for saving the hydrograph data as a `.csv` file. **Detailed steps:** 1. **Load or create vectors as well as the Wolf2D results** to be used for generating hydrographs. .. image:: _static/ui/Hydrographs_load_vectors_and_results.png :width: 600px :align: center :alt: Choix des bandes 2. **Activate the zone or vector** (Double LMB). .. image:: _static/ui/Hydrographs_activate_vector_or_zone.png :width: 600px :align: center :alt: Choix des bandes 3. **Activate the desired Wolf2D result** (Double LMB). .. image:: _static/ui/Hydrographs_activate_results.png :width: 600px :align: center :alt: Choix des bandes 4. **Select the desired option** (here, export). .. image:: _static/ui/Hydrograph_select_export.png :width: 600px :align: center :alt: Choix des bandes 5. If the **export** option is selected, **specify the filename and location** to save the `.csv` file. .. image:: _static/ui/Hydrograph_save_dialog_box.png :width: 600px :align: center :alt: Choix des bandes 6. A **progress dialog box** will display the status of the operation (currently available only for the export option). .. image:: _static/ui/Hydrograph_progress_bar.png :width: 600px :align: center :alt: Choix des bandes 7. Upon completion, a **confirmation message** will indicate the successful export of the hydrograph(s). .. image:: _static/ui/Hydrograph_completion.png :width: 600px :align: center :alt: Choix des bandes 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 ~~~~~~~~~~~~ Pas mal de fonctions sont accessibles via l'interface graphique. Cependant, une palette plus étendue est disponible via l'API (voir le sous-module `wolf_array `_) et l'emploi de Scripts/Jupyter Notebooks. Travailler avec plusieurs matrices +++++++++++++++++++++++++++++++++++ Il est bien entendu possible de travailler avec plusieurs matrices simultanément. Au besoin, les matrices peuvent mêmes être ajoutées par glisser-déposer dans la fenêtre principale. .. youtube:: nhl8Z5cLEC0 :width: 600px :align: center Modification de valeurs ponctuelles +++++++++++++++++++++++++++++++++++ Une tâche courante du viewer est la modification de valeurs ponctuelles dans une matrice. Plusieurs méthodes sont disponibles pour sélectionner les mailles à traiter. .. youtube:: MzdteKiMzGo :width: 600px :align: center .. youtube:: -ox2zfjVlNc :width: 600px :align: center Interpolation spatiale +++++++++++++++++++++++ Il est souvent utile de pouvoir interpoler une topographie d'une zone sur base de son voisinage. Ceci est notamment facilité par la mise en place de mémoires de sélection. Utilisation des groupes mémoire pour l'interpolation : .. youtube:: JRIgNO2mcDc :width: 600px :align: center Autres vidéos sans commentaires : .. youtube:: AAMt7iy3KeM :width: 600px :align: center .. youtube:: tV-Ovm-45IE :width: 600px :align: center .. note:: Il est également possible d'interpoler sur base d'un nuage de points et/ou d'une triangulation dans un mode de travail mixte matriciel/vectoriel. 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). .. youtube:: RxER_dowUwY :width: 600px :align: center Vectorielles ~~~~~~~~~~~~ Les données vectorielles permettent notamment: - de sauver une série d'images (NDLR : doit encore être amélioré) - de créer un canal sur base de 3 vecteurs (utile pour limiter les modifications de la topographie, notamment dans Blender) - de créer une triangulation sur base de vecteurs 3D (utile pour interpoler des valeurs de matrices) - sur base des vertices existants - sur base de nouveaux vertices obtenus par projection d'un vecteur central sur les vecteurs de bord (plus proche d'une notion de sections en travers) - de créer des polygones sur base de 3 vecteurs (le plus souvent définis par des parallèles) - polygones contigus (`polygons from parallels`) - polygones glissants éventuellement superposés partiellement (`sliding polygons`) Au niveau de chaque vecteur, les opérations possibles sont : - Définition, Ajout, Suppression, Insertion de vertices - de façon interactive via la souris - `manuellement` via la tableur (copier/coller possible depuis Excel ou autre tableur) - Inversion de l'ordre des vertices - Création de parallèles - dynamiquement à la souris (2 parallèles à la fois de part et d'autre du vecteur central) - via une boîte de dialogue (1 parallèle à la fois) - Copie et subdivision du vecteur - Evaluation de la coordonnée curviligne de chaque vertice selon la trace du vecteur - Interpolation de la coordonnée Z de chaque vertice sur base des valeurs non nulles et de la coordonnée curviligne - permet de positionner les vertices sur base d'une connaissance partielle de la topographie - Obtention de valeurs depuis une matrice sous les vertices - de la matrice active - de toutes les matrices actives - de toutes les matrices actives après redécoupage du vecteur (afin de respecter la résolution de la matrice et d'obtenir au moins un point par maille) Les opérations sur les vecteurs permettent de préparer les données pour des interpolations spatiales par exemple. De nombreuses fonctionnalités sont accessibles via l'API et plus particulièrement les sous-modules - `Pyvertex `_ - `PyVertexvectors `_. .. note:: En interne, Wolf utilise le paquet `Shapely `_ pour certaines opérations géométriques 2D. `Shapely` est une bibliothèque Python qui permet de manipuler et d'analyser des objets géométriques en 2D et 3D. Elle est basée sur la bibliothèque GEOS (Geometry Engine - Open Source) et est utilisée par de nombreux autres paquets Python dont `GeoPandas `_. Wolf étend toutefois certaines fonctions non disponibles en 3D, notamment les fonctions d'interpolation afin de permettre le travail sur des vecteurs avec présence de discontinuités (comme des murs verticaux dans certaines sections en travers). Sections en travers ~~~~~~~~~~~~~~~~~~~ Les sections en travers sont un cas particulier de vecteurs (voir `formats supportés `_). Un fichier `.vecz` peut être lu comme un fichier de sections en travers. Dans ce cas, les fonctionnalités liées à ces sections sont activées via le menu `Cross sections` (notamment le tracé avec comparaison aux données LAZ et matricielles). .. image:: _static/cross_sections/example_vec_array.png :width: 600px :align: center :alt: Cross section - Comparison with arrays .. image:: _static/cross_sections/example_vec_array_2.png :width: 600px :align: center :alt: Cross section - Comparison with arrays .. image:: _static/cross_sections/example_vec_array_laz3.png :width: 600px :align: center :alt: Cross section - Comparison with LAZ and arrays .. image:: _static/cross_sections/example_vec_array_laz.png :width: 600px :align: center :alt: Cross section - Comparison with LAZ and arrays .. image:: _static/cross_sections/example_vec_array_laz2.png :width: 600px :align: center :alt: Cross section - Comparison with LAZ and arrays Nuages de points ~~~~~~~~~~~~~~~~ Une fois chargés, les nuages de points peuvent être utilisés pour : - interpoler des valeurs de matrices - comparer les valeurs de matrices au levé de terrain que matérialise ce nuage de points Triangulation ~~~~~~~~~~~~~ Les triangulations sont des objets vectoriels particuliers qui permettent d'interpoler des valeurs de matrices. Le `format interne `_ est basé sur une énumération de triangles et de leurs sommets. L'utilisation de la triangulation est utile pour: - imposer un mur de protection de façon précise, le cas échéant sur des matrices de différentes résolutions - interpoler une zone de topographie sur base de valeurs connues/relevées par un géomètre - interpoler le lit mineur, non relevé par Lidar, sur base de sections en travers reliées par des vecteurs de support - ... Modèle 2D (CPU) ~~~~~~~~~~~~~~~~ Pour le moment, seules les modélisations Multiblocks (CPU/Fortran) peuvent être chargées en tant que modélisation 2D. Ce chargement ajoute à l'interface toutes les matrices du modèles disponibles dans le répertoire de simulation ainsi que les informations vectorielles associées (contours de bloc...). Un menu spécifique est également activé pour la gestion des modèles 2D. Modèle 2D (GPU) ~~~~~~~~~~~~~~~~ .. attention:: Les modèles GPU ne sont pas encore supportés mais cela fera l'objet d'une prochaine mise à jour. La structure d'un pur modèle GPU est nettement plus simple que celle d'un modèle CPU multiblocks. En effet, un modèle GPU `SimpleSimulation `_ contient : - une matrice de topo_bathymétrie : bathymetry.npy (en **numpy.float32**) - une matrice de coefficients de Manning : manning.npy (en **numpy.float32**) - une matrice de domaine de calcul: NAP.npy (en **numpy.uint8**) - une matrice d'infiltration/exfiltration : infiltration_zones.npy (en **numpy.int32**) - 3 matrices de conditions initiales : h.npy, qx.npy, qy.npy (les 3 en **numpy.float32**) - un fichier de configuration : parameters.json (texte **ASCII**) Le format des fichiers est donc du pur Numpy (ce qui facilite grandement la lecture et l'écriture depuis un script/Notebook voire un outil externe). Cependant, ce type de fichier ne contient pas de positionnement spatial. Ce dernier est contenu dans le fichier de paramètres via les clés : `base_coord_ll_x`, `base_coord_ll_y`, `dx`, `dy`. `ll` pour lower-left. D'autres clés (exemple : `nx`, `ny`) sont redondantes avec les dimensions des matrices mais permettent des vérifications internes. .. note:: Il est particulièrement recommandés de bien vérifier le typage des matrices lors de leur création via script/Notebook. Des vérifications internes sont effectuées mais il s'agit d'une erreur courante qu'il est possible de commettre. Le fichier de paramètres est au standard JSON et peut être modifié à volonté. Il contient les conditions aux limites et les hydrogrammes. Tant que l'interface graphique n'est pas adaptée, il est possible de mettre en place rapidement un modèle GPU via un script/Notebook. Au besoin, les matrices peuvent être ajoutées à l'interface par simple glisser-déposer depuis un explorateur de fichiers. Une autre voie est de recourir au `Gestionnaire de scénarios `_ qui prendra en données de base 3 matrices au format Geotif `.tif`: - topo-bathymétrie : bathymetry.tif (**float32**) - infirltration/exfiltration : infiltration.tif (**int32**) - manning : manning.tif (**float32**) .. note:: Sur base de la seule matrice de topo-bathymetrie, l'interface graphique peut génerer très rapidement les deux autres via la fonction `Duplicate` du menu contextuel. La fonction `Duplicate` permet en effet de changer le type de stockage mémoire (**passage de float32 vers int32 pour la matrice d'infiltration**). Il faudra également disposer d'un répertoire `discharges` contenant les hydrogrammes en format `.txt`. Etant donné que les matrices sont en Geotif, leur spatialisation est automatique. Le gestionnaire de scénarios vous permettra ensuite de mettre en place les simulations associées pour différents débits et de modifier graphiquement le fichier de paramètres pour chaque simulation sur base d'un premier paramétrage automatique. Conditions aux limites ~~~~~~~~~~~~~~~~~~~~~~~ Pour chaque matrice chargée en mémoire, il est possible de lui associer un gestionnaire de conditions aux limites. Pour ce faire : - Activer la matrice (double-clicks) pour laquelle une gestionnaire doit être créé - Créer le gestionnaire de conditions aux limites via le menu `File`🡪`Create`🡪`Create BC manager Wolf2D` - Choisir le type de manager entre `WOLF prev` (code CPU historique), `WOLF OO` (code CPU orienté-objets) ou `GPU` (code GPU). Ce choix va particulariser les types de CL en fonction des capacités de chaque code. - Une fenêtre s'ouvre, c'est le gestionnaire de conditions aux limites. Il est vide pour le moment. - En parallèle, le code va alors déterminer les bords potentiels où vous pourrez imposer des CL. Il s'agit des bords situés entre une maille visible et une maille masquée de la matrice. - Les bords sont alors affichés en noir et forment un contour de la matrice active (dessin via un Program Shader OpenGL pour plus de rapidité). - Vous pouvez ensuite sélectionner un bord par click droit ou plusieurs bords par click droit maintenu et déplacement de la souris. Ces opérations peuvent être combinées pour une sélection plus fine. - Une fois les bords sélectionnés, vous pouvez leur associer une condition limite via la fenêtre spécifique qui a été ouverte. - Le stockage des CL est réalisé dans un fichier `.cl` ou via un copier/coller des lignes de script générées. .. image:: _static/bc_manager/create_2d_bc_manager.png :width: 400px :align: center :alt: Create BC manager .. image:: _static/bc_manager/choice_bc_manager.png :width: 200px :align: center :alt: Choose BC manager .. youtube:: 4qBH38YoDbw :width: 600px :align: center .. attention:: Description plus détaillée à venir Combinées ~~~~~~~~~ L'exploitation combinée de données matricielles et vectorielles est bien entendu possible. Chaque matrice dispose d'ailleurs de sa propre fenêtre de gestion vectorielle (`propriétés` 🡪 bouton `Manage vectors`) capable de lire et d'écrire les fichiers vectoriels. Cet objet peut également, le cas échéant, être partagé entre plusieurs viewers dans des opérations de comparaison ou d'analyse de données/résultats. Il est possible notamment : - d'extraire des valeurs de matrices sous les positions des vertices - de définir des polygones d'extraction de valeurs via le dessin d'un axe et de parallèles - de trianguler une zone vectorielle en vue d'interpoler des valeurs de matrices - ... .. attention:: Description plus détaillée à venir Calculatrice ------------ Une calculatrice est disponible via l'interface graphique. Elle exploite le parser initialement `disponible ici `_. Elle est accessible via le menu "Tools/Calculator". .. image:: _static/calculator/menu.png :width: 600px :align: center :alt: Menu Outre le fait de pouvoir résoudre des opérations mathématiques (multilignes supporté, nom de variable possible), elle peut également réaliser des opérations sur les matrices chargées dans le viewer en exploitant les "id". Par exemple: - on dispose/crée une matrice "a" de 10x10 et une matrice "b" de 10x10 - on ajoute ces matrices au viewer - on ouvre la calculatrice - on demande "a+b" puis "=" - une nouvelle matrice nommée "a+b" est ajoutée au viewer... .. image:: _static/calculator/array_a.png :width: 600px :align: center :alt: Array a .. image:: _static/calculator/array_b.png :width: 600px :align: center :alt: Array b .. image:: _static/calculator/calculator.png :width: 600px :align: center :alt: Calculator .. image:: _static/calculator/sum_ab.png :width: 600px :align: center :alt: Array a+b .. attention:: Pour le moment, c'est à l'utilisateur de s'assurer que les matrices sont "compatibles" en dimensions. .. note:: Autre exemple : - sto('c', 1+2) - c + 10 * 10 La première ligne stocke le résultat dans la variable 'c' qui sera utilisé dans la seconde ligne. Via le code source, il est bien entendu possible d'ajouter des fonctions utilisateurs particulières au parser. Cela ouvre la voie à de nombreuses possibilités : calcul de hauteur uniforme, critique, surface de section en travers... toutes ces fonctions existent déjà et pourarient être rendues accessibles via la calculatrice si le besoin en était exprimé. Comparaison de matrices ----------------------- Il est possible de comparer des matrices entre elles via le menu `File` 🡪 `Set comparison`. .. attention:: Les matrices doivent avoir la même taille, la même résolution et le même type de données (float64, float32, integer8...). Pour mettre en place une telle comparaison, il faut : - activer l'action via le menu `File` 🡪 `Set comparison` - choisir autant de fichiers que nécessaire (le premier sera la matrice de référence, les différences étant calculées par rapport à celle-ci) - terminer l'ajout en cliquant sur 'Cancel' de la boîte de dialogue de choix de fichier - indiquer via le choix proposé si un viewer différent doit être créé pour chaque matrice et chaque différentiel .. image:: _static/comparison_2d/example_comparison.png :width: 600px :align: center :alt: Example of 2D comparison .. attention:: Dans le cas où des viewers différents sont demandés, ils seront liés entre eux. Cela signifie qu'un zoom dans une fenêtre sera répercuté dans les autres. Les valeurs reprises dans la fenêtre de propriétés contiendra également les valeurs des autres matrices. La première valeur fournie éatnt celle du viewer dans laquelle se trouve le pointeur de la souris. .. note:: Par défaut, les palettes de couleurs ne sont pas définies en mode automatique. Afin de faciliter la comparaison, la palette de couleurs des données est partagée entre les différentes versions. Il suffit dès lors de modifier une seule palette pour que toutes les données soient impactées. Comparaison de modélisations 2D ------------------------------- Il est possible de comparer des modélisations 2D entre elles via le menu `File` 🡪 `Set comparison`. .. attention:: Les modélisations doivent avoir la même emprise spatiale et la même résolution. Pour mettre en place une telle comparaison, il faut suivre la même procédure que pour les matrices : - activer l'action via le menu `File` 🡪 `Set comparison` - choisir autant de modélisations que nécessaire (la première sera la modélisation de référence, les différences étant calculées par rapport à celle-ci) - terminer l'ajout en cliquant sur 'Cancel' de la boîte de dialogue de choix de fichier - indiquer via le choix proposé si un viewer différent doit être créé pour chaque modélisation et chaque différentiel Le sytème analysera automatiquement les pas de temps disponibles pour chaque modélisation et les mettra en correspondance. .. image:: _static/comparison_2d/example_compare_sim2d.png :width: 600px :align: center :alt: Example of 2D comparison Il les affichera ensuite dans une fenêtre permettant de choisir le pas de temps à comparer, voire de fixer une modélisation sur un pas de temps spécifique. .. note:: Ce système peut également être utilisé avec une seule modélisation afin de faire un différentiel entre deux pas de temps. .. image:: _static/comparison_2d/example_compare_sim2d_samemod.png :width: 600px :align: center :alt: Example of 2D comparison Multiviewers ------------ Il est possible de créer plusieurs viewers depuis la même application. Cela peut être utile pour comparer des résultats, des données... Pour créer un nouveau viewer, il suffit de cliquer sur le menu `File` 🡪 `Multiviewer` dans la fenêtre principale. Il vous sera demandé combien de viewers vous souhaitez créer. .. attention:: Les données de chaque viewer seront indépendantes mais la zone visible sera la même pour tous les viewers. Viewer 3D --------- Deux modes de visualisation 3D sont disponibles: - une vue matricielle - une vue du nuage de points Lidar Vue matricielle ~~~~~~~~~~~~~~~~ Un viewer 3D est disponible pour visualiser les matrices 3D. Il exploite la même palette de couleurs que la vue 2D. La représentation est réalisée via un `Program Shader OpenGL` pour plus de rapidité. Les valeurs sont représentées sous la forme de parallélépipèdes, et non de triangles, dont la couleur est définie par la palette de couleurs. .. note:: La navigation doit encore être améliorée mais les commandes sont visibles en appuyant sur la touche `H` depuis le viewer. .. youtube:: N5b9-9Gadyw :width: 600px :align: center .. attention:: Il est également possible d'utilisre `Blender` pour visualiser les matrices 3D. Pour ce faire, il suffit d'extraire la portion de matrice à afficher au format `glb` via le menu `File` 🡪 `Gltf2` 🡪 `export` après avoir défini un polygone d'extraction et activé le vecteur associé. Blender dispose d'outils de rendu qui ne seront jamais disponibles dans WOLF. Par contre, les valeurs y sont triangulées et non représentées sous forme de parallélépipèdes, cette dernière vision étant plus proche de la modélisation GPU. Vue du nuage de points Lidar ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Si vous disposez des informations Lidar brutes sous la forme d'un nuage de points 3D classifié, il est possible de les charger dans un viewer 3D spécifique (menu `LAZ` 🡪 `Create LAZ viewer`). Le viewer LAZ est basé sur le `paquet pptk `_ qui a été adapté pour les besoins de WOLF. Au moment de la création du viewer LAZ, il est possible de choisir entre plusieurs modes de colorations: - par classe - sur base d'une image aérienne (orthophotoplans) Pour analyser finement les données, il est utile de représenter le nuage de points selon plusieurs modes. .. youtube:: -o7HKWagvRQ :width: 600px :align: center .. 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) PICC ~~~~ Activation du PICC dans l'entrée `Others` 🡪 `PICC`. .. note:: Les `données à l'échelle de la Région `_ sont distribuées via Walonmap au format `gdb` ou shapefile. .. image:: _static/ui/picc_gdb.png :width: 600px :align: center :alt: PICC Choix des couches à afficher : .. image:: _static/ui/picc_gdb_layer.png :width: 600px :align: center :alt: PICC layout Chargement des données sur l'emprise du viewer et colorisation : .. image:: _static/ui/picc_theux.png :width: 600px :align: center :alt: PICC Theux Cadastre ~~~~~~~~ Activation du cadastre dans l'entrée `Others` 🡪 `Cadaster`. Choix du format `gpkg` : .. image:: _static/ui/cadastre_gpkg.png :width: 600px :align: center :alt: Cadaster Choix de la couche `cabu` : .. image:: _static/ui/cadastre_cabu.png :width: 600px :align: center :alt: Cadaster layout Résultat de l'import sur la zone affichée : .. image:: _static/ui/cadastre_cabu_imported.png :width: 600px :align: center :alt: Cadaster layout Plans terriers ~~~~~~~~~~~~~~~ Chargement des emprises : .. image:: _static/landmaps/landmaps_theux_hoegne.png :width: 600px :align: center :alt: Affichage des plans terriers pour la Hoëgende Activation de l'action de pick sur les plans terriers : .. image:: _static/landmaps/landmaps_pick.png :width: 600px :align: center :alt: Activation de l'action de pick sur les plans terriers Affichage du plan contenu dans la zone de pick : .. image:: _static/landmaps/landmaps_added.png :width: 600px :align: center :alt: Résultat de l'action de pick sur les plans terriers .. image:: _static/landmaps/landmaps_added2.png :width: 600px :align: center :alt: Zoom -- le plan terrier est dessiné en avant plan de la donnée numérique .. attention:: Ces données sont en rapport direct avec le projet MODREC et ne sont pas nécessairement disponibles pour le grand public.