enable multiple profiles in discharge visualization window

terraz_dev
Theophile Terraz 2025-03-19 16:55:09 +01:00
parent e576bb15f1
commit 46738cec6b
3 changed files with 45 additions and 32 deletions

View File

@ -29,7 +29,7 @@ _translate = QCoreApplication.translate
class PlotAC(PamhyrPlot): class PlotAC(PamhyrPlot):
def __init__(self, canvas=None, trad=None, toolbar=None, def __init__(self, canvas=None, trad=None, toolbar=None,
results=None, reach_id=0, profile_id=0, res_id=0, results=None, reach_id=0, profile_id=[0], res_id=[0],
parent=None): parent=None):
super(PlotAC, self).__init__( super(PlotAC, self).__init__(
canvas=canvas, canvas=canvas,

View File

@ -35,7 +35,7 @@ logger = logging.getLogger()
class PlotH(PamhyrPlot): class PlotH(PamhyrPlot):
def __init__(self, canvas=None, trad=None, toolbar=None, def __init__(self, canvas=None, trad=None, toolbar=None,
results=None, reach_id=0, profile_id=0, res_id=[0], results=None, reach_id=0, profile_id=[0], res_id=[0],
parent=None): parent=None):
super(PlotH, self).__init__( super(PlotH, self).__init__(
canvas=canvas, canvas=canvas,
@ -127,27 +127,29 @@ class PlotH(PamhyrPlot):
results = self.results[res_id] results = self.results[res_id]
reach = results.river.reach(self._current_reach_id) reach = results.river.reach(self._current_reach_id)
profile = reach.profile(self._current_profile_id) for i, p in enumerate(self._current_profile_id):
profile = reach.profile(p)
x = self._timestamps x = self._timestamps
y = profile.get_key("Q") y = profile.get_key("Q")
if res_id == 2: if res_id == 2:
label = "Δ " + self.label_discharge label = "Δ " + self.label_discharge
else: else:
label = self.label_discharge label = self.label_discharge
if len(self._current_res_id) > 1: if len(self._current_res_id) > 1:
if res_id != 2: if res_id != 2:
label += f" ({results._solver.name})" label += f" ({results._solver.name})"
line, = self.canvas.axes.plot( line, = self.canvas.axes.plot(
x, y, x, y,
label=label, label=label,
color=self.colors[res_id + 1], color=self.colors[res_id + 1],
**self.plot_default_kargs linestyle=self.linestyle[i % len(self.linestyle)],
) **self.plot_default_kargs
self._line.append(line) )
self._line.append(line)
def draw_current(self): def draw_current(self):
self._current, = self.canvas.axes.plot( self._current, = self.canvas.axes.plot(
@ -162,7 +164,6 @@ class PlotH(PamhyrPlot):
def draw_max(self, res_id): def draw_max(self, res_id):
results = self.results[res_id] results = self.results[res_id]
reach = results.river.reach(self._current_reach_id) reach = results.river.reach(self._current_reach_id)
profile = reach.profile(self._current_profile_id)
if reach.geometry.number_profiles == 0: if reach.geometry.number_profiles == 0:
self._init = False self._init = False
@ -194,12 +195,13 @@ class PlotH(PamhyrPlot):
def set_reach(self, reach_id): def set_reach(self, reach_id):
self._current_reach_id = reach_id self._current_reach_id = reach_id
self._current_profile_id = 0 self._current_profile_id = [0]
self.draw() self.draw()
def set_profile(self, profile_id): def set_profile(self, profile_id):
self._current_profile_id = profile_id self._current_profile_id = profile_id
self.update() # self.update()
self.draw()
def set_result(self, res_id): def set_result(self, res_id):
self._current_res_id = res_id self._current_res_id = res_id

View File

@ -126,7 +126,7 @@ class ResultsWindow(PamhyrWindow):
return return
self.update(reach_id=0, self.update(reach_id=0,
profile_id=0) profile_id=[0])
self.update_table_selection_solver(0) self.update_table_selection_solver(0)
@ -269,7 +269,7 @@ class ResultsWindow(PamhyrWindow):
canvas=self.canvas_4, canvas=self.canvas_4,
results=self._results, results=self._results,
reach_id=0, reach_id=0,
profile_id=0, profile_id=[0],
res_id=self._current_results, res_id=self._current_results,
trad=self._trad, trad=self._trad,
toolbar=self.toolbar_4, toolbar=self.toolbar_4,
@ -432,15 +432,15 @@ class ResultsWindow(PamhyrWindow):
self.update_table_selection_profile(0) self.update_table_selection_profile(0)
if profile_id is not None: if profile_id is not None:
self.plot_xy.set_profile(profile_id) self.plot_xy.set_profile(profile_id[0])
self.plot_ac.set_profile(profile_id) self.plot_ac.set_profile(profile_id[0])
self.plot_rkc.set_profile(profile_id) self.plot_rkc.set_profile(profile_id[0])
self.plot_h.set_profile(profile_id) self.plot_h.set_profile(profile_id)
for plot in self._additional_plot: for plot in self._additional_plot:
self._additional_plot[plot].set_profile(profile_id) self._additional_plot[plot].set_profile(profile_id[0])
self.update_table_selection_profile(profile_id) # self.update_table_selection_profile(profile_id[0])
if solver_id is not None: if solver_id is not None:
self._current_results = solver_id self._current_results = solver_id
@ -481,6 +481,14 @@ class ResultsWindow(PamhyrWindow):
return indexes[0].row() return indexes[0].row()
def _get_current_profiles_list(self):
table = self.find(QTableView, f"tableView_profile")
indexes = table.selectedIndexes()
if len(indexes) == 0:
return 0
return [i.row() for i in indexes]
def _get_current_timestamp(self): def _get_current_timestamp(self):
return self._timestamps[ return self._timestamps[
self._slider_time.value() self._slider_time.value()
@ -496,12 +504,11 @@ class ResultsWindow(PamhyrWindow):
def _set_current_profile(self): def _set_current_profile(self):
table = self.find(QTableView, f"tableView_profile") table = self.find(QTableView, f"tableView_profile")
indexes = table.selectedIndexes() indexes = table.selectionModel().selectedRows()
if len(indexes) == 0: if len(indexes) == 0:
return return
ind = indexes[0].row() self.update(profile_id=[i.row() for i in indexes])
self.update(profile_id=ind)
def _set_current_profile_raw_data(self): def _set_current_profile_raw_data(self):
return return
@ -545,6 +552,8 @@ class ResultsWindow(PamhyrWindow):
self._reload_slider() self._reload_slider()
def _add_custom_plot(self): def _add_custom_plot(self):
profile_id = self._get_current_profile()
self.update_table_selection_profile(profile_id)
dlg = CustomPlotValuesSelectionDialog(parent=self) dlg = CustomPlotValuesSelectionDialog(parent=self)
if dlg.exec(): if dlg.exec():
x, y, envelop = dlg.value x, y, envelop = dlg.value
@ -665,6 +674,8 @@ class ResultsWindow(PamhyrWindow):
self._button_play.setIcon(self._icon_start) self._button_play.setIcon(self._icon_start)
def _export(self): def _export(self):
profile_id = self._get_current_profile()
self.update_table_selection_profile(profile_id)
dlg = CustomExportDialog(parent=self) dlg = CustomExportDialog(parent=self)
if dlg.exec(): if dlg.exec():