From 2f0b5b2e31a368da2292e74af51b96eea8bdbed7 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Wed, 3 May 2023 17:14:12 +0200 Subject: [PATCH] BC: Edit: Add plot (not finish). --- .../BoundaryConditionWindow.py | 2 + src/View/BoundaryCondition/Edit/Plot.py | 67 +++++++++++++++++++ src/View/BoundaryCondition/Edit/Table.py | 19 ++---- .../BoundaryCondition/Edit/UndoCommand.py | 2 +- src/View/BoundaryCondition/Edit/Window.py | 16 +++++ src/View/BoundaryCondition/Edit/translate.py | 11 +++ src/View/ui/BoundaryConditions.ui | 48 +++++++++---- 7 files changed, 140 insertions(+), 25 deletions(-) create mode 100644 src/View/BoundaryCondition/Edit/Plot.py create mode 100644 src/View/BoundaryCondition/Edit/translate.py diff --git a/src/View/BoundaryCondition/BoundaryConditionWindow.py b/src/View/BoundaryCondition/BoundaryConditionWindow.py index 07fdeb6f..0688b700 100644 --- a/src/View/BoundaryCondition/BoundaryConditionWindow.py +++ b/src/View/BoundaryCondition/BoundaryConditionWindow.py @@ -27,10 +27,12 @@ from View.BoundaryCondition.BCUndoCommand import ( AddCommand, DelCommand, SortCommand, MoveCommand, PasteCommand, DuplicateCommand, ) + from Model.BoundaryCondition.BoundaryConditionTypes import ( NotDefined, PonctualContribution, TimeOverZ, TimeOverDebit, ZOverDebit ) + from View.BoundaryCondition.translate import long_types from View.BoundaryCondition.Edit.Window import EditBoundaryConditionWindow diff --git a/src/View/BoundaryCondition/Edit/Plot.py b/src/View/BoundaryCondition/Edit/Plot.py new file mode 100644 index 00000000..be3ad854 --- /dev/null +++ b/src/View/BoundaryCondition/Edit/Plot.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- + +from tools import timer, trace +from View.Plot.APlot import APlot + +from PyQt5.QtCore import ( + QCoreApplication +) + +from View.BoundaryCondition.Edit.translate import * + +_translate = QCoreApplication.translate + +class Plot(APlot): + def __init__(self, canvas=None, data=None, toolbar=None): + super(Plot, self).__init__( + canvas=canvas, + data=data, + toolbar=toolbar + ) + + @timer + def draw(self): + self.canvas.axes.cla() + self.canvas.axes.grid(color='grey', linestyle='--', linewidth=0.5) + + if len(self.data) == 0: + self._init = False + return + + # Plot data + x = list(map(lambda v: v[0], self.data.data)) + y = list(map(lambda v: v[1], self.data.data)) + self._line, = self.canvas.axes.plot( + x, y, + color='r', lw=1., + markersize=5, marker='+', + picker=30 + ) + + # Plot label + header = self.data.header + self.canvas.axes.set_xlabel( + table_headers[header[0]], color='black', fontsize=10 + ) + self.canvas.axes.set_ylabel( + table_headers[header[1]], color='black', fontsize=10 + ) + + self.canvas.figure.tight_layout() + self.canvas.figure.canvas.draw_idle() + self.toolbar.update() + + self._init = True + + @timer + def update(self, ind=None): + if self._init == False: + self.draw() + return + + # if ind is not None: + + # else: + + self.canvas.figure.tight_layout() + self.canvas.figure.canvas.draw_idle() diff --git a/src/View/BoundaryCondition/Edit/Table.py b/src/View/BoundaryCondition/Edit/Table.py index 9235bee8..1e9033d0 100644 --- a/src/View/BoundaryCondition/Edit/Table.py +++ b/src/View/BoundaryCondition/Edit/Table.py @@ -15,24 +15,19 @@ from PyQt5.QtWidgets import ( QTableView, QAbstractItemView, ) -from View.BoundaryCondition.Edit.UndoCommand import ( - SetDataCommand, AddCommand, DelCommand, - SortCommand, MoveCommand, PasteCommand, - DuplicateCommand, -) - from Model.BoundaryCondition.BoundaryConditionTypes import ( NotDefined, PonctualContribution, TimeOverZ, TimeOverDebit, ZOverDebit ) -_translate = QCoreApplication.translate +from View.BoundaryCondition.Edit.UndoCommand import ( + SetDataCommand, AddCommand, DelCommand, + SortCommand, MoveCommand, PasteCommand, + DuplicateCommand, +) +from View.BoundaryCondition.Edit.translate import * -table_headers = { - "time": _translate("BoundaryCondition", "Time"), - "debit": _translate("BoundaryCondition", "Debit"), - "z": _translate("BoundaryCondition", "Z (m)") -} +_translate = QCoreApplication.translate class TableModel(QAbstractTableModel): diff --git a/src/View/BoundaryCondition/Edit/UndoCommand.py b/src/View/BoundaryCondition/Edit/UndoCommand.py index 7f3bbef5..c20288ff 100644 --- a/src/View/BoundaryCondition/Edit/UndoCommand.py +++ b/src/View/BoundaryCondition/Edit/UndoCommand.py @@ -79,7 +79,7 @@ class SortCommand(QUndoCommand): def redo(self): self._data.sort( - reverse=self._reverse, + _reverse=self._reverse, key=lambda x: x.name ) if self._indexes is None: diff --git a/src/View/BoundaryCondition/Edit/Window.py b/src/View/BoundaryCondition/Edit/Window.py index 7de37c5e..5823a2ce 100644 --- a/src/View/BoundaryCondition/Edit/Window.py +++ b/src/View/BoundaryCondition/Edit/Window.py @@ -17,8 +17,11 @@ from PyQt5.QtWidgets import ( QUndoStack, QShortcut, QAction, QItemDelegate, ) +from View.Plot.MplCanvas import MplCanvas + from View.BoundaryCondition.translate import long_types from View.BoundaryCondition.Edit.Table import TableModel +from View.BoundaryCondition.Edit.Plot import Plot _translate = QCoreApplication.translate @@ -34,6 +37,7 @@ class EditBoundaryConditionWindow(ASubMainWindow, ListedSubWindow): self.setup_window() self.setup_sc() self.setup_table() + self.setup_plot() self.setup_connections() def setup_window(self): @@ -67,6 +71,18 @@ class EditBoundaryConditionWindow(ASubMainWindow, ListedSubWindow): table.setSelectionBehavior(QAbstractItemView.SelectRows) table.setAlternatingRowColors(True) + def setup_plot(self): + self.canvas = MplCanvas(width=5, height=4, dpi=100) + self.canvas.setObjectName("canvas") + self.verticalLayout.addWidget(self.canvas) + + self.plot = Plot( + canvas = self.canvas, + data = self._data, + ) + self.plot.draw() + + def setup_connections(self): self.find(QAction, "action_add").triggered.connect(self.add) self.find(QAction, "action_del").triggered.connect(self.delete) diff --git a/src/View/BoundaryCondition/Edit/translate.py b/src/View/BoundaryCondition/Edit/translate.py new file mode 100644 index 00000000..e3fa7513 --- /dev/null +++ b/src/View/BoundaryCondition/Edit/translate.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- + +from PyQt5.QtCore import QCoreApplication + +_translate = QCoreApplication.translate + +table_headers = { + "time": _translate("BoundaryCondition", "Time"), + "debit": _translate("BoundaryCondition", "Debit"), + "z": _translate("BoundaryCondition", "Z (m)") +} diff --git a/src/View/ui/BoundaryConditions.ui b/src/View/ui/BoundaryConditions.ui index 8a0f8f96..5d68ac0a 100644 --- a/src/View/ui/BoundaryConditions.ui +++ b/src/View/ui/BoundaryConditions.ui @@ -25,19 +25,43 @@ - - - - 0 - 0 - + + + 0 - - Qt::Horizontal - - - - + + + Liquid + + + + + + + 0 + 0 + + + + Qt::Horizontal + + + + + + + + + + + + Solid + + + + + Suspension +