From 655982e908a2062c5597ec4445b8fd0ddb658680 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Wed, 20 Dec 2023 14:36:41 +0100 Subject: [PATCH] Geometry: Make meshing method to undo command. --- src/View/Geometry/Table.py | 12 +++++++++++ src/View/Geometry/UndoCommand.py | 34 ++++++++++++++++++++++++++++++++ src/View/Geometry/Window.py | 6 +----- 3 files changed, 47 insertions(+), 5 deletions(-) diff --git a/src/View/Geometry/Table.py b/src/View/Geometry/Table.py index 2abb2e71..9e50ffda 100644 --- a/src/View/Geometry/Table.py +++ b/src/View/Geometry/Table.py @@ -221,3 +221,15 @@ class GeometryReachTableModel(PamhyrTableModel): self.layoutAboutToBeChanged.emit() self.layoutChanged.emit() + + def meshing(self, mesher, step): + self.layoutAboutToBeChanged.emit() + + self._undo.push( + MeshingCommand( + self._data, mesher, step + ) + ) + + self.layoutAboutToBeChanged.emit() + self.layoutChanged.emit() diff --git a/src/View/Geometry/UndoCommand.py b/src/View/Geometry/UndoCommand.py index 147ce231..c62ae7dc 100644 --- a/src/View/Geometry/UndoCommand.py +++ b/src/View/Geometry/UndoCommand.py @@ -25,6 +25,8 @@ from PyQt5.QtWidgets import ( from Model.Geometry import Reach +from Meshing.Mage import MeshingWithMage + class SetDataCommand(QUndoCommand): def __init__(self, reach, index, old_value, new_value): @@ -187,3 +189,35 @@ class DuplicateCommand(QUndoCommand): def redo(self): for profile in self._profiles: self._reach.insert_profile(self._rows[0], profile) + + +class MeshingCommand(QUndoCommand): + def __init__(self, reach, mesher, step): + QUndoCommand.__init__(self) + + self._reach = reach + self._step = step + self._mesher = mesher + + self._profiles = reach.profiles.copy() + self._profiles.reverse() + + self._new_profiles = None + + def undo(self): + self._reach.purge() + + for profile in self._profiles: + self._reach.insert_profile(0, profile) + + def redo(self): + if self._new_profiles is None: + self._mesher.meshing(self._reach) + + self._new_profiles = self._reach.profiles.copy() + self._new_profiles.reverse() + else: + self._reach.purge() + + for profile in self._new_profiles: + self._reach.insert_profile(0, profile) diff --git a/src/View/Geometry/Window.py b/src/View/Geometry/Window.py index 3e206086..7b6454db 100644 --- a/src/View/Geometry/Window.py +++ b/src/View/Geometry/Window.py @@ -247,12 +247,8 @@ class GeometryWindow(PamhyrWindow): self.tableView.model().blockSignals(False) def edit_meshing(self): - self.tableView.model().blockSignals(True) - mesher = MeshingWithMage() - mesher.meshing(self._reach) - - self.tableView.model().blockSignals(False) + self._tablemodel.meshing(mesher, -1) self.update_profile_windows() self.plot_xy()