From 5790bdfe8275a35e7f607b331134968e8fec16ef Mon Sep 17 00:00:00 2001 From: Theophile Terraz Date: Tue, 7 May 2024 17:42:43 +0200 Subject: [PATCH] add purge in profile and geometry --- src/Model/Geometry/Profile.py | 5 ++ src/Model/Geometry/ProfileXYZ.py | 3 - src/View/Geometry/Profile/Table.py | 20 ++++++ src/View/Geometry/Profile/UndoCommand.py | 28 ++++++++ src/View/Geometry/Profile/Window.py | 24 +++++++ src/View/Geometry/Table.py | 9 +++ src/View/Geometry/UndoCommand.py | 20 ++++++ src/View/Geometry/Window.py | 11 +++- src/View/MainWindow.py | 6 ++ src/View/ui/GeometryCrossSection.ui | 18 +++++ src/View/ui/GeometryReach.ui | 18 +++++ src/lang/fr.ts | 83 +++++++++++++++++------- 12 files changed, 217 insertions(+), 28 deletions(-) diff --git a/src/Model/Geometry/Profile.py b/src/Model/Geometry/Profile.py index 1a36164d..6bf4979d 100644 --- a/src/Model/Geometry/Profile.py +++ b/src/Model/Geometry/Profile.py @@ -295,6 +295,11 @@ class Profile(object): ) self._status.modified() + @timer + def reverse(self): + self._points.reverse() + self._status.modified() + # Sediment Layers def get_sl(self): diff --git a/src/Model/Geometry/ProfileXYZ.py b/src/Model/Geometry/ProfileXYZ.py index 0df81d30..54653a32 100644 --- a/src/Model/Geometry/ProfileXYZ.py +++ b/src/Model/Geometry/ProfileXYZ.py @@ -544,15 +544,12 @@ class ProfileXYZ(Profile, SQLSubModel): if self.point(i).point_is_named(): area.append(9999999.999) nb_named += 1 - print(self.point(i).name.strip()) else: area.append(PointXYZ.areatriangle3d(self.point(i-1),self.point(i),self.point(i+1))) area.append(0.0) - print(area) while (self.nb_points > max(np_purge, nb_named)): to_rm = np.argmin(area[1:self.nb_points-1])+1 - print('to rm = ', to_rm) self.delete_i([to_rm]) area.pop(to_rm) for i in [to_rm-1, to_rm]: diff --git a/src/View/Geometry/Profile/Table.py b/src/View/Geometry/Profile/Table.py index c23eeb6f..21e202f8 100644 --- a/src/View/Geometry/Profile/Table.py +++ b/src/View/Geometry/Profile/Table.py @@ -250,6 +250,26 @@ class GeometryProfileTableModel(PamhyrTableModel): self.endMoveRows() self.layoutChanged.emit() + def purge(self): + + self._undo.push( + PurgeCommand( + self._data, 24 + ) + ) + + self.layoutChanged.emit() + + def reverse(self): + + self._undo.push( + ReverseCommand( + self._data + ) + ) + + self.layoutChanged.emit() + def paste(self, row, header, data): if row > self._data.number_points: return diff --git a/src/View/Geometry/Profile/UndoCommand.py b/src/View/Geometry/Profile/UndoCommand.py index 800bd4e0..a381feee 100644 --- a/src/View/Geometry/Profile/UndoCommand.py +++ b/src/View/Geometry/Profile/UndoCommand.py @@ -169,6 +169,34 @@ class MoveCommand(QUndoCommand): self._profile.move_down_point(self._i) +class ReverseCommand(QUndoCommand): + def __init__(self, profile): + QUndoCommand.__init__(self) + + self._profile = profile + + def undo(self): + self._profile.reverse() + + def redo(self): + self._profile.reverse() + + +class PurgeCommand(QUndoCommand): + def __init__(self, profile, np_purge): + QUndoCommand.__init__(self) + + self._profile = profile + self._old = self._profile.points.copy() + self._np_purge = np_purge + + def undo(self): + self._profile._points = self._old.copy() + + def redo(self): + self._profile.purge(self._np_purge) + + class PasteCommand(QUndoCommand): def __init__(self, profile, row, points): QUndoCommand.__init__(self) diff --git a/src/View/Geometry/Profile/Window.py b/src/View/Geometry/Profile/Window.py index 9a274c9f..f9cb384d 100644 --- a/src/View/Geometry/Profile/Window.py +++ b/src/View/Geometry/Profile/Window.py @@ -125,6 +125,8 @@ class ProfileWindow(PamhyrWindow): "action_down": self.move_down, "action_add": self.add, "action_delete": self.delete, + "action_purge": self.purge, + "action_reverse": self.reverse, } for action in actions: @@ -137,6 +139,12 @@ class ProfileWindow(PamhyrWindow): self.update_plot() self._propagate_update(key=Modules.GEOMETRY) + def _update(self, redraw=False, propagate=True): + if redraw: + self.update_plot() + if propagate: + self._propagate_update(key=Modules.GEOMETRY) + def update_plot(self): self._tablemodel.blockSignals(True) @@ -145,6 +153,14 @@ class ProfileWindow(PamhyrWindow): self._tablemodel.blockSignals(False) + def _propagated_update(self, key=Modules(0)): + if Modules.GEOMETRY not in key: + return + + print("=====TOTO=====") + self._tablemodel.layoutChanged.emit() + self._update(redraw=True, propagate=False) + def index_selected_row(self): table = self.find(QTableView, "tableView") rows = table.selectionModel()\ @@ -221,6 +237,14 @@ class ProfileWindow(PamhyrWindow): self.update() + def purge(self): + self._tablemodel.purge() + self.update() + + def reverse(self): + self._tablemodel.reverse() + self.update() + def _copy(self): table = self.find(QTableView, "tableView") rows = table.selectionModel().selectedRows() diff --git a/src/View/Geometry/Table.py b/src/View/Geometry/Table.py index 169771cb..26baa7fb 100644 --- a/src/View/Geometry/Table.py +++ b/src/View/Geometry/Table.py @@ -246,3 +246,12 @@ class GeometryReachTableModel(PamhyrTableModel): self.layoutAboutToBeChanged.emit() self.layoutChanged.emit() + + def purge(self): + + self._undo.push( + PurgeCommand( + self._data, 24 + ) + ) + self.layoutChanged.emit() diff --git a/src/View/Geometry/UndoCommand.py b/src/View/Geometry/UndoCommand.py index 5c587c01..addd0752 100644 --- a/src/View/Geometry/UndoCommand.py +++ b/src/View/Geometry/UndoCommand.py @@ -249,3 +249,23 @@ class MeshingCommand(QUndoCommand): for profile in self._new_profiles: self._reach.insert_profile(0, profile) + + +class PurgeCommand(QUndoCommand): + def __init__(self, reach, np_purge): + QUndoCommand.__init__(self) + + self._reach = reach + self._np_purge = np_purge + + self._old = [] + for profile in self._reach.profiles: + self._old.append(profile.points.copy()) + + def undo(self): + for i in range(self._reach.number_profiles): + self._reach.profiles[i]._points = self._old[i].copy() + + def redo(self): + for profile in self._reach._profiles: + profile.purge(self._np_purge) diff --git a/src/View/Geometry/Window.py b/src/View/Geometry/Window.py index d8bcc06b..a0efa860 100644 --- a/src/View/Geometry/Window.py +++ b/src/View/Geometry/Window.py @@ -188,6 +188,8 @@ class GeometryWindow(PamhyrWindow): "action_delete": self.delete, "action_edit": self.edit_profile, "action_meshing": self.edit_meshing, + "action_update_kp": self.update_kp, + "action_purge": self.purge, } for action in actions: @@ -227,7 +229,7 @@ class GeometryWindow(PamhyrWindow): self._propagate_update(key=Modules.GEOMETRY) def _propagated_update(self, key=Modules(0)): - if Modules.NETWORK not in key: + if Modules.NETWORK not in key and Modules.GEOMETRY not in key: return self._update(propagate=False) @@ -505,6 +507,13 @@ class GeometryWindow(PamhyrWindow): self._table.move_down(row) self.select_current_profile() + def update_kp(self): + pass + + def purge(self): + self._table.purge() + self.update_redraw() + def duplicate(self): rows = [ row.row() for row in diff --git a/src/View/MainWindow.py b/src/View/MainWindow.py index f4d8bad7..ca6371a5 100644 --- a/src/View/MainWindow.py +++ b/src/View/MainWindow.py @@ -445,9 +445,15 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): logger.debug(f"Propagation of {keys}") for _, window in self.sub_win_list: window._propagated_update(key=keys) + self._do_propagate_update_rec(window, keys) self._tab_widget_checker.update(modules=keys) + def _do_propagate_update_rec(self, window, keys): + for _, win in window.sub_win_list: + win._propagated_update(key=keys) + self._do_propagate_update_rec(win, keys) + def update(self): self.set_title() diff --git a/src/View/ui/GeometryCrossSection.ui b/src/View/ui/GeometryCrossSection.ui index 6e6d62a5..f7c9158e 100644 --- a/src/View/ui/GeometryCrossSection.ui +++ b/src/View/ui/GeometryCrossSection.ui @@ -58,6 +58,8 @@ + + @@ -131,6 +133,22 @@ Sort reversed points by nearest neighbor + + + Purge + + + Purge the cross-section to keep a given number of points + + + + + Reverse + + + Reverse the points order + + diff --git a/src/View/ui/GeometryReach.ui b/src/View/ui/GeometryReach.ui index 95e25be1..22e54043 100644 --- a/src/View/ui/GeometryReach.ui +++ b/src/View/ui/GeometryReach.ui @@ -127,6 +127,8 @@ + + @@ -233,6 +235,22 @@ Meshing + + + Update KP + + + Recompute KP + + + + + Purge + + + Purge cross-sections to keep a given number of points + + diff --git a/src/lang/fr.ts b/src/lang/fr.ts index fb23ef40..4b3a4a4d 100644 --- a/src/lang/fr.ts +++ b/src/lang/fr.ts @@ -1482,12 +1482,12 @@ Éditer la géométrie - + Import geometry Importer une géométrie - + Export geometry Exporter la géométrie @@ -1852,7 +1852,7 @@ Exporter les données brutes - + delete supprimer @@ -1947,57 +1947,57 @@ resultats - + add Ajouter - + Add a point on cross-section Ajouter un point à la section en travers - + Delete selected point(s) Supprimer le(s) point(s) sélectionné(s) - + up Monter - + Move up selected point(s) Déplacer le point sélectionné vers le haut - + down Descendre - + Mode down selected point(s) Déplacer le point sélectionné vers le bas - + sort_asc sort_asc - + Sort points by nearest neighbor Trier les points par leurs plus proches voisins - + sort_des sort_des - + Sort reversed points by nearest neighbor Trie inverser les points par leurs plus proche voisins @@ -2112,52 +2112,52 @@ Éditer les couches sédimentaires - + Import Importer - + Add a cross-section Ajouter une section en travers - + Delete selected cross-section(s) Supprimer la(es) section(s) en travers sélectionnée(s) - + edit éditer - + Edit selected cross section(s) Éditer la(es) section(s) en travers sélectionnée(s) - + Sort cross-sections by ascending KP Trier les sections en travers par PK croissant - + Sort cross-sections by descending KP Trier les sections en travers par PK décroissant - + Move up selected cross-section(s) Déplacer la(s) section(s) en travers vers le haut - + Move down selected cross-section(s) Déplacer la(es) section(s) en travers vers le bas - + Meshing Maillage @@ -2261,6 +2261,41 @@ Edit the study information Éditer les information de l'étude + + + Update KP + + + + + Recompute KP + + + + + Purge + + + + + Purge cross-sections to keep a given number of points + + + + + Purge the cross-section to keep a given number of points + + + + + Reverse + + + + + Reverse the points order + + MainWindowProfile