wolfhece.PyCrosssections

Author: HECE - University of Liege, Pierre Archambeau, Utashi Ciraane Docile Date: 2024

Copyright (c) 2024 University of Liege. All rights reserved.

This script and its content are protected by copyright law. Unauthorized copying or distribution of this file, via any medium, is strictly prohibited.

Module Contents

wolfhece.PyCrosssections.example_largesect = Multiline-String[source]
Show Value
"""-138 100
-114 90
-70 80
-45 70
-32 62
0 61.5
32 62
60 70
80 80
98 84
120 87"""
wolfhece.PyCrosssections.example_smallsect = Multiline-String[source]
Show Value
"""0 68
10 67
12 65
15 63
20 62
24 61.5
30 62
35 64
40 66
42 66.5
50 68"""
wolfhece.PyCrosssections.example_diffsect1 = Multiline-String[source]
Show Value
"""0 10
10 5
12 5
15 6
16 6
17 5
20 3
25 3
30 5
42 7
50 10"""
wolfhece.PyCrosssections.INTERSEC(x1, y1, x2, y2, el)[source]

Procédure de calcul de l’abscisse d’intersection d’une altitude donnée el dans un segment défini par ses coordonnées (x1,y1) et (x2,y2)

wolfhece.PyCrosssections.partranslation(base, x, y)[source]
wolfhece.PyCrosssections.find_xy(section, x3, y3)[source]
class wolfhece.PyCrosssections.postype[source]

Bases: enum.Enum

Inheritance diagram of wolfhece.PyCrosssections.postype

Mode de stockage des points de référence (berges, fond lit)

BY_VERTEX = 0[source]
BY_S3D = 1[source]
BY_INDEX = 2[source]
class wolfhece.PyCrosssections.profile(name, data_sect='', parent=None)[source]

Bases: wolfhece.PyVertexvectors.vector

Inheritance diagram of wolfhece.PyCrosssections.profile

Surcharge d’un vecteur en vue de définir un profil de rivière

Les coordonnées attendues sont en 3D (x,y,z)

property linked_arrays[source]
property bankleft[source]
property bankright[source]
property bed[source]
property bankleft_vertex[source]
property bankright_vertex[source]
property bed_vertex[source]
property bankleft_s3D[source]
property bankright_s3D[source]
property bed_s3D[source]
property bankleft_sz[source]
property bankright_sz[source]
property bed_sz[source]
verif()[source]
triangulation_gltf(zmin)[source]

Génération d’un info de triangulation pour sortie au format GLTF –> Blender :zmin : position d’altitude minimale de la triangulation

triangulation_ponts(x, y, zmax)[source]

Triangulation d’une section de pont

set_orient()[source]

Calcul du vecteur directeur de la section sur base des points extrêmes

get_xy_from_s(s) tuple[float, float][source]

Récupération d’un tuple (x,y) sur base d’une distance 2D ‘s’ orientée dans l’axe de la section

set_vertices_sz_orient(sz: numpy.ndarray, xy1: numpy.ndarray, xy2: numpy.ndarray)[source]
Ajout de vertices depuis :
  • une matrice numpy (s,z) – shape = (nb_vert,2)

  • d’un point source [x,y]_1

  • d’un point visé [x,y]_2

get_laz_around(length_buffer=10.0)[source]

Récupération de points LAZ autour de la section

plot_laz(length_buffer=5.0, fig: matplotlib.figure.Figure = None, ax: matplotlib.axes.Axes = None, show=False)[source]

Dessin des points LAZ sur le graphique Matplotlib

slide_vertex(s)[source]

Glissement des vertices d’une constante ‘s’

movebankbed_index(which, orientation)[source]

Déplacement des points de référence sur base d’un index Le cas échéant, adaptation du mode de stockage

update_sdatum(new_sdatum)[source]

MAJ de la position de la section selon sa trace

update_zdatum(new_zdatum)[source]

MAJ de l’altitude de référence de la section

update_banksbed_from_s3d(which, s: float)[source]

MAJ des points de référence depuis une coordonnée curvi 3D

save(f)[source]

Surcharge de l’opération d’écriture

get_s_from_xy(xy: wolfhece.PyVertex.wolfvertex) float[source]

Retourne la coordonnér curvi sur base d’un vertex

get_sz(cumul=True) tuple[numpy.ndarray, numpy.ndarray][source]

Retourne 2 vecteurs avec la position curvi 2D et l’altitude des points

set_sz(sz, trace)[source]
Calcule les positions des vertices sur base d’une matrice sz et d’une trace

s : colonne 0 z : colonne 1 trace : liste de 2 couples xy -> [[x1,y1], [x2,y2]]

get_sz_banksbed(cumul=True, force: bool = False) tuple[float, float, float, float, float, float][source]
Retourne les positions des points de référence mais avec la coordonnée curvi 2D
  • (sleft, sbed, sright, zleft, zbed, zright)

get_s3d_banksbed(force: bool = False) tuple[float, float, float][source]
Retourne les coordonnée curvi 3D des points de référence
  • (sleft, sbed, sright)

asshapely_sz() shapely.geometry.LineString[source]

Retroune la section comme objet shapely - polyligne selon la trace avec altitudes

asshapely_s3dz() shapely.geometry.LineString[source]

Retroune la section comme objet shapely - polyligne selon la trace 3D avec altitudes

prepare(cumul=True)[source]

Pre-Compute sz and sz_banked to avoid multiple computation

reset_prepare()[source]

Réinitialisation de la préparation de la section

get_min()[source]
get_max()[source]
get_minz()[source]
get_maxz()[source]
plot_linked(fig, ax, linked_arrays: dict)[source]

Graphique Matplolib de valeurs dans les matrices liées

_plot_only_cs(fig: matplotlib.figure.Figure = None, ax: matplotlib.axes.Axes = None, label='', alpha=0.8, lw=1.0, style: str = 'dashed', centerx=0.0, centery=0.0, grid=True, col_ax: str = 'black')[source]
plot_cs(fwl=None, show=False, forceaspect=True, fig: matplotlib.figure.Figure = None, ax: matplotlib.axes.Axes = None, plotlaz=True, clear=True, linked_arrays: dict = {})[source]
relation_oneh(cury, x=None, y=None)[source]
relations(discretize: int = 100, plot=True)[source]

This method returns 6 numpy arrays each containing the evolution of a specific hydraulic characteristic with respect to the water depth in the profile (wetted area, wetted perimeter, top width, water detph, hydraulic radius, critical discharge).

slopes()[source]
ManningStrickler_Q(slope=0.001, nManning=0.0, KStrickler=0.0)[source]

Procédure générique pour obtenir une relation uniforme Q-H sur base - nManning : un coefficient de frottement - slope : une pente

ManningStrickler_oneQ(slope=0.001, nManning=0.0, KStrickler=0.0, cury=0.0)[source]

Procédure générique pour obtenir une relation uniforme Q-H sur base - nManning : un coefficient de frottement - slope : une pente

deepcopy_profile(name: str = None)[source]

This method returns a deepcopy of the active profile. The profile features are individually transferred, therefore, only the necessary features are copied.

color_active_profile(width: float = 3.0, color: list = [255, 0, 0], plot_opengl=True)[source]

This method colors and thickens the active profile (default width : 3, default color: red).

highlightning(width: float = 3.0, color: list = [255, 0, 0], plot_opengl=True)[source]

Alias for color_active_profile

uncolor_active_profile(plot_opengl=True)[source]

This method resets the width and the color of the active profile to 1 and black.

withdrawing(plot_opengl=True)[source]

Alias for uncolor_active_profile

ManningStrickler_profile(slope: float = 0.001, nManning: float = 0.0, KStrickler: float = 0.0)[source]
Procédure générique pour obtenir une relation uniforme Q-H d’un profile sur base:
  • nManning ou KStrickler: un coefficient de frottement,

  • slope : une pente fournie (default: 0.001),

ainsi que les relations correspondant aux pentes aval(slope down), amont(slopeup), et amont-aval (centered).

plotcs_profile(fig: matplotlib.figure.Figure = None, ax: matplotlib.axes.Axes = None, compare=None, vecs: list = [], col_structure: str = 'none', fwl: float = None, fwd: float = None, simuls: list = None, show=False, forceaspect=True, plotlaz=True, clear=True, redraw=True)[source]

This method plots the physical geometry of the current cross section (profile).

  • If a reference profile (compare) is given, the method hatchs the differences with resepect to cuts and fills.

  • If forceaspect is activated, the x and y axes are plotted using the same scale, otherwise, the figure is anamorphosed.

  • fwl (for water level) and fwd (for water depth) allow the visualisation of a specific water level on the graph.

  • idsimul: list of available numerical simulations containing this profile,

  • zsimul: list of water level in the simulations.

  • col_structure colors the structure displayed.

plotcs_discharges(fig: matplotlib.figure.Figure = None, ax: matplotlib.axes.Axes = None, fwl: float = None, fwd: float = None, fwq: float = None, simuls: list = None, show=False, clear=True, labels=True, redraw=True)[source]

This method plots the discharges relationship computed with the methods: relations and ManningStrcikler_profile.

  • fwl: for water level,

  • fwd: for water depth,

  • fwq: for water discharge,

  • idsimul: list of available numerical models.

  • qsimul: list of discharges in the available numerical models,

  • hsimul: list of water depth in the available numerical models.

plotcs_hspw(fig: matplotlib.figure.Figure = None, ax: matplotlib.axes.Axes = None, fwl: float = None, fwd: float = None, fwq: float = None, show=False, clear=True, labels=True, redraw=True)[source]

This method plots the hydraulic geometries computed by the relations method (Hydraulic radius, wetted area, wetted perimeter, Top width).

  • fwl: for water level,

  • fwd: for water depth,

  • fwq: for water discharge.

class wolfhece.PyCrosssections.crosssections(myfile, format: Literal[2000, 2022, vecz, sxy] = '2022', dirlaz: str | wolfhece.lazviewer.laz_viewer.xyz_laz_grids = 'D:\\OneDrive\\OneDrive - Universite de Liege\\Crues\\2021-07 Vesdre\\CSC - Convention - ARNE\\Data\\LAZ_Vesdre\\2023', mapviewer=None, idx='', plotted=True)[source]

Bases: wolfhece.drawing_obj.Element_To_Draw

Inheritance diagram of wolfhece.PyCrosssections.crosssections
Gestion de sections en travers pour différents formats
  • SPW 2000 –> format =’2000’

  • SPW 2022 –> format =’2022’

  • WOLF vecz –> format =’vecz’

  • WOLF sxy –> format =’sxy’

L’objet stocke ses informations dans un dictionnaire : self.myprofiles Les clés de chaque entrée sont:

[‘index’] : integer [‘left’] : wolfvertex [‘bed’] : wolfvertex [‘right’] : wolfvertex [‘cs’] : profile (surcharge de vector)

Pour le moment, il est possible de lire les fichiers et d’effectuer cerrains traitements (tri selon vecteur, export gltf…).

Une instance de cet objet peut être ajouté à une instance graphique WOLF pour affichage. Pour ce faire:

  • une propriété “myzones” de type “Zones” est présente pour stocker les sections sous forme WOLF “ZONES/ZONE/VECTOR/VERTICES”. –> “crosssections” n’est donc pas une extension de “Zones” !!

  • deux instances de “cloud_vertices” contiennent les vertices des sections :
    • cloud

    • cloud_all

:remark !! La classe n’est pas encore prévue pour créer des sections en travers!!

myprofiles: dict[source]
mygenprofiles: dict[source]
init_cloud()[source]
add(newprofile)[source]
get_linked_arrays()[source]

Passerelle pour obntenir les matrices liées

get_profile(which_prof, which_dict: str = None)[source]

Recherche et renvoi d’un profil sur base du nom ou de son index et éventuellement de la liste triée

fillin_cloud_all()[source]
update_cloud()[source]
create_zone_from_banksbed()[source]
export_gltf(zmin, fn='')[source]
export_gltf_gen(points, triangles, fn='')[source]
set_zones(forceupdate: bool = False)[source]
showstructure(parent=None, forceupdate=False)[source]
get_upstream() dict[source]
get_downstream() dict[source]
rename(fromidx, updown=True)[source]
saveas(filename=None)[source]
verif_bed()[source]

Verification de l’existence du point lit mineur sinon attribution de l’altitude minimale

get_min(whichname='', whichprofile=None)[source]
asshapely_ls()[source]
prepare_shapely()[source]
sort_along(vecsupport: shapely.geometry.LineString, name: str, downfirst=True)[source]

Sélectionne les sections qui intersectent un vecteur support et les trie selon l’abscisse curviligne

find_minmax(update: bool = False)[source]

Generic function to find min and max spatial extent in data

examplea WolfMapViewer instance needs spatial extent to zoom or test if

element must be plotted

plot(sx=None, sy=None, xmin=None, ymin=None, xmax=None, ymax=None, size=None)[source]

Plotting cross-sections

_prep_listogl()[source]

Prepare list of GL objects

saveas_wolfvec(filename: str)[source]
select_profile(x, y)[source]
class wolfhece.PyCrosssections.Interpolator(vec1: wolfhece.PyVertexvectors.vector, vec2: wolfhece.PyVertexvectors.vector, supports: list, ds=1.0)[source]

Objet d’interpolation sur sections en travers

  • self.interpolants est une liste de listes

  • chaque élément de self.interpolants est également une liste de listes

  • chaque liste de self.interpolants[k] contient les wolfvertex de la section discrétisée

get_xyz_for_viewer(nbsub=10)[source]
add_triangles_to_zone(myzone: wolfhece.PyVertexvectors.zone)[source]
get_triangles(forgltf=True)[source]
get_points(forgltf=False)[source]
export_gltf(points=None, triangles=None)[source]
get_xy_z_for_griddata()[source]
class wolfhece.PyCrosssections.Interpolators(banks: wolfhece.PyVertexvectors.Zones, cs: crosssections, ds=1.0)[source]

Classe de gestion des interpolations sur sections en travers

add_interpolators(parent)[source]

Ajout d’objets ‘Interpolators’ pour affichage/stockage

viewer_interpolator()[source]
interp_on_array(myarray, method: Literal[nearest, linear, cubic])[source]