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 @@
# -*- coding: utf-8 -*-
import logging
from tools import timer
from View.Tools.PamhyrPlot import PamhyrPlot
......@@ -23,6 +25,8 @@ from PyQt5.QtCore import (
QCoreApplication
)
logger = logging.getLogger()
_translate = QCoreApplication.translate
......@@ -42,6 +46,15 @@ class PlotKPC(PamhyrPlot):
self._current_reach_id = reach_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
def results(self):
return self.data
......@@ -53,57 +66,84 @@ class PlotKPC(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
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()
z_min = reach.geometry.get_z_min()
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(
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:
kp = reach.geometry.get_kp()
z_min = reach.geometry.get_z_min()
# Water elevation
water_z = list(
map(
lambda p: p.get_ts_key(self._current_timestamp, "Z"),
lambda p: p.get_ts_key(
self._current_timestamp, "Z"
),
reach.profiles
)
)
self.canvas.axes.plot(
kp, water_z, lw=1.,
color='b',
self.water = self.canvas.axes.plot(
kp, water_z,
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,
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(
[
kp[self._current_profile_id],
......@@ -113,31 +153,57 @@ class PlotKPC(PamhyrPlot):
z_max[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):
self._current_reach_id = reach_id
self._current_profile_id = 0
self.update()
self.draw()
def set_profile(self, profile_id):
self._current_profile_id = profile_id
self.update_profil()
self.update_current()
def set_timestamp(self, timestamp):
self._current_timestamp = timestamp
self.update()
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)
kp = reach.geometry.get_kp()
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