This commit is contained in:
Theophile Terraz committed 2024-05-13 16:02:36 +02:00
commit 9d0168a9ee
28 files changed
+456 -139

No files matched your search

-2
View File
@@ -306,8 +306,6 @@ class MeshingWithMageMailleurTT(AMeshingTool):
st_file = self.export_reach_to_st(reach, tmp)
m_file = st_file.rsplit(".ST", 1)[0] + ".M"
os.sync()
proc = QProcess()
proc.setWorkingDirectory(tmp)
+9 -1
View File
@@ -47,7 +47,7 @@ class PointXYZ(Point, SQLSubModel):
z INTEGER NOT NULL,
profile INTEGER NOT NULL,
sl INTEGER,
FOREIGN KEY(profile) REFERENCES profileXYZ(id),
FOREIGN KEY(profile) REFERENCES geometry_profileXYZ(id),
FOREIGN KEY(sl) REFERENCES sedimentary_layer(id)
)
""")
@@ -220,3 +220,11 @@ class PointXYZ(Point, SQLSubModel):
Euclidean 3D distance between the two points
"""
return dist((p1.x, p1.y, p1.z), (p2.x, p2.y, p2.z))
@staticmethod
def areatriangle3d(p1, p2, p3):
a = PointXYZ.distance(p1, p2)
b = PointXYZ.distance(p2, p3)
c = PointXYZ.distance(p3, p1)
s = (a + b + c) / 2
return (s*(s-a) * (s-b)*(s-c)) ** 0.5
+5
View File
@@ -296,6 +296,11 @@ class Profile(object):
)
self._status.modified()
@timer
def reverse(self):
self._points.reverse()
self._status.modified()
# Sediment Layers
def get_sl(self):
+29
View File
@@ -578,3 +578,32 @@ class ProfileXYZ(Profile, SQLSubModel):
break
return last_point
def purge(self, np_purge):
"""
Remove points to keep at most np_purge points.
"""
if (self.nb_points <= np_purge): return
nb_named = 2 # we consider the first and last point as named
area = [0.0]
for i in range(1, self.nb_points-1):
if self.point(i).point_is_named():
area.append(9999999.999)
nb_named += 1
else:
area.append(PointXYZ.areatriangle3d(self.point(i-1),self.point(i),self.point(i+1)))
area.append(0.0)
while (self.nb_points > max(np_purge, nb_named)):
to_rm = np.argmin(area[1:self.nb_points-1])+1
self.delete_i([to_rm])
area.pop(to_rm)
for i in [to_rm-1, to_rm]:
if (i == 0): continue
if (i == self.nb_points - 1): continue
if self.point(i).point_is_named():
area[i] = 9999999.999
else:
area[i] = PointXYZ.areatriangle3d(self.point(i-1),self.point(i),self.point(i+1))
+4 -2
View File
@@ -167,8 +167,10 @@ class CommandLineSolver(AbstractSolver):
repertory, "pamhyr-study-description.txt"
)
with open(path, "w+") as f:
txt = study.description
with open(path, "w+", encoding='utf-8') as f:
txt = study.description\
.encode()\
.decode('utf-8', 'replace')
f.write(txt)
#######
+26 -25
View File
@@ -282,6 +282,9 @@ class Mage(CommandLineSolver):
if bound.node is None:
continue
if not study.river.is_enable_node(bound.node):
continue
if bound.bctype == "ZD":
AVA.append(bound)
elif bound.bctype == "TD" or bound.bctype == "PC":
@@ -357,13 +360,7 @@ class Mage(CommandLineSolver):
with mage_file_open(os.path.join(repertory, f"{name}.RUG"), "w+") as f:
files.append(f"{name}.RUG")
edges = study.river.edges()
edges = list(
filter(
lambda e: e.is_enable(),
edges
)
)
edges = study.river.enable_edges()
id = 1
for edge in edges:
@@ -495,6 +492,9 @@ class Mage(CommandLineSolver):
if not hs.input_reach.is_enable():
continue
if not hs.enabled:
continue
if hs.input_kp is None:
continue
@@ -510,25 +510,26 @@ class Mage(CommandLineSolver):
def _export_SIN_bhs(self, study, sin_dict, hs, f):
for bhs in hs.basic_structures:
reach_id = study.river.get_edge_id(hs.input_reach) + 1
param_str = ' '.join(
[
f'{p:>10.3f}'
for p in self._export_SIN_parameters(bhs)
]
)
if bhs.enabled:
reach_id = study.river.get_edge_id(hs.input_reach) + 1
param_str = ' '.join(
[
f'{p:>10.3f}'
for p in self._export_SIN_parameters(bhs)
]
)
name = bhs.name
if name == "":
name = f"HS_{bhs.id:>3}".replace(" ", "0")
else:
name = name.replace(" ", "_")
name = bhs.name
if name == "":
name = f"HS_{bhs.id:>3}".replace(" ", "0")
else:
name = name.replace(" ", "_")
f.write(
f"{sin_dict[bhs._type]} " +
f"{reach_id} {float(hs.input_kp):>12.3f} " +
f"{param_str} {name}\n"
)
f.write(
f"{sin_dict[bhs._type]} " +
f"{reach_id} {float(hs.input_kp):>12.3f} " +
f"{param_str} {name}\n"
)
def _export_SIN_parameters(self, bhs):
res = [9999.999] * 5
@@ -802,7 +803,7 @@ class Mage8(Mage):
value = "O" if value.lower() == "y" else "N"
if name == "init_internal":
value = ("p" if value.lower() in ["y", "yes", "true"]
value = ("p" if value.lower() in ["y", "yes", "true", "o"]
else "")
logger.debug(
+1 -1
View File
@@ -129,7 +129,7 @@ class PlotAC(PamhyrPlot):
if txt.strip() in self.complete_gl:
color = self.color_complete_gl[
lcomplete.index(txt)
lcomplete.index(txt) % len(self.color_complete_gl)
]
else:
color = self.color_incomplete_gl[
+3 -1
View File
@@ -167,7 +167,9 @@ class PlotKPZ(PamhyrPlot):
self.line_kp_zgl.append(
self.canvas.axes.plot(
kp, z, lw=1., color=self.colors[ind]
kp, z, lw=1.,
color=self.colors[ind % len(self.colors)],
linestyle=self.linestyle[ind // len(self.colors)]
)
)
ind += 1
+2 -1
View File
@@ -130,7 +130,8 @@ class PlotXY(PamhyrPlot):
self.line_gl = []
for x, y in zip(x_complete, y_complete):
line = self.canvas.axes.plot(
x, y, color=self.colors[ind]
x, y, color=self.colors[ind % len(self.colors)],
linestyle=self.linestyle[ind // len(self.colors)]
)
self.line_gl.append(line)
ind += 1
+20
View File
@@ -250,6 +250,26 @@ class GeometryProfileTableModel(PamhyrTableModel):
self.endMoveRows()
self.layoutChanged.emit()
def purge(self):
self._undo.push(
PurgeCommand(
self._data, 24
)
)
self.layoutChanged.emit()
def reverse(self):
self._undo.push(
ReverseCommand(
self._data
)
)
self.layoutChanged.emit()
def paste(self, row, header, data):
if row > self._data.number_points:
return
+28
View File
@@ -169,6 +169,34 @@ class MoveCommand(QUndoCommand):
self._profile.move_down_point(self._i)
class ReverseCommand(QUndoCommand):
def __init__(self, profile):
QUndoCommand.__init__(self)
self._profile = profile
def undo(self):
self._profile.reverse()
def redo(self):
self._profile.reverse()
class PurgeCommand(QUndoCommand):
def __init__(self, profile, np_purge):
QUndoCommand.__init__(self)
self._profile = profile
self._old = self._profile.points.copy()
self._np_purge = np_purge
def undo(self):
self._profile._points = self._old.copy()
def redo(self):
self._profile.purge(self._np_purge)
class PasteCommand(QUndoCommand):
def __init__(self, profile, row, points):
QUndoCommand.__init__(self)
+24
View File
@@ -125,6 +125,8 @@ class ProfileWindow(PamhyrWindow):
"action_down": self.move_down,
"action_add": self.add,
"action_delete": self.delete,
"action_purge": self.purge,
"action_reverse": self.reverse,
}
for action in actions:
@@ -146,6 +148,12 @@ class ProfileWindow(PamhyrWindow):
self.update_plot()
self._propagate_update(key=Modules.GEOMETRY)
def _update(self, redraw=False, propagate=True):
if redraw:
self.update_plot()
if propagate:
self._propagate_update(key=Modules.GEOMETRY)
def update_plot(self):
self._tablemodel.blockSignals(True)
@@ -153,6 +161,14 @@ class ProfileWindow(PamhyrWindow):
self._tablemodel.blockSignals(False)
def _propagated_update(self, key=Modules(0)):
if Modules.GEOMETRY not in key:
return
print("=====TOTO=====")
self._tablemodel.layoutChanged.emit()
self._update(redraw=True, propagate=False)
def index_selected_row(self):
table = self.find(QTableView, "tableView")
rows = table.selectionModel()\
@@ -238,6 +254,14 @@ class ProfileWindow(PamhyrWindow):
self.update()
def purge(self):
self._tablemodel.purge()
self.update()
def reverse(self):
self._tablemodel.reverse()
self.update()
def _copy(self):
table = self.find(QTableView, "tableView")
rows = table.selectionModel().selectedRows()
+9
View File
@@ -246,3 +246,12 @@ class GeometryReachTableModel(PamhyrTableModel):
self.layoutAboutToBeChanged.emit()
self.layoutChanged.emit()
def purge(self):
self._undo.push(
PurgeCommand(
self._data, 24
)
)
self.layoutChanged.emit()
+20
View File
@@ -254,3 +254,23 @@ class MeshingCommand(QUndoCommand):
for profile in self._new_profiles:
self._reach.insert_profile(0, profile)
class PurgeCommand(QUndoCommand):
def __init__(self, reach, np_purge):
QUndoCommand.__init__(self)
self._reach = reach
self._np_purge = np_purge
self._old = []
for profile in self._reach.profiles:
self._old.append(profile.points.copy())
def undo(self):
for i in range(self._reach.number_profiles):
self._reach.profiles[i]._points = self._old[i].copy()
def redo(self):
for profile in self._reach._profiles:
profile.purge(self._np_purge)
+10 -1
View File
@@ -188,6 +188,8 @@ class GeometryWindow(PamhyrWindow):
"action_delete": self.delete,
"action_edit": self.edit_profile,
"action_meshing": self.edit_meshing,
"action_update_kp": self.update_kp,
"action_purge": self.purge,
}
for action in actions:
@@ -227,7 +229,7 @@ class GeometryWindow(PamhyrWindow):
self._propagate_update(key=Modules.GEOMETRY)
def _propagated_update(self, key=Modules(0)):
if Modules.NETWORK not in key:
if Modules.NETWORK not in key and Modules.GEOMETRY not in key:
return
self._update(propagate=False)
@@ -507,6 +509,13 @@ class GeometryWindow(PamhyrWindow):
self._table.move_down(row)
self.select_current_profile()
def update_kp(self):
pass
def purge(self):
self._table.purge()
self.update_redraw()
def duplicate(self):
rows = [
row.row() for row in
@@ -252,13 +252,14 @@ class BasicHydraulicStructuresWindow(PamhyrWindow):
self._checkbox.setChecked(self._hs.basic_structure(row).enabled)
def _set_basic_structure_state(self):
row = self.index_selected_row()
if row is not None:
self._table.enabled(
row,
self._checkbox.isChecked()
)
rows = self.index_selected_rows()
if len(rows) != 0:
for row in rows:
if row is not None:
self._table.enabled(
row,
self._checkbox.isChecked()
)
def update(self):
self._set_checkbox_state()
+8 -6
View File
@@ -262,12 +262,14 @@ class HydraulicStructuresWindow(PamhyrWindow):
self._checkbox.setChecked(self._hs_lst.get(row).enabled)
def _set_structure_state(self):
row = self.index_selected_row()
if row is not None:
self._table.enabled(
row,
self._checkbox.isChecked()
)
rows = self.index_selected_rows()
if len(rows) != 0:
for row in rows:
if row is not None:
self._table.enabled(
row,
self._checkbox.isChecked()
)
def update(self):
self._set_checkbox_state()
+6
View File
@@ -445,9 +445,15 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
logger.debug(f"Propagation of {keys}")
for _, window in self.sub_win_list:
window._propagated_update(key=keys)
self._do_propagate_update_rec(window, keys)
self._tab_widget_checker.update(modules=keys)
def _do_propagate_update_rec(self, window, keys):
for _, win in window.sub_win_list:
win._propagated_update(key=keys)
self._do_propagate_update_rec(win, keys)
def update(self):
self.set_title()
+26 -26
View File
@@ -77,9 +77,9 @@ class CustomPlot(PamhyrPlot):
kp = reach.geometry.get_kp()
z_min = reach.geometry.get_z_min()
self.canvas.axes.set_xlim(
left=min(kp), right=max(kp)
)
# self.canvas.axes.set_xlim(
# left=min(kp), right=max(kp)
# )
meter_axes = self.canvas.axes
m3S_axes = self.canvas.axes
@@ -88,10 +88,10 @@ class CustomPlot(PamhyrPlot):
lines = {}
if "elevation" in self._y:
meter_axes.set_ylim(
bottom=min(0, min(z_min)),
top=max(z_min) + 1
)
# meter_axes.set_ylim(
# bottom=min(0, min(z_min)),
# top=max(z_min) + 1
# )
line = meter_axes.plot(
kp, z_min,
@@ -108,10 +108,10 @@ class CustomPlot(PamhyrPlot):
)
)
meter_axes.set_ylim(
bottom=min(0, min(z_min)),
top=max(water_z) + 1
)
# meter_axes.set_ylim(
# bottom=min(0, min(z_min)),
# top=max(water_z) + 1
# )
line = meter_axes.plot(
kp, water_z, lw=1.,
@@ -133,10 +133,10 @@ class CustomPlot(PamhyrPlot):
)
)
m3s_axes.set_ylim(
bottom=min(0, min(q)),
top=max(q) + 1
)
# m3s_axes.set_ylim(
# bottom=min(0, min(q)),
# top=max(q) + 1
# )
line = m3s_axes.plot(
kp, q, lw=1.,
@@ -206,9 +206,9 @@ class CustomPlot(PamhyrPlot):
ts = list(results.get("timestamps"))
ts.sort()
self.canvas.axes.set_xlim(
left=min(ts), right=max(ts)
)
# self.canvas.axes.set_xlim(
# left=min(ts), right=max(ts)
# )
x = ts
lines = {}
@@ -232,10 +232,10 @@ class CustomPlot(PamhyrPlot):
# Water elevation
z = profile.get_key("Z")
meter_axes.set_ylim(
bottom=min(0, min(z)),
top=max(z) + 1
)
# meter_axes.set_ylim(
# bottom=min(0, min(z)),
# top=max(z) + 1
# )
line = meter_axes.plot(
ts, z, lw=1.,
@@ -260,10 +260,10 @@ class CustomPlot(PamhyrPlot):
if "discharge" in self._y:
q = profile.get_key("Q")
m3s_axes.set_ylim(
bottom=min(0, min(q)),
top=max(q) + 1
)
# m3s_axes.set_ylim(
# bottom=min(0, min(q)),
# top=max(q) + 1
# )
line = m3s_axes.plot(
ts, q, lw=1.,
+5 -2
View File
@@ -119,11 +119,14 @@ class PlotKPC(PamhyrPlot):
self.line_kp_sl.append(None)
self.line_kp_sl[i], = self.canvas.axes.plot(
kp, z,
linestyle="solid" if i == len(final_z_sl) - 1 else "--",
linestyle=(
"solid" if i == len(final_z_sl) - 1
else self.linestyle[1:][i // len(self.colors)]
),
lw=1.,
color=(
self.color_plot_river_bottom if i == len(final_z_sl) - 1
else self.colors[i]
else self.colors[i % len(self.colors)]
)
)
+16 -4
View File
@@ -160,7 +160,10 @@ class ResultsWindow(PamhyrWindow):
self.canvas = MplCanvas(width=5, height=4, dpi=100)
self.canvas.setObjectName("canvas")
self.toolbar = PamhyrPlotToolbar(
self.canvas, self
self.canvas, self, items=[
"home", "move", "zoom", "save",
"iso", "back/forward"
]
)
self.plot_layout = self.find(QVBoxLayout, "verticalLayout")
self.plot_layout.addWidget(self.toolbar)
@@ -180,7 +183,10 @@ class ResultsWindow(PamhyrWindow):
self.canvas_2 = MplCanvas(width=5, height=4, dpi=100)
self.canvas_2.setObjectName("canvas_2")
self.toolbar_2 = PamhyrPlotToolbar(
self.canvas_2, self
self.canvas_2, self, items=[
"home", "move", "zoom", "save",
"iso", "back/forward"
]
)
self.plot_layout_2 = self.find(QVBoxLayout, "verticalLayout_2")
self.plot_layout_2.addWidget(self.toolbar_2)
@@ -199,7 +205,10 @@ class ResultsWindow(PamhyrWindow):
self.canvas_3 = MplCanvas(width=5, height=4, dpi=100)
self.canvas_3.setObjectName("canvas_3")
self.toolbar_3 = PamhyrPlotToolbar(
self.canvas_3, self
self.canvas_3, self, items=[
"home", "move", "zoom", "save",
"iso", "back/forward"
]
)
self.plot_layout_3 = self.find(QVBoxLayout, "verticalLayout_3")
self.plot_layout_3.addWidget(self.toolbar_3)
@@ -218,7 +227,10 @@ class ResultsWindow(PamhyrWindow):
self.canvas_4 = MplCanvas(width=5, height=4, dpi=100)
self.canvas_4.setObjectName("canvas_4")
self.toolbar_4 = PamhyrPlotToolbar(
self.canvas_4, self
self.canvas_4, self, items=[
"home", "move", "zoom", "save",
"iso", "back/forward"
]
)
self.plot_layout_4 = self.find(
QVBoxLayout, "verticalLayout_hydrograph")
+1
View File
@@ -40,6 +40,7 @@ class PamhyrPlot(APlot):
color_plot_river_water_zone = "skyblue"
colors = list(mplcolors.TABLEAU_COLORS)
linestyle = ['solid', 'dashed', 'dashdot', 'dotted']
plot_default_kargs = {
"lw": 1.,
+18
View File
@@ -58,6 +58,8 @@
<addaction name="action_sort_des"/>
<addaction name="action_up"/>
<addaction name="action_down"/>
<addaction name="action_purge"/>
<addaction name="action_reverse"/>
</widget>
<action name="action_add">
<property name="icon">
@@ -131,6 +133,22 @@
<string>Sort reversed points by nearest neighbor</string>
</property>
</action>
<action name="action_purge">
<property name="text">
<string>Purge</string>
</property>
<property name="toolTip">
<string>Purge the cross-section to keep a given number of points</string>
</property>
</action>
<action name="action_reverse">
<property name="text">
<string>Reverse</string>
</property>
<property name="toolTip">
<string>Reverse the points order</string>
</property>
</action>
</widget>
<resources/>
<connections/>
+18
View File
@@ -127,6 +127,8 @@
<addaction name="action_down"/>
<addaction name="action_export"/>
<addaction name="action_meshing"/>
<addaction name="action_update_kp"/>
<addaction name="action_purge"/>
</widget>
<action name="action_import">
<property name="text">
@@ -233,6 +235,22 @@
<string>Meshing</string>
</property>
</action>
<action name="action_update_kp">
<property name="text">
<string>Update KP</string>
</property>
<property name="toolTip">
<string>Recompute KP</string>
</property>
</action>
<action name="action_purge">
<property name="text">
<string>Purge</string>
</property>
<property name="toolTip">
<string>Purge cross-sections to keep a given number of points</string>
</property>
</action>
</widget>
<resources/>
<connections/>
+95 -60
View File
@@ -31,7 +31,7 @@
<message>
<location filename="../View/HydraulicStructures/BasicHydraulicStructures/Translate.py" line="30"/>
<source>Basic Hydraulic Structures</source>
<translation>Structure hydraulique élémentaire</translation>
<translation>Ouvrage hydraulique élémentaire</translation>
</message>
<message>
<location filename="../View/HydraulicStructures/BasicHydraulicStructures/Translate.py" line="34"/>
@@ -51,7 +51,7 @@
<message>
<location filename="../View/HydraulicStructures/BasicHydraulicStructures/Translate.py" line="54"/>
<source>Upper elevation (m)</source>
<translation>Côte de mise en charge (m)</translation>
<translation>Cote de mise en charge (m)</translation>
</message>
<message>
<location filename="../View/HydraulicStructures/BasicHydraulicStructures/Translate.py" line="57"/>
@@ -61,7 +61,7 @@
<message>
<location filename="../View/HydraulicStructures/BasicHydraulicStructures/Translate.py" line="60"/>
<source>Maximal loading elevation</source>
<translation>Côte de mise en charge maximale</translation>
<translation>Cote de mise en charge maximale</translation>
</message>
<message>
<location filename="../View/HydraulicStructures/BasicHydraulicStructures/Translate.py" line="63"/>
@@ -420,7 +420,7 @@
<message>
<location filename="../View/Results/CustomPlot/Translate.py" line="46"/>
<source>Bed load elevation (m)</source>
<translation>Côte du fond (m)</translation>
<translation>Cote du fond (m)</translation>
</message>
</context>
<context>
@@ -434,7 +434,7 @@
<context>
<name>Dialog</name>
<message>
<location filename="../View/ui/MeshingOptions.ui" line="14"/>
<location filename="../View/ui/SelectSolver.ui" line="14"/>
<source>Dialog</source>
<translation>Dialog</translation>
</message>
@@ -449,7 +449,7 @@
<translation>Type</translation>
</message>
<message>
<location filename="../View/ui/NewStudy.ui" line="92"/>
<location filename="../View/ui/ConfigureAddSolverDialog.ui" line="48"/>
<source>Description</source>
<translation>Description</translation>
</message>
@@ -829,7 +829,7 @@
<context>
<name>Form</name>
<message>
<location filename="../View/ui/Widgets/MainWindowTabCheckers.ui" line="14"/>
<location filename="../View/ui/dummy.ui" line="14"/>
<source>Form</source>
<translation>Formulaire</translation>
</message>
@@ -1055,17 +1055,17 @@
<context>
<name>Geometry</name>
<message>
<location filename="../View/Geometry/Translate.py" line="56"/>
<location filename="../View/LateralContribution/translate.py" line="52"/>
<source>X (m)</source>
<translation>X (m)</translation>
</message>
<message>
<location filename="../View/Geometry/Translate.py" line="57"/>
<location filename="../View/LateralContribution/translate.py" line="53"/>
<source>Y (m)</source>
<translation>Y (m)</translation>
</message>
<message>
<location filename="../View/Geometry/Translate.py" line="58"/>
<location filename="../View/LateralContribution/translate.py" line="54"/>
<source>Z (m)</source>
<translation>Z (m)</translation>
</message>
@@ -1175,7 +1175,7 @@
<message>
<location filename="../View/HydraulicStructures/Translate.py" line="30"/>
<source>Hydraulic Structures</source>
<translation>Structures hydraulique</translation>
<translation>Structures hydrauliques</translation>
</message>
<message>
<location filename="../View/HydraulicStructures/Translate.py" line="34"/>
@@ -1262,17 +1262,17 @@
<translation>Activer cette fenêtre</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="14"/>
<location filename="../View/ui/Stricklers.ui" line="14"/>
<source>MainWindow</source>
<translation>Fenêtre principale</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="112"/>
<location filename="../View/ui/Stricklers.ui" line="52"/>
<source>toolBar</source>
<translation>Barre d&apos;outils</translation>
</message>
<message>
<location filename="../View/ui/EditLateralContribution.ui" line="79"/>
<location filename="../View/ui/Stricklers.ui" line="70"/>
<source>Add</source>
<translation>Ajouter</translation>
</message>
@@ -1282,7 +1282,7 @@
<translation>Ajouter un casier</translation>
</message>
<message>
<location filename="../View/ui/EditLateralContribution.ui" line="94"/>
<location filename="../View/ui/Stricklers.ui" line="82"/>
<source>Delete</source>
<translation>Supprimer</translation>
</message>
@@ -1292,7 +1292,7 @@
<translation>Supprimer casier(s)</translation>
</message>
<message>
<location filename="../View/ui/AdditionalFileList.ui" line="67"/>
<location filename="../View/ui/ReservoirList.ui" line="105"/>
<source>Edit</source>
<translation>Éditer</translation>
</message>
@@ -1327,7 +1327,7 @@
<translation>Éditer la couche sedimentaire</translation>
</message>
<message>
<location filename="../View/ui/REPLineList.ui" line="79"/>
<location filename="../View/ui/Results.ui" line="270"/>
<source>Ctrl+E</source>
<translation>Ctrl+E</translation>
</message>
@@ -1397,7 +1397,7 @@
<translation>Nouvelle étude</translation>
</message>
<message>
<location filename="../View/ui/EditLateralContribution.ui" line="85"/>
<location filename="../View/ui/BoundaryConditions.ui" line="120"/>
<source>Ctrl+N</source>
<translation>Ctrl+N</translation>
</message>
@@ -1482,12 +1482,12 @@
<translation>Éditer la géométrie</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="136"/>
<location filename="../View/ui/GeometryReach.ui" line="138"/>
<source>Import geometry</source>
<translation>Importer une géométrie</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="144"/>
<location filename="../View/ui/GeometryReach.ui" line="146"/>
<source>Export geometry</source>
<translation>Exporter la géométrie</translation>
</message>
@@ -1682,7 +1682,7 @@
<translation>Éditer les casiers</translation>
</message>
<message>
<location filename="../View/ui/HydraulicStructures.ui" line="14"/>
<location filename="../View/ui/MainWindow.ui" line="625"/>
<source>Hydraulic structures</source>
<translation>Structures hydraulique</translation>
</message>
@@ -1727,7 +1727,7 @@
<translation>Supprimer la(les) couche(s) sédimentaire(s) sélectionnée(s)</translation>
</message>
<message>
<location filename="../View/ui/EditLateralContribution.ui" line="100"/>
<location filename="../View/ui/BoundaryConditions.ui" line="135"/>
<source>Ctrl+D</source>
<translation>Ctrl+D</translation>
</message>
@@ -1762,7 +1762,7 @@
<translation>Ajouter une condition aux limites ou un apport ponctuel</translation>
</message>
<message>
<location filename="../View/ui/EditLateralContribution.ui" line="97"/>
<location filename="../View/ui/BoundaryConditions.ui" line="132"/>
<source>Delete current selected rows</source>
<translation>Supprimer les lignes selectionnées</translation>
</message>
@@ -1772,7 +1772,7 @@
<translation>Éditer une condition aux limites ou un apport ponctuel</translation>
</message>
<message>
<location filename="../View/ui/EditLateralContribution.ui" line="109"/>
<location filename="../View/ui/Stricklers.ui" line="94"/>
<source>Sort</source>
<translation>Trier</translation>
</message>
@@ -1824,7 +1824,7 @@
<message>
<location filename="../View/ui/Results.ui" line="169"/>
<source>Water elevation</source>
<translation>Côte de l&apos;eau</translation>
<translation>Cote de l&apos;eau</translation>
</message>
<message>
<location filename="../View/ui/Results.ui" line="201"/>
@@ -1842,7 +1842,7 @@
<translation>Recharger</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="141"/>
<location filename="../View/ui/Results.ui" line="264"/>
<source>Export</source>
<translation>Exporter</translation>
</message>
@@ -1852,7 +1852,7 @@
<translation>Exporter les données brutes</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="165"/>
<location filename="../View/ui/GeometryCrossSection.ui" line="82"/>
<source>delete</source>
<translation>supprimer</translation>
</message>
@@ -1917,87 +1917,87 @@
<translation>Supprimer points</translation>
</message>
<message>
<location filename="../View/ui/HydraulicStructures.ui" line="133"/>
<location filename="../View/ui/BasicHydraulicStructures.ui" line="136"/>
<source>Edit selected hydraulic structure</source>
<translation>Éditer l&apos;ouvrage hydraulique sélectionné</translation>
</message>
<message>
<location filename="../View/ui/SolverLog.ui" line="77"/>
<location filename="../View/ui/SolverLog.ui" line="78"/>
<source>Stop</source>
<translation>Stoper</translation>
</message>
<message>
<location filename="../View/ui/SolverLog.ui" line="86"/>
<location filename="../View/ui/SolverLog.ui" line="87"/>
<source>Start</source>
<translation>Démarrer</translation>
</message>
<message>
<location filename="../View/ui/SolverLog.ui" line="95"/>
<location filename="../View/ui/SolverLog.ui" line="96"/>
<source>Pause</source>
<translation>Pause</translation>
</message>
<message>
<location filename="../View/ui/SolverLog.ui" line="104"/>
<location filename="../View/ui/SolverLog.ui" line="105"/>
<source>LogFile</source>
<translation>Fichier de log</translation>
</message>
<message>
<location filename="../View/ui/SolverLog.ui" line="109"/>
<location filename="../View/ui/SolverLog.ui" line="110"/>
<source>results</source>
<translation>resultats</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="153"/>
<location filename="../View/ui/GeometryCrossSection.ui" line="70"/>
<source>add</source>
<translation>Ajouter</translation>
</message>
<message>
<location filename="../View/ui/GeometryCrossSection.ui" line="71"/>
<location filename="../View/ui/GeometryCrossSection.ui" line="73"/>
<source>Add a point on cross-section</source>
<translation>Ajouter un point à la section en travers</translation>
</message>
<message>
<location filename="../View/ui/GeometryCrossSection.ui" line="83"/>
<location filename="../View/ui/GeometryCrossSection.ui" line="85"/>
<source>Delete selected point(s)</source>
<translation>Supprimer le(s) point(s) sélectionné(s)</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="213"/>
<location filename="../View/ui/GeometryCrossSection.ui" line="94"/>
<source>up</source>
<translation>Monter</translation>
</message>
<message>
<location filename="../View/ui/GeometryCrossSection.ui" line="95"/>
<location filename="../View/ui/GeometryCrossSection.ui" line="97"/>
<source>Move up selected point(s)</source>
<translation>Déplacer le point sélectionné vers le haut</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="225"/>
<location filename="../View/ui/GeometryCrossSection.ui" line="106"/>
<source>down</source>
<translation>Descendre</translation>
</message>
<message>
<location filename="../View/ui/GeometryCrossSection.ui" line="107"/>
<location filename="../View/ui/GeometryCrossSection.ui" line="109"/>
<source>Mode down selected point(s)</source>
<translation>Déplacer le point sélectionné vers le bas</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="189"/>
<location filename="../View/ui/GeometryCrossSection.ui" line="118"/>
<source>sort_asc</source>
<translation>sort_asc</translation>
</message>
<message>
<location filename="../View/ui/GeometryCrossSection.ui" line="119"/>
<location filename="../View/ui/GeometryCrossSection.ui" line="121"/>
<source>Sort points by nearest neighbor</source>
<translation>Trier les points par leurs plus proches voisins</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="201"/>
<location filename="../View/ui/GeometryCrossSection.ui" line="130"/>
<source>sort_des</source>
<translation>sort_des</translation>
</message>
<message>
<location filename="../View/ui/GeometryCrossSection.ui" line="131"/>
<location filename="../View/ui/GeometryCrossSection.ui" line="133"/>
<source>Sort reversed points by nearest neighbor</source>
<translation>Trie inverser les points par leurs plus proche voisins</translation>
</message>
@@ -2014,10 +2014,10 @@
<message>
<location filename="../View/ui/Reservoir.ui" line="114"/>
<source>Sort points by elevation</source>
<translation>Trier les points par leur côte</translation>
<translation>Trier les points par leur cote</translation>
</message>
<message>
<location filename="../View/ui/ProfileSedimentLayers.ui" line="75"/>
<location filename="../View/ui/ReachSedimentLayers.ui" line="31"/>
<source>Edit sediment layers list</source>
<translation>Éditer la liste des couches sédimentaires</translation>
</message>
@@ -2112,52 +2112,52 @@
<translation>Éditer les couches sédimentaires</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="133"/>
<location filename="../View/ui/GeometryReach.ui" line="135"/>
<source>Import</source>
<translation>Importer</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="156"/>
<location filename="../View/ui/GeometryReach.ui" line="158"/>
<source>Add a cross-section</source>
<translation>Ajouter une section en travers</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="168"/>
<location filename="../View/ui/GeometryReach.ui" line="170"/>
<source>Delete selected cross-section(s)</source>
<translation>Supprimer la(es) section(s) en travers sélectionnée(s)</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="177"/>
<location filename="../View/ui/GeometryReach.ui" line="179"/>
<source>edit</source>
<translation>éditer</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="180"/>
<location filename="../View/ui/GeometryReach.ui" line="182"/>
<source>Edit selected cross section(s)</source>
<translation>Éditer la(es) section(s) en travers sélectionnée(s)</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="192"/>
<location filename="../View/ui/GeometryReach.ui" line="194"/>
<source>Sort cross-sections by ascending KP</source>
<translation>Trier les sections en travers par PK croissant</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="204"/>
<location filename="../View/ui/GeometryReach.ui" line="206"/>
<source>Sort cross-sections by descending KP</source>
<translation>Trier les sections en travers par PK décroissant</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="216"/>
<location filename="../View/ui/GeometryReach.ui" line="218"/>
<source>Move up selected cross-section(s)</source>
<translation>Déplacer la(s) section(s) en travers vers le haut</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="228"/>
<location filename="../View/ui/GeometryReach.ui" line="230"/>
<source>Move down selected cross-section(s)</source>
<translation>Déplacer la(es) section(s) en travers vers le bas</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="233"/>
<location filename="../View/ui/GeometryReach.ui" line="235"/>
<source>Meshing</source>
<translation>Maillage</translation>
</message>
@@ -2261,6 +2261,41 @@
<source>Edit the study information</source>
<translation>Éditer les information de l&apos;étude</translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="240"/>
<source>Update KP</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="243"/>
<source>Recompute KP</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../View/ui/GeometryCrossSection.ui" line="138"/>
<source>Purge</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../View/ui/GeometryReach.ui" line="251"/>
<source>Purge cross-sections to keep a given number of points</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../View/ui/GeometryCrossSection.ui" line="141"/>
<source>Purge the cross-section to keep a given number of points</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../View/ui/GeometryCrossSection.ui" line="146"/>
<source>Reverse</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../View/ui/GeometryCrossSection.ui" line="149"/>
<source>Reverse the points order</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindowProfile</name>
@@ -2472,12 +2507,12 @@
<message>
<location filename="../View/Results/translate.py" line="41"/>
<source>Water elevation</source>
<translation>Côte de l&apos;eau</translation>
<translation>Cote de l&apos;eau</translation>
</message>
<message>
<location filename="../View/Results/translate.py" line="42"/>
<source>Max water elevation</source>
<translation>Côte maximum de l&apos;eau</translation>
<translation>Cote maximum de l&apos;eau</translation>
</message>
<message>
<location filename="../View/Results/translate.py" line="48"/>
@@ -2913,12 +2948,12 @@
<message>
<location filename="../View/Translate.py" line="60"/>
<source>Elevation (m)</source>
<translation>Côte (m)</translation>
<translation>Cote (m)</translation>
</message>
<message>
<location filename="../View/Translate.py" line="61"/>
<source>Water elevation (m)</source>
<translation>Côte de l&apos;eau (m)</translation>
<translation>Cote de l&apos;eau (m)</translation>
</message>
<message>
<location filename="../View/Translate.py" line="65"/>