mirror of https://gitlab.com/pamhyr/pamhyr2
merge
commit
4f69553bd3
|
|
@ -1 +0,0 @@
|
|||
$Clapet_001 clapet
|
||||
Binary file not shown.
|
|
@ -599,29 +599,50 @@ class Mage(CommandLineSolver):
|
|||
if qlog is not None:
|
||||
qlog.put("Export VAR file")
|
||||
|
||||
with mage_file_open(os.path.join(repertory, f"{name}.VAR"), "w+") as f:
|
||||
files.append(f"{name}.VAR")
|
||||
nb_cv = 0
|
||||
for hs in hydraulic_structures:
|
||||
if hs.input_reach is None:
|
||||
continue
|
||||
|
||||
for hs in hydraulic_structures:
|
||||
if hs.input_reach is None:
|
||||
continue
|
||||
if not hs.input_reach.is_enable():
|
||||
continue
|
||||
|
||||
if not hs.input_reach.is_enable():
|
||||
continue
|
||||
if not hs.enabled:
|
||||
continue
|
||||
|
||||
for bhs in hs.basic_structures:
|
||||
for bhs in hs.basic_structures:
|
||||
if bhs.enabled:
|
||||
logger.info(bhs._type)
|
||||
if bhs._type != "CV":
|
||||
if bhs._type == "CV":
|
||||
nb_cv += 1
|
||||
|
||||
if nb_cv != 0:
|
||||
with mage_file_open(os.path.join(
|
||||
repertory, f"{name}.VAR"), "w+") as f:
|
||||
files.append(f"{name}.VAR")
|
||||
|
||||
for hs in hydraulic_structures:
|
||||
if hs.input_reach is None:
|
||||
continue
|
||||
|
||||
name = bhs.name
|
||||
if name == "":
|
||||
name = f"HS_{bhs.id:>3}".replace(" ", "0")
|
||||
if not hs.input_reach.is_enable():
|
||||
continue
|
||||
|
||||
f.write(
|
||||
f"${name} clapet"
|
||||
)
|
||||
if not hs.enabled:
|
||||
continue
|
||||
|
||||
for bhs in hs.basic_structures:
|
||||
logger.info(bhs._type)
|
||||
if bhs._type != "CV":
|
||||
continue
|
||||
|
||||
name = bhs.name
|
||||
if name == "":
|
||||
name = f"HS_{bhs.id:>3}".replace(" ", "0")
|
||||
|
||||
f.write(
|
||||
f"${name} clapet"
|
||||
)
|
||||
return files
|
||||
|
||||
def _export_DEV(self, study, repertory, qlog, name="0"):
|
||||
|
|
|
|||
|
|
@ -365,40 +365,43 @@ class InitialConditionsWindow(PamhyrWindow):
|
|||
self._update()
|
||||
|
||||
def generate_growing_constant_depth(self):
|
||||
dlg = DepthDialog(self.depth_value,
|
||||
self.depth_option,
|
||||
trad=self._trad,
|
||||
parent=self)
|
||||
if dlg.exec():
|
||||
self.depth_value = dlg.value
|
||||
self.depth_option = dlg.option
|
||||
self._table.generate("growing",
|
||||
self.depth_value,
|
||||
self.depth_option)
|
||||
self._update()
|
||||
|
||||
def generate_discharge(self):
|
||||
dlg = DischargeDialog(self.discharge_value,
|
||||
self.discharge_option,
|
||||
if self._reach.reach.number_profiles > 0:
|
||||
dlg = DepthDialog(self.depth_value,
|
||||
self.depth_option,
|
||||
trad=self._trad,
|
||||
parent=self)
|
||||
if dlg.exec():
|
||||
self.discharge_value = dlg.value
|
||||
self.discharge_option = dlg.option
|
||||
self._table.generate("discharge",
|
||||
self.discharge_value,
|
||||
self.discharge_option)
|
||||
self._update()
|
||||
if dlg.exec():
|
||||
self.depth_value = dlg.value
|
||||
self.depth_option = dlg.option
|
||||
self._table.generate("growing",
|
||||
self.depth_value,
|
||||
self.depth_option)
|
||||
self._update()
|
||||
|
||||
def generate_discharge(self):
|
||||
if self._reach.reach.number_profiles > 1:
|
||||
dlg = DischargeDialog(self.discharge_value,
|
||||
self.discharge_option,
|
||||
trad=self._trad,
|
||||
parent=self)
|
||||
if dlg.exec():
|
||||
self.discharge_value = dlg.value
|
||||
self.discharge_option = dlg.option
|
||||
self._table.generate("discharge",
|
||||
self.discharge_value,
|
||||
self.discharge_option)
|
||||
self._update()
|
||||
|
||||
def generate_height(self):
|
||||
dlg = HeightDialog(self.height_values,
|
||||
self.height_option,
|
||||
trad=self._trad,
|
||||
parent=self)
|
||||
if dlg.exec():
|
||||
self.height_values = dlg.values
|
||||
self.height_option = dlg.option
|
||||
self._table.generate("height",
|
||||
self.height_values,
|
||||
self.height_option)
|
||||
self._update()
|
||||
if self._reach.reach.number_profiles > 0:
|
||||
dlg = HeightDialog(self.height_values,
|
||||
self.height_option,
|
||||
trad=self._trad,
|
||||
parent=self)
|
||||
if dlg.exec():
|
||||
self.height_values = dlg.values
|
||||
self.height_option = dlg.option
|
||||
self._table.generate("height",
|
||||
self.height_values,
|
||||
self.height_option)
|
||||
self._update()
|
||||
|
|
|
|||
|
|
@ -20,8 +20,13 @@ import logging
|
|||
|
||||
from tools import timer, trace
|
||||
|
||||
from View.Tools.Plot.PamhyrToolbar import PamhyrPlotToolbar
|
||||
from View.Tools.Plot.PamhyrCanvas import MplCanvas
|
||||
from View.PlotXY import PlotXY
|
||||
from View.Tools.PamhyrWidget import PamhyrWidget
|
||||
|
||||
from PyQt5.QtWidgets import QVBoxLayout
|
||||
|
||||
logger = logging.getLogger()
|
||||
|
||||
|
||||
|
|
@ -38,7 +43,9 @@ class WidgetInfo(PamhyrWidget):
|
|||
parent=parent
|
||||
)
|
||||
|
||||
self.parent = parent
|
||||
self.set_initial_values()
|
||||
self.setup_graph()
|
||||
|
||||
@property
|
||||
def study(self):
|
||||
|
|
@ -64,6 +71,25 @@ class WidgetInfo(PamhyrWidget):
|
|||
self.set_label_text("label_lc", "-")
|
||||
self.set_label_text("label_hs", "-")
|
||||
|
||||
def setup_graph(self):
|
||||
self.canvas = MplCanvas(width=5, height=4, dpi=100)
|
||||
self.canvas.setObjectName("canvas")
|
||||
self.plot_layout_xy = self.find(QVBoxLayout, "verticalLayout")
|
||||
self._toolbar_xy = PamhyrPlotToolbar(
|
||||
self.canvas, self,
|
||||
items=["home", "zoom", "save", "iso", "back/forward", "move"]
|
||||
)
|
||||
self.plot_layout_xy.addWidget(self._toolbar_xy)
|
||||
self.plot_layout_xy.addWidget(self.canvas)
|
||||
|
||||
self.plot = PlotXY(
|
||||
canvas=self.canvas,
|
||||
data=None,
|
||||
trad=self.parent._trad,
|
||||
toolbar=self._toolbar_xy,
|
||||
parent=self
|
||||
)
|
||||
|
||||
def update(self):
|
||||
if self._study is None:
|
||||
self.set_initial_values()
|
||||
|
|
@ -75,6 +101,15 @@ class WidgetInfo(PamhyrWidget):
|
|||
self.set_network_values()
|
||||
self.set_geometry_values()
|
||||
|
||||
self.plot = PlotXY(
|
||||
canvas=self.canvas,
|
||||
data=self._study.river.enable_edges(),
|
||||
trad=self.parent._trad,
|
||||
toolbar=self._toolbar_xy,
|
||||
parent=self
|
||||
)
|
||||
self.plot.update()
|
||||
|
||||
def set_network_values(self):
|
||||
river = self._study.river
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,119 @@
|
|||
# PlotXY.py -- Pamhyr
|
||||
# Copyright (C) 2023-2024 INRAE
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from tools import timer, trace
|
||||
from View.Tools.PamhyrPlot import PamhyrPlot
|
||||
from matplotlib import collections
|
||||
import numpy as np
|
||||
|
||||
from PyQt5.QtCore import (
|
||||
QCoreApplication, Qt, QItemSelectionModel,
|
||||
QItemSelection, QItemSelectionRange,
|
||||
)
|
||||
from PyQt5.QtWidgets import QApplication, QTableView
|
||||
|
||||
_translate = QCoreApplication.translate
|
||||
|
||||
|
||||
class PlotXY(PamhyrPlot):
|
||||
def __init__(self, canvas=None, trad=None, data=None, toolbar=None,
|
||||
table=None, parent=None):
|
||||
super(PlotXY, self).__init__(
|
||||
canvas=canvas,
|
||||
trad=trad,
|
||||
data=data,
|
||||
toolbar=toolbar,
|
||||
table=table,
|
||||
parent=parent
|
||||
)
|
||||
|
||||
self._data = data
|
||||
self.label_x = self._trad["x"]
|
||||
self.label_y = self._trad["y"]
|
||||
self.parent = parent
|
||||
|
||||
self._isometric_axis = True
|
||||
|
||||
self._auto_relim_update = True
|
||||
self._autoscale_update = True
|
||||
|
||||
@timer
|
||||
def draw(self):
|
||||
self.init_axes()
|
||||
|
||||
if self._data is None:
|
||||
self.idle()
|
||||
return
|
||||
|
||||
if len(self._data) < 1:
|
||||
self.idle()
|
||||
return
|
||||
|
||||
self.line_lr = []
|
||||
for data in self._data:
|
||||
if data.reach.number_profiles != 0:
|
||||
self.draw_xy(data.reach)
|
||||
self.draw_lr(data.reach)
|
||||
self.idle()
|
||||
return
|
||||
|
||||
def draw_xy(self, reach):
|
||||
line_xy = []
|
||||
for xy in zip(reach.get_x(), reach.get_y()):
|
||||
line_xy.append(np.column_stack(xy))
|
||||
|
||||
line_xy_collection = collections.LineCollection(
|
||||
line_xy,
|
||||
colors=self.color_plot_river_bottom
|
||||
)
|
||||
self.canvas.axes.add_collection(line_xy_collection)
|
||||
|
||||
def draw_lr(self, reach):
|
||||
lx = []
|
||||
ly = []
|
||||
rx = []
|
||||
ry = []
|
||||
|
||||
for x, y in zip(reach.get_x(),
|
||||
reach.get_y()):
|
||||
lx.append(x[0])
|
||||
ly.append(y[0])
|
||||
|
||||
rx.append(x[-1])
|
||||
ry.append(y[-1])
|
||||
|
||||
line = self.canvas.axes.plot(
|
||||
lx, ly,
|
||||
color=self.color_plot_river_bottom,
|
||||
linestyle="dotted",
|
||||
lw=1.,
|
||||
)
|
||||
self.line_lr.append(line)
|
||||
|
||||
line = self.canvas.axes.plot(
|
||||
rx, ry,
|
||||
color=self.color_plot_river_bottom,
|
||||
linestyle="dotted",
|
||||
lw=1.,
|
||||
)
|
||||
self.line_lr.append(line)
|
||||
|
||||
@timer
|
||||
def update(self):
|
||||
self.draw()
|
||||
self.update_idle()
|
||||
|
|
@ -49,8 +49,8 @@ class Plot(PamhyrPlot):
|
|||
self._mode = mode
|
||||
self._table_headers = self._trad.get_dict("table_headers")
|
||||
|
||||
self.label_x = self._table_headers["z"]
|
||||
self.label_y = self._table_headers["area"]
|
||||
self.label_x = self._table_headers["area"]
|
||||
self.label_y = self._table_headers["z"]
|
||||
|
||||
self._isometric_axis = False
|
||||
|
||||
|
|
@ -71,8 +71,8 @@ class Plot(PamhyrPlot):
|
|||
self._init = True
|
||||
|
||||
def draw_data(self):
|
||||
x = list(map(lambda v: v[0], self.data.data))
|
||||
y = list(map(lambda v: v[1], self.data.data))
|
||||
x = list(map(lambda v: v[1], self.data.data))
|
||||
y = list(map(lambda v: v[0], self.data.data))
|
||||
self._line, = self.canvas.axes.plot(
|
||||
x, y,
|
||||
color=self.color_plot,
|
||||
|
|
@ -89,7 +89,7 @@ class Plot(PamhyrPlot):
|
|||
self.update_idle()
|
||||
|
||||
def update_data(self):
|
||||
x = list(map(lambda v: v[0], self.data.data))
|
||||
y = list(map(lambda v: v[1], self.data.data))
|
||||
x = list(map(lambda v: v[1], self.data.data))
|
||||
y = list(map(lambda v: v[0], self.data.data))
|
||||
|
||||
self._line.set_data(x, y)
|
||||
|
|
|
|||
|
|
@ -146,8 +146,9 @@ class PlotXY(PamhyrPlot):
|
|||
return
|
||||
|
||||
reach = self.results.river.reach(self._current_reach_id)
|
||||
reaches = self.results.river.reachs
|
||||
|
||||
self.draw_profiles(reach)
|
||||
self.draw_profiles(reach, reaches)
|
||||
self.draw_water_elevation(reach)
|
||||
self.draw_water_elevation_max(reach)
|
||||
self.draw_guide_lines(reach)
|
||||
|
|
@ -156,12 +157,12 @@ class PlotXY(PamhyrPlot):
|
|||
self.idle()
|
||||
self._init = True
|
||||
|
||||
def draw_profiles(self, reach):
|
||||
def draw_profiles(self, reach, reaches):
|
||||
if reach.geometry.number_profiles == 0:
|
||||
self._init = False
|
||||
return
|
||||
|
||||
self.line_xy = []
|
||||
# TODO uncomment to draw all the reaches
|
||||
# self.draw_other_profiles(reaches)
|
||||
for xy in zip(reach.geometry.get_x(),
|
||||
reach.geometry.get_y()):
|
||||
self.line_xy.append(np.column_stack(xy))
|
||||
|
|
@ -176,6 +177,19 @@ class PlotXY(PamhyrPlot):
|
|||
)
|
||||
self.canvas.axes.add_collection(self.line_xy_collection)
|
||||
|
||||
def draw_other_profiles(self, reaches):
|
||||
|
||||
for reach in reaches:
|
||||
for xy in zip(reach.geometry.get_x(),
|
||||
reach.geometry.get_y()):
|
||||
self.line_xy.append(np.column_stack(xy))
|
||||
|
||||
self.line_xy_collection = collections.LineCollection(
|
||||
self.line_xy,
|
||||
colors=self.color_plot_river_bottom,
|
||||
)
|
||||
self.canvas.axes.add_collection(self.line_xy_collection)
|
||||
|
||||
def draw_guide_lines(self, reach):
|
||||
x_complete = reach.geometry.get_guidelines_x()
|
||||
y_complete = reach.geometry.get_guidelines_y()
|
||||
|
|
|
|||
|
|
@ -606,11 +606,17 @@ class ResultsWindow(PamhyrWindow):
|
|||
|
||||
def export_to(self, filename, x, y):
|
||||
timestamps = sorted(self._results.get("timestamps"))
|
||||
reach = self._results.river.reachs[self._get_current_reach()]
|
||||
first_line = [f"Study: {self._results.study.name}",
|
||||
f"Reach: {reach.name}"]
|
||||
if x == "rk":
|
||||
timestamp = self._get_current_timestamp()
|
||||
first_line.append(f"Time: {timestamp}s")
|
||||
val_dict = self._export_rk(timestamp, y, filename)
|
||||
elif x == "time":
|
||||
profile = self._get_current_profile()
|
||||
pname = profile.name if profile.name != "" else profile.rk
|
||||
first_line.append(f"Profile: {pname}")
|
||||
val_dict = self._export_time(profile, y, filename)
|
||||
|
||||
with open(filename, 'w', newline='') as csvfile:
|
||||
|
|
@ -619,6 +625,7 @@ class ResultsWindow(PamhyrWindow):
|
|||
dict_x = self._trad.get_dict("values_x")
|
||||
dict_y = self._trad.get_dict("values_y")
|
||||
header = [dict_x[x]]
|
||||
writer.writerow(first_line)
|
||||
for text in y:
|
||||
header.append(dict_y[text])
|
||||
writer.writerow(header)
|
||||
|
|
|
|||
|
|
@ -146,3 +146,5 @@ class MainTranslate(UnitTranslate):
|
|||
"MainWindow",
|
||||
"Do you want to save current study before closing it?"
|
||||
)
|
||||
self._dict["x"] = _translate("MainWindow", "X (m)")
|
||||
self._dict["y"] = _translate("MainWindow", "Y (m)")
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS><TS version="2.0" language="fr_FR" sourcelanguage="en_150">
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="fr_FR" sourcelanguage="en_150">
|
||||
<context>
|
||||
<name>About</name>
|
||||
<message>
|
||||
|
|
@ -1167,7 +1168,7 @@ Cette fonctionnalité nécessite un bief muni d'une géométrie.</translati
|
|||
</message>
|
||||
<message>
|
||||
<location filename="../View/ui/about.ui" line="94"/>
|
||||
<source>Copyright © 2022-2024 INRAE</source>
|
||||
<source>Copyright © 2022-2024 INRAE</source>
|
||||
<translation type="obsolete">Copyright © 2022-2024 INRAE</translation>
|
||||
</message>
|
||||
<message>
|
||||
|
|
@ -1175,11 +1176,6 @@ Cette fonctionnalité nécessite un bief muni d'une géométrie.</translati
|
|||
<source>Version: @version @codename</source>
|
||||
<translation>Version : @version @codename</translation>
|
||||
</message>
|
||||
<message encoding="UTF-8">
|
||||
<location filename="../View/ui/about.ui" line="94"/>
|
||||
<source>Copyright © 2022-2024 INRAE</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Frictions</name>
|
||||
|
|
@ -1456,17 +1452,17 @@ Cette fonctionnalité nécessite un bief muni d'une géométrie.</translati
|
|||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../View/Translate.py" line="98"/>
|
||||
<location filename="../View/Translate.py" line="97"/>
|
||||
<source>Open debug window</source>
|
||||
<translation>Ouvrir la fenêtre de débogage</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../View/Translate.py" line="101"/>
|
||||
<location filename="../View/Translate.py" line="100"/>
|
||||
<source>Open SQLite debuging tool ('sqlitebrowser')</source>
|
||||
<translation>Ouvrir l'outil de débogage SQLite ('sqlitebrowser')</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../View/Translate.py" line="104"/>
|
||||
<location filename="../View/Translate.py" line="103"/>
|
||||
<source>Enable this window</source>
|
||||
<translation>Activer cette fenêtre</translation>
|
||||
</message>
|
||||
|
|
@ -2311,12 +2307,12 @@ Cette fonctionnalité nécessite un bief muni d'une géométrie.</translati
|
|||
<translation>Maillage</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../View/Translate.py" line="91"/>
|
||||
<location filename="../View/Translate.py" line="90"/>
|
||||
<source>Summary</source>
|
||||
<translation>Résumé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../View/Translate.py" line="94"/>
|
||||
<location filename="../View/Translate.py" line="93"/>
|
||||
<source>Checks</source>
|
||||
<translation>Vérifications</translation>
|
||||
</message>
|
||||
|
|
@ -2536,7 +2532,7 @@ Cette fonctionnalité nécessite un bief muni d'une géométrie.</translati
|
|||
<translation>Données</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../View/Translate.py" line="112"/>
|
||||
<location filename="../View/Translate.py" line="111"/>
|
||||
<source>Please select a reach</source>
|
||||
<translation>Veuillez sélectionner un bief</translation>
|
||||
</message>
|
||||
|
|
@ -2546,35 +2542,45 @@ Cette fonctionnalité nécessite un bief muni d'une géométrie.</translati
|
|||
<translation type="obsolete">L'édition de la géométrie nécessite un bief sélectionné dans le réseau fluvial pour pouvoir travailler dessus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../View/Translate.py" line="121"/>
|
||||
<location filename="../View/Translate.py" line="120"/>
|
||||
<source>Last open study</source>
|
||||
<translation>Dernière étude ouverte</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../View/Translate.py" line="124"/>
|
||||
<location filename="../View/Translate.py" line="123"/>
|
||||
<source>Do you want to open again the last open study?</source>
|
||||
<translation>Voulez-vous rouvrir la dernière étude ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../View/Translate.py" line="115"/>
|
||||
<location filename="../View/Translate.py" line="114"/>
|
||||
<source>This edition window need a reach selected into the river network to work on it</source>
|
||||
<translation>Cette fenêtre d'édition a besoin d'un bief sélectionné dans le réseau pour travailler dessus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../View/Translate.py" line="129"/>
|
||||
<location filename="../View/Translate.py" line="128"/>
|
||||
<source>Close without saving study</source>
|
||||
<translation>Fermer sans sauvegarder l'étude</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../View/Translate.py" line="132"/>
|
||||
<location filename="../View/Translate.py" line="131"/>
|
||||
<source>Do you want to save current study before closing it?</source>
|
||||
<translation>Souhaitez-vous sauvegarder l'étude en cours avant de la fermer ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../View/Translate.py" line="109"/>
|
||||
<location filename="../View/Translate.py" line="108"/>
|
||||
<source>Warning</source>
|
||||
<translation>Avertissement</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../View/Translate.py" line="135"/>
|
||||
<source>X (m)</source>
|
||||
<translation>X (m)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../View/Translate.py" line="136"/>
|
||||
<source>Y (m)</source>
|
||||
<translation>Y (m)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow_reach</name>
|
||||
|
|
@ -3255,17 +3261,17 @@ Cette fonctionnalité nécessite un bief muni d'une géométrie.</translati
|
|||
<translation>Vitesse (m/s)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../View/Translate.py" line="78"/>
|
||||
<location filename="../View/Translate.py" line="77"/>
|
||||
<source>Wet Perimeter (m)</source>
|
||||
<translation>Périmètre mouillé (m)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../View/Translate.py" line="81"/>
|
||||
<location filename="../View/Translate.py" line="80"/>
|
||||
<source>Hydraulic Radius (m)</source>
|
||||
<translation>Rayon hydraulique (m)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../View/Translate.py" line="84"/>
|
||||
<location filename="../View/Translate.py" line="83"/>
|
||||
<source>Froude number</source>
|
||||
<translation>Nombre de Froude</translation>
|
||||
</message>
|
||||
|
|
@ -3277,6 +3283,11 @@ Cette fonctionnalité nécessite un bief muni d'une géométrie.</translati
|
|||
<message>
|
||||
<location filename="../View/Translate.py" line="77"/>
|
||||
<source>Wet Area (m^2)</source>
|
||||
<translation type="obsolete">Aire mouillée (m²)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../View/Translate.py" line="76"/>
|
||||
<source>Wet Area (m²)</source>
|
||||
<translation>Aire mouillée (m²)</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
|
|
|||
Loading…
Reference in New Issue