Compare commits

..

5 Commits

5 changed files with 101 additions and 47 deletions

View File

@ -386,26 +386,26 @@ class Mage(CommandLineSolver):
return files return files
def _export_LC(self, study, lateral, f, qlog, name="0"): def _export_LC(self, study, lateral, f, qlog, name="0"):
if lateral.edge is None: if lateral.reach is None:
return return
if lateral.is_deleted(): if lateral.is_deleted():
return return
edges = study.river.enable_edges() edges = study.river.enable_edges()
if lateral.edge not in edges: if lateral.reach not in edges:
return return
eid, _ = next( eid, _ = next(
filter( filter(
lambda e: e[1] == lateral.edge, lambda e: e[1] == lateral.reach,
enumerate(edges) enumerate(edges)
) )
) )
name = f"{eid+1:>3}" name = f"{eid+1:>3}"
# name = f"Reach_{lateral.edge.id + 1:>3}".replace(" ", "0") # name = f"Reach_{lateral.reach.id + 1:>3}".replace(" ", "0")
f.write(f"* {lateral.edge.name} ({name}) {lateral.lctype}\n") f.write(f"* {lateral.reach.name} ({name}) {lateral.lctype}\n")
f.write( f.write(
f"${name} " + f"${name} " +
f"{lateral.begin_rk:>10.4f} {lateral.end_rk:>10.4f}\n" f"{lateral.begin_rk:>10.4f} {lateral.end_rk:>10.4f}\n"

View File

@ -21,7 +21,7 @@ import logging
from functools import reduce from functools import reduce
from datetime import datetime from datetime import datetime
from tools import timer, trace from tools import timer, trace, logger_exception
from View.Tools.PamhyrPlot import PamhyrPlot from View.Tools.PamhyrPlot import PamhyrPlot
from PyQt5.QtCore import ( from PyQt5.QtCore import (
@ -68,6 +68,7 @@ class PlotH(PamhyrPlot):
self._line_max = [] self._line_max = []
self._line = [] self._line = []
self._add_data_lines = []
@property @property
def results(self): def results(self):
@ -117,15 +118,17 @@ class PlotH(PamhyrPlot):
self.set_ticks_time_formater() self.set_ticks_time_formater()
self.draw_additional_data(0)
self.enable_legend() self.enable_legend()
self.canvas.draw_idle() self.canvas.draw_idle()
self.update_idle self.update_idle()
self.draw_current() self.draw_current()
self._init = True self._init = True
def draw_data(self, res_id): def draw_data(self, res_id):
results = self.results[res_id] results = self.results[res_id]
reach = results.river.reach(self._current_reach_id) reach = results.river.reach(self._current_reach_id)
for i, p in enumerate(self._current_profile_id): for i, p in enumerate(self._current_profile_id):
@ -152,6 +155,28 @@ class PlotH(PamhyrPlot):
) )
self._line.append(line) self._line.append(line)
def draw_additional_data(self, res_id):
results = self.results[res_id]
self._add_data_lines = []
for data in results.get("additional_data"):
data = data._data
x, y = data['x'], data['y']
legend = data['legend']
unit = data['unit']
if data['type_x'] == 'time' and data['type_y'] == 'discharge':
line, = self.canvas.axes.plot(
x, y, marker="+",
label=legend + ' ' + unit
)
self._add_data_lines.append(line)
self.enable_legend()
self.canvas.draw_idle()
def draw_current(self): def draw_current(self):
self._current, = self.canvas.axes.plot( self._current, = self.canvas.axes.plot(
[self._current_timestamp, self._current_timestamp], [self._current_timestamp, self._current_timestamp],
@ -220,6 +245,10 @@ class PlotH(PamhyrPlot):
self.update_current() self.update_current()
self.update_idle() self.update_idle()
def update_additional_data(self):
self.draw_additional_data(0)
self.update_idle()
def update_all(self): def update_all(self):
self._current_reach_id = self._parent._get_current_reach() self._current_reach_id = self._parent._get_current_reach()
self._current_profile_id = self._parent._get_current_profiles_list() self._current_profile_id = self._parent._get_current_profiles_list()

View File

@ -210,6 +210,29 @@ class PlotRKC(PamhyrPlot):
linestyle='dotted', linestyle='dotted',
) )
def draw_additional_data(self, res_id):
results = self.results[res_id]
self._add_data_lines = []
for data in results.get("additional_data"):
data = data._data
tx, ty = data['type_x'], data['type_y']
x, y = data['x'], data['y']
legend = data['legend']
unit = data['unit']
if tx == 'water_elevation' and ty == 'time':
line, = self.canvas.axes.plot(
x, y, marker="+",
label=legend + ' ' + unit
)
self._add_data_lines.append(line)
self.canvas.draw_idle()
def draw_current(self, reach): def draw_current(self, reach):
rk = reach.geometry.get_rk() rk = reach.geometry.get_rk()
z_min = reach.geometry.get_z_min() z_min = reach.geometry.get_z_min()
@ -332,6 +355,10 @@ class PlotRKC(PamhyrPlot):
alpha=0.7, interpolate=True alpha=0.7, interpolate=True
) )
def update_additional_data(self):
self.draw_additional_data(0)
self.update_idle()
def update_current(self): def update_current(self):
results = self.results[self._current_res_id] results = self.results[self._current_res_id]
reach = results.river.reach(self._current_reach_id) reach = results.river.reach(self._current_reach_id)

View File

@ -68,6 +68,9 @@ class PlotXY(PamhyrPlot):
self._plot_img = {} self._plot_img = {}
self._geotiff_img = []
self._geotiff_bounds = []
self._parent = parent self._parent = parent
self._timestamps = parent._timestamps self._timestamps = parent._timestamps
self._current_timestamp = max(self._timestamps) self._current_timestamp = max(self._timestamps)
@ -203,7 +206,6 @@ class PlotXY(PamhyrPlot):
self.canvas.axes.add_collection(self.line_xy_collection) self.canvas.axes.add_collection(self.line_xy_collection)
def draw_other_profiles(self, reaches): def draw_other_profiles(self, reaches):
for reach in reaches: for reach in reaches:
for xy in zip(reach.geometry.get_x(), for xy in zip(reach.geometry.get_x(),
reach.geometry.get_y()): reach.geometry.get_y()):
@ -325,6 +327,24 @@ class PlotXY(PamhyrPlot):
alpha=0.7 alpha=0.7
) )
def add_geotiff(self, img, bounds):
self._geotiff_img.append(img)
self._geotiff_bounds.append(bounds)
def draw_add_geotiff(self):
xlim = self.canvas.axes.get_xlim()
ylim = self.canvas.axes.get_ylim()
for i, img in enumerate(self._geotiff_img):
bounds = self._geotiff_bounds[i]
self.canvas.axes.imshow(img.transpose((1, 2, 0)),
extent=bounds)
self.idle()
self.canvas.axes.set_xlim(xlim)
self.canvas.axes.set_ylim(ylim)
def draw_geotiff(self): def draw_geotiff(self):
if not _rasterio_loaded: if not _rasterio_loaded:
return return
@ -361,6 +381,7 @@ class PlotXY(PamhyrPlot):
if not geotiff.is_enabled(): if not geotiff.is_enabled():
self._plot_img[geotiff].set(alpha=0.5) self._plot_img[geotiff].set(alpha=0.5)
self.draw_add_geotiff()
self.idle() self.idle()
def set_reach(self, reach_id): def set_reach(self, reach_id):

View File

@ -1284,24 +1284,22 @@ class ResultsWindow(PamhyrWindow):
# b[1] bottom # b[1] bottom
# b[2] right # b[2] right
# b[3] top # b[3] top
xlim = self.canvas.axes.get_xlim() bounds = [b[0], b[2], b[1], b[3]]
ylim = self.canvas.axes.get_ylim()
if b[2] > b[0] and b[1] < b[3]: if not (b[2] > b[0] and b[1] < b[3]):
self.canvas.axes.imshow(img.transpose((1, 2, 0)), xlim = self.canvas.axes.get_xlim()
extent=[b[0], b[2], b[1], b[3]]) ylim = self.canvas.axes.get_ylim()
else:
dlg = CoordinatesDialog( dlg = CoordinatesDialog(
xlim, ylim, xlim, ylim,
trad=self._trad, trad=self._trad,
parent=self parent=self
) )
if dlg.exec(): if dlg.exec():
self.canvas.axes.imshow(img.transpose((1, 2, 0)), bounds = dlg.values
extent=dlg.values)
self.plot_xy.idle() self.plot_xy.add_geotiff(img, bounds)
self.canvas.axes.set_xlim(xlim) self.plot_xy.draw_add_geotiff()
self.canvas.axes.set_ylim(ylim)
return
def import_data(self): def import_data(self):
file_types = [ file_types = [
@ -1323,6 +1321,8 @@ class ResultsWindow(PamhyrWindow):
x, y = self.read_csv_file_data(filename) x, y = self.read_csv_file_data(filename)
data = self.read_csv_file_format(x, y) data = self.read_csv_file_format(x, y)
if data is None:
return
results = self._results[self._current_results[0]] results = self._results[self._current_results[0]]
data_lst = results.get("additional_data") data_lst = results.get("additional_data")
@ -1396,32 +1396,9 @@ class ResultsWindow(PamhyrWindow):
def update_plot_additional_data(self): def update_plot_additional_data(self):
results = self._results[self._current_results[0]] results = self._results[self._current_results[0]]
self.plot_rkc.update_additional_data()
self.plot_h.update_additional_data()
for data in results.get("additional_data"): for data in results.get("additional_data"):
data = data._data
x, y = data['x'], data['y']
legend = data['legend']
unit = data['unit']
if (
data['type_x'] == 'water_elevation' and
data['type_y'] == 'time'
):
line = self.canvas_2.axes.plot(
x, y, marker="+",
label=legend + ' ' + unit
)
self.plot_rkc.canvas.draw_idle()
self.plot_rkc.update_idle()
if data['type_x'] == 'time' and data['type_y'] == 'discharge':
line = self.canvas_4.axes.plot(
x, y, marker="+",
label=legend + ' ' + unit
)
self.plot_h._line.append(line)
self.plot_h.enable_legend()
self.plot_h.canvas.draw_idle()
self.plot_h.update_idle()
for p in self._additional_plot: for p in self._additional_plot:
self._additional_plot[p].add_imported_plot(data) self._additional_plot[p].add_imported_plot(data)