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(*args, **kwds)[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)

_bankleft = None[source]
_bankright = None[source]
_bed = None[source]
_bankleft_down = None[source]
_bankright_down = None[source]
banksbed_postype[source]
refpoints[source]
s = 0.0[source]
up: profile = None[source]
down: profile = None[source]
laz = False[source]
parent = None[source]
zdatum = 0.0[source]
add_zdatum = False[source]
sdatum = 0.0[source]
add_sdatum = False[source]
orient = None[source]
sz = None[source]
sz_bankbed = None[source]
s3d_bankbed = None[source]
prepared = False[source]
property linked_arrays[source]
property bankleft[source]
property bankright[source]
property bankleft_down[source]
property bankright_down[source]
property bed[source]
property bankleft_vertex[source]
property bankright_vertex[source]
property bankleft_down_vertex[source]
property bankright_down_vertex[source]
property bed_vertex[source]
property bankleft_s3D[source]
property bankright_s3D[source]
property bankleft_down_s3D[source]
property bankright_down_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: Literal['left', 'right', 'bed', 'left_down', 'right_down'], orientation: Literal['left', 'right']) None[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: str = '', format: Literal['2000', '2022', '2025_xlsx', '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’

  • SPW_2025 –> format =’2025_xlsx’

  • 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 [‘left_down’] : wolfvertex [‘right_down’]: 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

Attention:

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

myprofiles: dict[source]
mygenprofiles: dict[source]
filename = ''[source]
myzones = None[source]
myzone = None[source]
format = None[source]
linked_zones = None[source]
cloud = None[source]
cloud_all = None[source]
multils = None[source]
sorted[source]
plotted = False[source]
init_cloud()[source]

Initialiaze cloud points for cross-sections.

add(newprofile: profile | wolfhece.PyVertexvectors.vector)[source]

Add a new profile or vector to the cross-sections.

Parameters:

newprofile (profile | vector) – A profile or vector to be added.

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.

Parameters:
  • which_prof (str | int) – Nom du profil ou index du profil à rechercher.

  • which_dict (str | None) – Nom du dictionnaire trié à utiliser, si applicable.

fillin_cloud_all()[source]

Fill the cloud_all with all vertices from all profiles.

update_cloud()[source]

Update the cloud with vertices from all profiles.

create_zone_from_banksbed()[source]

Create a zone from the banks and bed of the cross-sections.

Link the cross-sections to external zones.

Find intersections between the cross-sections and linked zones.

export_gltf(zmin, fn='')[source]

Export the cross-sections to a GLTF file.

export_gltf_gen(points, triangles, fn='')[source]

Export generated cross-sections to a GLTF file.

set_zones(forceupdate: bool = False)[source]

Set/Prepare the zones for the cross-sections.

showstructure(parent=None, forceupdate=False)[source]

Show the structure of the cross-sections in the zones.

get_upstream() dict[source]

Get the upstream profile of the cross-sections.

get_downstream() dict[source]

Get the downstream profile of the cross-sections.

rename(fromidx: int, updown: bool = True)[source]

“ Rename the cross-sections starting from a given index.

Parameters:
  • fromidx (int) – The index from which to start renaming.

  • updown (bool) – If True, renames upstream sections; if False, renames all sections.

saveas(filename=None)[source]

Save the cross-sections to a file in the specified format.

verif_bed()[source]

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

get_min(whichname: str = '', whichprofile: profile = None)[source]

Get the minimum vertex of a profile or cross-section.

asshapely_ls()[source]

Convert the cross-sections to a MultiLineString using Shapely.

prepare_shapely()[source]

Prepare the cross-sections for Shapely operations.

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]

Find the minimum and maximum coordinates of the cross-sections.

Parameters:

update (bool) – If True, updates the min/max values based on the current profiles.

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]

Save the cross-sections as a WOLF vector file.

select_profile(x: float, y: float)[source]

Select the profile closest to the given coordinates (x, y).

Parameters:
  • x – X coordinate of the point.

  • y – Y coordinate of the point.

class wolfhece.PyCrosssections.Interpolator(vec1: wolfhece.PyVertexvectors.vector, vec2: wolfhece.PyVertexvectors.vector, supports: list[wolfhece.PyVertexvectors.vector], 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

interpolants = [][source]
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

mybanks[source]
mycs[source]
myinterp: list[Interpolator] = [][source]
add_interpolators(parent)[source]

Ajout d’objets ‘Interpolators’ pour affichage/stockage

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