From 46738cec6b9746d2e52e5b084ec566264fea74a0 Mon Sep 17 00:00:00 2001 From: Theophile Terraz Date: Wed, 19 Mar 2025 16:55:09 +0100 Subject: [PATCH] enable multiple profiles in discharge visualization window --- src/View/Results/PlotAC.py | 2 +- src/View/Results/PlotH.py | 44 ++++++++++++++++++++------------------ src/View/Results/Window.py | 31 ++++++++++++++++++--------- 3 files changed, 45 insertions(+), 32 deletions(-) diff --git a/src/View/Results/PlotAC.py b/src/View/Results/PlotAC.py index 77877022..9c2e7d53 100644 --- a/src/View/Results/PlotAC.py +++ b/src/View/Results/PlotAC.py @@ -29,7 +29,7 @@ _translate = QCoreApplication.translate class PlotAC(PamhyrPlot): 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): super(PlotAC, self).__init__( canvas=canvas, diff --git a/src/View/Results/PlotH.py b/src/View/Results/PlotH.py index 22abb87f..be86c43e 100644 --- a/src/View/Results/PlotH.py +++ b/src/View/Results/PlotH.py @@ -35,7 +35,7 @@ logger = logging.getLogger() class PlotH(PamhyrPlot): 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): super(PlotH, self).__init__( canvas=canvas, @@ -127,27 +127,29 @@ class PlotH(PamhyrPlot): results = self.results[res_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 - y = profile.get_key("Q") + x = self._timestamps + y = profile.get_key("Q") - if res_id == 2: - label = "Δ " + self.label_discharge - else: - label = self.label_discharge + if res_id == 2: + label = "Δ " + self.label_discharge + else: + label = self.label_discharge - if len(self._current_res_id) > 1: - if res_id != 2: - label += f" ({results._solver.name})" + if len(self._current_res_id) > 1: + if res_id != 2: + label += f" ({results._solver.name})" - line, = self.canvas.axes.plot( - x, y, - label=label, - color=self.colors[res_id + 1], - **self.plot_default_kargs - ) - self._line.append(line) + line, = self.canvas.axes.plot( + x, y, + label=label, + color=self.colors[res_id + 1], + linestyle=self.linestyle[i % len(self.linestyle)], + **self.plot_default_kargs + ) + self._line.append(line) def draw_current(self): self._current, = self.canvas.axes.plot( @@ -162,7 +164,6 @@ class PlotH(PamhyrPlot): def draw_max(self, res_id): results = self.results[res_id] reach = results.river.reach(self._current_reach_id) - profile = reach.profile(self._current_profile_id) if reach.geometry.number_profiles == 0: self._init = False @@ -194,12 +195,13 @@ class PlotH(PamhyrPlot): def set_reach(self, reach_id): self._current_reach_id = reach_id - self._current_profile_id = 0 + self._current_profile_id = [0] self.draw() def set_profile(self, profile_id): self._current_profile_id = profile_id - self.update() + # self.update() + self.draw() def set_result(self, res_id): self._current_res_id = res_id diff --git a/src/View/Results/Window.py b/src/View/Results/Window.py index ab3d58e9..1d33ea29 100644 --- a/src/View/Results/Window.py +++ b/src/View/Results/Window.py @@ -126,7 +126,7 @@ class ResultsWindow(PamhyrWindow): return self.update(reach_id=0, - profile_id=0) + profile_id=[0]) self.update_table_selection_solver(0) @@ -269,7 +269,7 @@ class ResultsWindow(PamhyrWindow): canvas=self.canvas_4, results=self._results, reach_id=0, - profile_id=0, + profile_id=[0], res_id=self._current_results, trad=self._trad, toolbar=self.toolbar_4, @@ -432,15 +432,15 @@ class ResultsWindow(PamhyrWindow): self.update_table_selection_profile(0) if profile_id is not None: - self.plot_xy.set_profile(profile_id) - self.plot_ac.set_profile(profile_id) - self.plot_rkc.set_profile(profile_id) + self.plot_xy.set_profile(profile_id[0]) + self.plot_ac.set_profile(profile_id[0]) + self.plot_rkc.set_profile(profile_id[0]) self.plot_h.set_profile(profile_id) 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: self._current_results = solver_id @@ -481,6 +481,14 @@ class ResultsWindow(PamhyrWindow): 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): return self._timestamps[ self._slider_time.value() @@ -496,12 +504,11 @@ class ResultsWindow(PamhyrWindow): def _set_current_profile(self): table = self.find(QTableView, f"tableView_profile") - indexes = table.selectedIndexes() + indexes = table.selectionModel().selectedRows() if len(indexes) == 0: return - ind = indexes[0].row() - self.update(profile_id=ind) + self.update(profile_id=[i.row() for i in indexes]) def _set_current_profile_raw_data(self): return @@ -545,6 +552,8 @@ class ResultsWindow(PamhyrWindow): self._reload_slider() def _add_custom_plot(self): + profile_id = self._get_current_profile() + self.update_table_selection_profile(profile_id) dlg = CustomPlotValuesSelectionDialog(parent=self) if dlg.exec(): x, y, envelop = dlg.value @@ -665,6 +674,8 @@ class ResultsWindow(PamhyrWindow): self._button_play.setIcon(self._icon_start) def _export(self): + profile_id = self._get_current_profile() + self.update_table_selection_profile(profile_id) dlg = CustomExportDialog(parent=self) if dlg.exec():