Commit 77baba08 authored by Theophile Terraz's avatar Theophile Terraz
Browse files

add XY geom view in main window

No related merge requests found
Pipeline #60017 passed with stages
in 4 minutes and 19 seconds
Showing with 157 additions and 2 deletions
+157 -2
...@@ -20,8 +20,13 @@ import logging ...@@ -20,8 +20,13 @@ import logging
from tools import timer, trace from tools import timer, trace
from View.Tools.Plot.PamhyrToolbar import PamhyrPlotToolbar
from View.Tools.Plot.PamhyrCanvas import MplCanvas
from View.PlotXY import PlotXY
from View.Tools.PamhyrWidget import PamhyrWidget from View.Tools.PamhyrWidget import PamhyrWidget
from PyQt5.QtWidgets import QVBoxLayout
logger = logging.getLogger() logger = logging.getLogger()
...@@ -38,7 +43,9 @@ class WidgetInfo(PamhyrWidget): ...@@ -38,7 +43,9 @@ class WidgetInfo(PamhyrWidget):
parent=parent parent=parent
) )
self.parent = parent
self.set_initial_values() self.set_initial_values()
self.setup_graph()
@property @property
def study(self): def study(self):
...@@ -64,6 +71,25 @@ class WidgetInfo(PamhyrWidget): ...@@ -64,6 +71,25 @@ class WidgetInfo(PamhyrWidget):
self.set_label_text("label_lc", "-") self.set_label_text("label_lc", "-")
self.set_label_text("label_hs", "-") self.set_label_text("label_hs", "-")
def setup_graph(self):
self.canvas = MplCanvas(width=5, height=4, dpi=100)
self.canvas.setObjectName("canvas")
self.plot_layout_xy = self.find(QVBoxLayout, "verticalLayout")
self._toolbar_xy = PamhyrPlotToolbar(
self.canvas, self,
items=["home", "zoom", "save", "iso", "back/forward", "move"]
)
self.plot_layout_xy.addWidget(self._toolbar_xy)
self.plot_layout_xy.addWidget(self.canvas)
self.plot = PlotXY(
canvas=self.canvas,
data=None,
trad=self.parent._trad,
toolbar=self._toolbar_xy,
parent=self
)
def update(self): def update(self):
if self._study is None: if self._study is None:
self.set_initial_values() self.set_initial_values()
...@@ -75,6 +101,15 @@ class WidgetInfo(PamhyrWidget): ...@@ -75,6 +101,15 @@ class WidgetInfo(PamhyrWidget):
self.set_network_values() self.set_network_values()
self.set_geometry_values() self.set_geometry_values()
self.plot = PlotXY(
canvas=self.canvas,
data=self._study.river.enable_edges(),
trad=self.parent._trad,
toolbar=self._toolbar_xy,
parent=self
)
self.plot.update()
def set_network_values(self): def set_network_values(self):
river = self._study.river river = self._study.river
......
# PlotXY.py -- Pamhyr
# Copyright (C) 2023-2024 INRAE
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# -*- coding: utf-8 -*-
from tools import timer, trace
from View.Tools.PamhyrPlot import PamhyrPlot
from matplotlib import collections
import numpy as np
from PyQt5.QtCore import (
QCoreApplication, Qt, QItemSelectionModel,
QItemSelection, QItemSelectionRange,
)
from PyQt5.QtWidgets import QApplication, QTableView
_translate = QCoreApplication.translate
class PlotXY(PamhyrPlot):
def __init__(self, canvas=None, trad=None, data=None, toolbar=None,
table=None, parent=None):
super(PlotXY, self).__init__(
canvas=canvas,
trad=trad,
data=data,
toolbar=toolbar,
table=table,
parent=parent
)
self._data = data
self.label_x = self._trad["x"]
self.label_y = self._trad["y"]
self.parent = parent
self._isometric_axis = True
self._auto_relim_update = True
self._autoscale_update = True
@timer
def draw(self):
self.init_axes()
if self._data is None:
self.idle()
return
if len(self._data) < 1:
self.idle()
return
self.line_lr = []
for data in self._data:
if data.reach.number_profiles != 0:
self.draw_xy(data.reach)
self.draw_lr(data.reach)
self.idle()
return
def draw_xy(self, reach):
line_xy = []
for xy in zip(reach.get_x(), reach.get_y()):
line_xy.append(np.column_stack(xy))
line_xy_collection = collections.LineCollection(
line_xy,
colors=self.color_plot_river_bottom
)
self.canvas.axes.add_collection(line_xy_collection)
def draw_lr(self, reach):
lx = []
ly = []
rx = []
ry = []
for x, y in zip(reach.get_x(),
reach.get_y()):
lx.append(x[0])
ly.append(y[0])
rx.append(x[-1])
ry.append(y[-1])
line = self.canvas.axes.plot(
lx, ly,
color=self.color_plot_river_bottom,
linestyle="dotted",
lw=1.,
)
self.line_lr.append(line)
line = self.canvas.axes.plot(
rx, ry,
color=self.color_plot_river_bottom,
linestyle="dotted",
lw=1.,
)
self.line_lr.append(line)
@timer
def update(self):
self.draw()
self.update_idle()
...@@ -73,8 +73,7 @@ class UnitTranslate(CommonWordTranslate): ...@@ -73,8 +73,7 @@ class UnitTranslate(CommonWordTranslate):
self._dict["unit_date_s"] = _translate("Unit", "Date (sec)") self._dict["unit_date_s"] = _translate("Unit", "Date (sec)")
self._dict["unit_date_iso"] = _translate("Unit", "Date (ISO format)") self._dict["unit_date_iso"] = _translate("Unit", "Date (ISO format)")
self._dict["unit_wet_area"] = _translate("Unit", "Wet Area (m²)")
self._dict["unit_wet_area"] = _translate("Unit", "Wet Area (m^2)")
self._dict["unit_wet_perimeter"] = _translate( self._dict["unit_wet_perimeter"] = _translate(
"Unit", "Wet Perimeter (m)" "Unit", "Wet Perimeter (m)"
) )
...@@ -133,3 +132,5 @@ class MainTranslate(UnitTranslate): ...@@ -133,3 +132,5 @@ class MainTranslate(UnitTranslate):
"MainWindow", "MainWindow",
"Do you want to save current study before closing it?" "Do you want to save current study before closing it?"
) )
self._dict["x"] = _translate("MainWindow", "X (m)")
self._dict["y"] = _translate("MainWindow", "Y (m)")
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