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