Pamhyr2/src/View/SedimentLayers/Edit/Plot.py

105 lines
2.5 KiB
Python

# -*- coding: utf-8 -*-
import logging
from functools import reduce
from tools import timer
from View.Plot.APlot import APlot
from PyQt5.QtCore import (
QCoreApplication
)
_translate = QCoreApplication.translate
logger = logging.getLogger()
class Plot(APlot):
def __init__(self, canvas=None, data=None, toolbar=None,
display_current=True):
super(Plot, self).__init__(
canvas=canvas,
data=data,
toolbar=toolbar
)
self._display_current = display_current
self.line_kp_zmin = None
self.line_kp_sl = []
@timer
def draw(self):
self.canvas.axes.cla()
self.canvas.axes.grid(color='grey', linestyle='--', linewidth=0.5)
if self.data is None:
return
self.canvas.axes.set_xlabel(
_translate("MainWindow_reach", "X (m)"),
color='green', fontsize=12
)
self.canvas.axes.set_ylabel(
_translate("MainWindow_reach", "Height (m)"),
color='green', fontsize=12
)
x = [0,1]
z = [0,0]
sl = self.data.height()
names = ["fond"] + self.data.names()
self.canvas.axes.set_xlim(
left = min(x), right = max(x)
)
lsl = []
for i in range(len(sl)):
cur = []
for _ in x:
cur.append(sl[i])
lsl.append(cur)
# Compute sediment layer in function to point z
z_sl = reduce(
lambda acc, v: acc + [
list(
map(lambda x, y: y - x, v, acc[-1])
)
],
lsl,
[z]
)
for i, zsl in enumerate(z_sl):
self.line_kp_sl.append(None)
self.line_kp_sl[i], = self.canvas.axes.plot(
x, zsl,
label=names[i],
linestyle="solid" if i == 0 else "--",
lw=1.8,
color='grey' if i == 0 else None
)
self.canvas.axes.text(x[0] + 0.01, zsl[0] + 0.01, f'{names[i]}')
self.canvas.figure.tight_layout()
self.canvas.figure.canvas.draw_idle()
if self.toolbar is not None:
self.toolbar.update()
self._init = True
@timer
def update(self, ind=None):
if self._init == False:
self.draw()
return
if ind is None:
logger.info("TODO: Update")
self.canvas.axes.autoscale_view(True, True, True)
self.canvas.figure.canvas.draw_idle()