Commit 6055065e authored by Pierre-Antoine Rouby's avatar Pierre-Antoine Rouby
Browse files

Results: Update plot KPC.

Showing with 98 additions and 32 deletions
+98 -32
...@@ -16,6 +16,8 @@ ...@@ -16,6 +16,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import logging
from tools import timer from tools import timer
from View.Tools.PamhyrPlot import PamhyrPlot from View.Tools.PamhyrPlot import PamhyrPlot
...@@ -23,6 +25,8 @@ from PyQt5.QtCore import ( ...@@ -23,6 +25,8 @@ from PyQt5.QtCore import (
QCoreApplication QCoreApplication
) )
logger = logging.getLogger()
_translate = QCoreApplication.translate _translate = QCoreApplication.translate
...@@ -42,6 +46,15 @@ class PlotKPC(PamhyrPlot): ...@@ -42,6 +46,15 @@ class PlotKPC(PamhyrPlot):
self._current_reach_id = reach_id self._current_reach_id = reach_id
self._current_profile_id = profile_id self._current_profile_id = profile_id
self.label_x = _translate("Results", "KP (m)")
self.label_y = _translate("Results", "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
@property @property
def results(self): def results(self):
return self.data return self.data
...@@ -53,57 +66,84 @@ class PlotKPC(PamhyrPlot): ...@@ -53,57 +66,84 @@ class PlotKPC(PamhyrPlot):
@timer @timer
def draw(self, highlight=None): def draw(self, highlight=None):
self.canvas.axes.cla() self.init_axes()
self.canvas.axes.grid(color='grey', linestyle='--', linewidth=0.5)
if self.results is None: if self.results is None:
return return
reach = self.results.river.reach(self._current_reach_id) reach = self.results.river.reach(self._current_reach_id)
self.canvas.axes.set_ylabel(
_translate("MainWindow_reach", "Elevation (m)"),
color='black', fontsize=11
)
self.canvas.axes.set_xlabel(
_translate("MainWindow_reach", "KP (m)"),
color='black', fontsize=11
)
self.draw_bottom(reach)
self.draw_water_elevation(reach)
self.draw_water_elevation_max(reach)
self.draw_current(reach)
# self.enable_legend()
self.idle()
self._init = True
def draw_bottom(self, reach):
kp = reach.geometry.get_kp() kp = reach.geometry.get_kp()
z_min = reach.geometry.get_z_min() z_min = reach.geometry.get_z_min()
z_max = reach.geometry.get_z_max() z_max = reach.geometry.get_z_max()
self.canvas.axes.set_xlim(
left=min(kp), right=max(kp)
)
self.line_kp_zmin = self.canvas.axes.plot( self.line_kp_zmin = self.canvas.axes.plot(
kp, z_min, kp, z_min,
color='grey', lw=1. color=self.color_plot_river_bottom,
lw=1.
) )
def draw_water_elevation(self, reach):
if len(reach.geometry.profiles) != 0: if len(reach.geometry.profiles) != 0:
kp = reach.geometry.get_kp() kp = reach.geometry.get_kp()
z_min = reach.geometry.get_z_min()
# Water elevation
water_z = list( water_z = list(
map( map(
lambda p: p.get_ts_key(self._current_timestamp, "Z"), lambda p: p.get_ts_key(
self._current_timestamp, "Z"
),
reach.profiles reach.profiles
) )
) )
self.canvas.axes.plot( self.water = self.canvas.axes.plot(
kp, water_z, lw=1., kp, water_z,
color='b', lw=1., color=self.color_plot_river_water,
) )
self.canvas.axes.fill_between( self.water_fill = self.canvas.axes.fill_between(
kp, z_min, water_z, kp, z_min, water_z,
color='skyblue', alpha=0.7, interpolate=True color=self.color_plot_river_water_zone,
alpha=0.7,
interpolate=True
)
def draw_water_elevation_max(self, reach):
if len(reach.geometry.profiles) != 0:
kp = reach.geometry.get_kp()
z_min = reach.geometry.get_z_min()
water_z = list(
map(
lambda p: max(p.get_key("Z")),
reach.profiles
)
) )
self.canvas.axes.plot(
kp, water_z, lw=1.,
color=self.color_plot_river_water,
linestyle='dotted',
)
def draw_current(self, reach):
kp = reach.geometry.get_kp()
z_min = reach.geometry.get_z_min()
z_max = reach.geometry.get_z_max()
self.profile, = self.canvas.axes.plot( self.profile, = self.canvas.axes.plot(
[ [
kp[self._current_profile_id], kp[self._current_profile_id],
...@@ -113,31 +153,57 @@ class PlotKPC(PamhyrPlot): ...@@ -113,31 +153,57 @@ class PlotKPC(PamhyrPlot):
z_max[self._current_profile_id], z_max[self._current_profile_id],
z_min[self._current_profile_id] z_min[self._current_profile_id]
], ],
color='red', lw=1. color=self.color_plot,
lw=1.
) )
self.canvas.figure.tight_layout()
self.canvas.figure.canvas.draw_idle()
if self.toolbar is not None:
self.toolbar.update()
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.update() 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_profil() self.update_current()
def set_timestamp(self, timestamp): def set_timestamp(self, timestamp):
self._current_timestamp = timestamp self._current_timestamp = timestamp
self.update() self.update()
def update(self): def update(self):
self.draw() if not self._init:
self.draw()
self.update_water_elevation()
self.update_idle()
def update_water_elevation(self):
reach = self.results.river.reach(self._current_reach_id)
kp = reach.geometry.get_kp()
z_min = reach.geometry.get_z_min()
water_z = list(
map(
lambda p: p.get_ts_key(
self._current_timestamp, "Z"
),
reach.profiles
)
)
self.water[0].set_data(
kp, water_z
)
self.water_fill.remove()
self.water_fill = self.canvas.axes.fill_between(
kp, z_min, water_z,
color=self.color_plot_river_water_zone,
alpha=0.7, interpolate=True
)
def update_profil(self): def update_current(self):
reach = self.results.river.reach(self._current_reach_id) reach = self.results.river.reach(self._current_reach_id)
kp = reach.geometry.get_kp() kp = reach.geometry.get_kp()
z_min = reach.geometry.get_z_min() z_min = reach.geometry.get_z_min()
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment