From 318f6a466836d38d4a733276569f42267219e836 Mon Sep 17 00:00:00 2001 From: Dylan Jeannin Date: Fri, 11 Sep 2026 14:10:55 +0200 Subject: [PATCH] Geometry: undo/redo restores interpolated data in the model --- src/View/Geometry/Profile/UndoCommand.py | 29 ++++++++++++++++++++++++ src/View/Geometry/UndoCommand.py | 6 +++++ 2 files changed, 35 insertions(+) diff --git a/src/View/Geometry/Profile/UndoCommand.py b/src/View/Geometry/Profile/UndoCommand.py index 92cdaef0..6dc75cc3 100644 --- a/src/View/Geometry/Profile/UndoCommand.py +++ b/src/View/Geometry/Profile/UndoCommand.py @@ -37,6 +37,7 @@ class SetDataCommand(QUndoCommand): self._index = index self._old = old_value self._new = self.type(new_value) + self._old_interpolated = self._profile.interpolated class SetXCommand(SetDataCommand): @@ -46,6 +47,7 @@ class SetXCommand(SetDataCommand): def undo(self): self._profile.point(self._index).x = self._old + self._profile.interpolated = self._old_interpolated self._profile.modified() def redo(self): @@ -60,6 +62,7 @@ class SetYCommand(SetDataCommand): def undo(self): self._profile.point(self._index).y = self._old + self._profile.interpolated = self._old_interpolated self._profile.modified() def redo(self): @@ -74,6 +77,7 @@ class SetZCommand(SetDataCommand): def undo(self): self._profile.point(self._index).z = self._old + self._profile.interpolated = self._old_interpolated self._profile.modified() def redo(self): @@ -89,9 +93,12 @@ class SetNameCommand(SetDataCommand): def undo(self): self._profile.point(self._index).name = self._old + self._profile.interpolated = self._old_interpolated + self._profile.modified() def redo(self): self._profile.point(self._index).name = self._new + self._profile.modified() class AddCommand(QUndoCommand): @@ -101,9 +108,11 @@ class AddCommand(QUndoCommand): self._profile = profile self._index = index self._point = None + self._old_interpolated = self._profile.interpolated def undo(self): self._profile.delete_i([self._index]) + self._profile.interpolated = self._old_interpolated self._profile.modified() def redo(self): @@ -111,6 +120,7 @@ class AddCommand(QUndoCommand): self._point = self._profile.insert(self._index) else: self._profile.insert_point(self._index, self._point) + self._profile.interpolated = False self._profile.modified() @@ -121,14 +131,17 @@ class DelCommand(QUndoCommand): self._profile = profile self._points = points + self._old_interpolated = self._profile.interpolated def undo(self): for point in self._points: point.set_as_not_deleted() + self._profile.interpolated = self._old_interpolated self._profile.modified() def redo(self): self._profile.delete_points(self._points) + self._profile.interpolated = False self._profile.modified() @@ -139,6 +152,7 @@ class SortCommand(QUndoCommand): self._profile = profile self._column = column self._reverse = _reverse + self._old_interpolated = self._profile.interpolated old = self._profile._points self._profile.sort(self._column, self._reverse) @@ -153,10 +167,12 @@ class SortCommand(QUndoCommand): def undo(self): self._profile.sort_with_indexes(self._indexes) + self._profile.interpolated = self._old_interpolated self._profile.modified() def redo(self): self._profile.sort(self._column, self._reverse) + self._profile.interpolated = False self._profile.modified() @@ -168,11 +184,14 @@ class MoveCommand(QUndoCommand): self._up = up == "up" self._i = i + self._old_interpolated = self._profile.interpolated + def undo(self): if self._up: self._profile.move_up_point(self._i) else: self._profile.move_down_point(self._i) + self._profile.interpolated = self._old_interpolated self._profile.modified() def redo(self): @@ -180,6 +199,7 @@ class MoveCommand(QUndoCommand): self._profile.move_up_point(self._i) else: self._profile.move_down_point(self._i) + self._profile.interpolated = False self._profile.modified() @@ -188,13 +208,16 @@ class ReverseCommand(QUndoCommand): QUndoCommand.__init__(self) self._profile = profile + self._old_interpolated = self._profile.interpolated def undo(self): self._profile.reverse() + self._profile.interpolated = self._old_interpolated self._profile.modified() def redo(self): self._profile.reverse() + self._profile.interpolated = False self._profile.modified() @@ -205,14 +228,17 @@ class PurgeCommand(QUndoCommand): self._deleted = [] self._profile = profile self._np_purge = np_purge + self._old_interpolated = self._profile.interpolated def undo(self): for point in self._deleted: point.set_as_not_deleted() + self._profile.interpolated = self._old_interpolated self._profile.modified() def redo(self): self._deleted = self._profile.purge(self._np_purge) + self._profile.interpolated = False self._profile.modified() @@ -223,14 +249,17 @@ class PasteCommand(QUndoCommand): self._profile = profile self._row = row self._points = points + self._old_interpolated = self._profile.interpolated self._points.reverse() def undo(self): self._profile.delete_points(self._points) + self._profile.interpolated = self._old_interpolated self._profile.modified() def redo(self): for point in self._points: self._profile.insert_point(self._row, point) + self._profile.interpolated = False self._profile.modified() diff --git a/src/View/Geometry/UndoCommand.py b/src/View/Geometry/UndoCommand.py index f14bfef8..145ac0d2 100644 --- a/src/View/Geometry/UndoCommand.py +++ b/src/View/Geometry/UndoCommand.py @@ -48,11 +48,14 @@ class SetNameCommand(SetDataCommand): self.type = str super(SetNameCommand, self).__init__( reach, index, old_value, new_value) + self._old_interpolated = self._reach.profile(self._index).interpolated def undo(self): self._reach.profile(self._index).name = self._old + self._reach.profile(self._index).interpolated = self._old_interpolated def redo(self): + # Name setter will automatically update the interpolated attribute self._reach.profile(self._index).name = self._new @@ -60,11 +63,14 @@ class SetRKCommand(SetDataCommand): def __init__(self, reach, index, old_value, new_value): self.type = float super(SetRKCommand, self).__init__(reach, index, old_value, new_value) + self._old_interpolated = self._reach.profile(self._index).interpolated def undo(self): self._reach.profile(self._index).rk = self._old + self._reach.profile(self._index).interpolated = self._old_interpolated def redo(self): + # RK setter will automatically update the interpolated attribute self._reach.profile(self._index).rk = self._new