diff --git a/src/View/Results/PlotAC.py b/src/View/Results/PlotAC.py index fe0e49d33b5670e0948516228ffb3896fc57d1a5..97aebee157be766a69051454c98c485de6055dea 100644 --- a/src/View/Results/PlotAC.py +++ b/src/View/Results/PlotAC.py @@ -43,6 +43,18 @@ class PlotAC(PamhyrPlot): self._current_reach_id = reach_id self._current_profile_id = profile_id + self.label_x = _translate("Results", "X (m)") + self.label_y = _translate("MainWindow_reach", "Elevation (m)") + + self.label_bottom = _translate("Results", "River bottom") + self.label_water = _translate("Results", "Water elevation") + self.label_water_max = _translate("Results", "Max water elevation") + + self._isometric_axis = False + + self._auto_relim_update = True + self._autoscale_update = True + @property def results(self): return self.data @@ -54,58 +66,67 @@ class PlotAC(PamhyrPlot): @timer def draw(self, highlight=None): - self.canvas.axes.cla() - self.canvas.axes.grid(color='grey', linestyle='--', linewidth=0.5) + self.init_axes() if self.results is None: return - self.canvas.axes.set_xlabel( - _translate("MainWindow_reach", "X (m)"), - color='black', fontsize=11 - ) - self.canvas.axes.set_ylabel( - _translate("MainWindow_reach", "Elevation (m)"), - color='black', fontsize=11 - ) - reach = self.results.river.reach(self._current_reach_id) profile = reach.profile(self._current_profile_id) + + self.draw_profile(reach, profile) + self.draw_water_elevation(reach, profile) + self.draw_water_elevation_max(reach, profile) + + self.enable_legend() + + self.idle() + self._init = True + + def draw_profile(self, reach, profile): x = profile.geometry.get_station() z = profile.geometry.z() - self.canvas.axes.set_xlim( - left=min(x), right=max(x) - ) - self.line_kp, = self.canvas.axes.plot( x, z, linestyle="solid", - lw=1.8, - color='grey', + lw=1.5, + label=self.label_bottom, + color=self.color_plot_river_bottom, ) + def draw_water_elevation(self, reach, profile): + x = profile.geometry.get_station() + z = profile.geometry.z() kp = reach.geometry.get_kp() - - # Water elevation water_z = profile.get_ts_key(self._current_timestamp, "Z") self.water, = self.canvas.axes.plot( [min(x), max(x)], [water_z, water_z], - lw=1., color='b', + label=self.label_water, + lw=1., color=self.color_plot_river_water, ) self.collection = self.canvas.axes.fill_between( x, z, water_z, where=z <= water_z, - color='skyblue', alpha=0.7, interpolate=True + color=self.color_plot_river_water_zone, + alpha=0.7, interpolate=True ) self.liste_chemins = self.collection.get_paths() - self.canvas.figure.tight_layout() - self.canvas.figure.canvas.draw_idle() - if self.toolbar is not None: - self.toolbar.update() + def draw_water_elevation_max(self, reach, profile): + x = profile.geometry.get_station() + z = profile.geometry.z() + kp = reach.geometry.get_kp() + water_z = max(profile.get_key("Z")) + + self.water_max, = self.canvas.axes.plot( + [min(x), max(x)], [water_z, water_z], + label=self.label_water_max, + linestyle='dotted', + lw=1., color=self.color_plot_river_water, + ) def set_reach(self, reach_id): self._current_reach_id = reach_id @@ -118,52 +139,51 @@ class PlotAC(PamhyrPlot): def set_timestamp(self, timestamp): self._current_timestamp = timestamp - self.update_poly() - - def update(self): reach = self.results.river.reach(self._current_reach_id) profile = reach.profile(self._current_profile_id) x = profile.geometry.get_station() z = profile.geometry.z() - self.line_kp.set_data(x, z) - - self.canvas.axes.set_xlim( - left=min(x), right=max(x) - ) - - kp = reach.geometry.get_kp() - - # Water elevation - water_z = profile.get_ts_key(self._current_timestamp, "Z") - - self.water.set_data([min(x), max(x)], [water_z, water_z]) + self.update_water(reach, profile, x, z) + self.update_idle() - self.collection.remove() - self.collection = self.canvas.axes.fill_between( - x, z, water_z, - where=z <= water_z, - color='skyblue', alpha=0.7, interpolate=True - ) - self.canvas.figure.canvas.draw_idle() - - def update_poly(self): + def update(self): + if not self._init: + self.draw() reach = self.results.river.reach(self._current_reach_id) profile = reach.profile(self._current_profile_id) x = profile.geometry.get_station() z = profile.geometry.z() - # Water elevation - water_z = profile.get_ts_key(self._current_timestamp, "Z") + self.update_river_bottom(reach, profile, x, z) + self.update_water(reach, profile, x, z) + self.update_water_max(reach, profile, x, z) + + self.update_idle() - self.water.set_data([min(x), max(x)], [water_z, water_z]) + def update_river_bottom(self, reach, profile, x, z): + self.line_kp.set_data(x, z) + + def update_water(self, reach, profile, x, z): + water_z = profile.get_ts_key(self._current_timestamp, "Z") + self.water.set_data( + [min(x), max(x)], + [water_z, water_z] + ) self.collection.remove() self.collection = self.canvas.axes.fill_between( x, z, water_z, where=z <= water_z, - color='skyblue', alpha=0.7, interpolate=True + color=self.color_plot_river_water_zone, + alpha=0.7, interpolate=True + ) + + def update_water_max(self, reach, profile, x, z): + water_z = max(profile.get_key("Z")) + self.water_max.set_data( + [min(x), max(x)], + [water_z, water_z] ) - self.canvas.figure.canvas.draw_idle() diff --git a/src/View/Results/PlotH.py b/src/View/Results/PlotH.py index 2b33f48c8f6b8dec5a77cb6ba1c898b0eee84c3d..fd07b45a889f4e4da5a372e61b72e89ec4fc51d2 100644 --- a/src/View/Results/PlotH.py +++ b/src/View/Results/PlotH.py @@ -60,8 +60,8 @@ class PlotH(PamhyrPlot): self._isometric_axis = False - self._auto_relim_update = True - self._autoscale_update = True + self._auto_relim_update = False + self._autoscale_update = False @property def results(self): @@ -145,7 +145,6 @@ class PlotH(PamhyrPlot): **self.plot_default_kargs ) - def set_reach(self, reach_id): self._current_reach_id = reach_id self._current_profile_id = 0 @@ -160,6 +159,14 @@ class PlotH(PamhyrPlot): self.update() def update(self): + if not self._init: + self.draw() + + self.update_data() + + self.update_idle() + + def update_data(self): reach = self.results.river.reach(self._current_reach_id) profile = reach.profile(self._current_profile_id) @@ -172,6 +179,3 @@ class PlotH(PamhyrPlot): self._current_timestamp, y[self.ts.index(self._current_timestamp)] ) - - self.canvas.axes.relim() - self.canvas.figure.canvas.draw_idle()