From 0753c4e1b7c351e0eba3aa9ed3c479691e8ea2fb Mon Sep 17 00:00:00 2001
From: Theophile Terraz <theophile.terraz@inrae.fr>
Date: Wed, 22 Jan 2025 11:15:07 +0100
Subject: [PATCH] debug profile geometry window

---
 src/View/Geometry/Profile/Plot.py | 120 +++++++++++++++---------------
 1 file changed, 60 insertions(+), 60 deletions(-)

diff --git a/src/View/Geometry/Profile/Plot.py b/src/View/Geometry/Profile/Plot.py
index 6e45f80d..b4ec78e1 100644
--- a/src/View/Geometry/Profile/Plot.py
+++ b/src/View/Geometry/Profile/Plot.py
@@ -66,11 +66,10 @@ class Plot(PamhyrPlot):
         self._isometric_axis = False
 
         self.hl_points = []
-        self.highlight = (
-            [],                 # Points list to highlight
-            None                # Hydrolic values (z, wet_area,
+        self.highlight = None   # Hydrolic values (z, wet_area,
                                 # wet_preimeter, water_width)
-        )
+        self._colors = []
+
         self._onpickevent = None
         self._rect_select = RectangleSelector(
             ax=self.canvas.axes,
@@ -87,36 +86,25 @@ class Plot(PamhyrPlot):
         # we need to do that to prevent conflicst
         # between onpick and rect_select_callback
         modifiers = QApplication.keyboardModifiers()
-        points, hyd = self.highlight
         if self._onpickevent is not None:
             ind, point = self._closest_point(self._onpickevent)
             if modifiers == Qt.ControlModifier:
                 rows = self._parent.index_selected_rows()
                 if ind in rows:
                     rows.remove(ind)
-                    del (points[ind])
-                    self.highlight = (points, hyd)
                     self._select_in_table(rows)
                 else:
-                    self.highlight = (points+[point], hyd)
                     self._select_in_table(rows+[ind])
             elif modifiers == Qt.ShiftModifier:
                 rows = self._parent.index_selected_rows()
                 if len(rows) > 0:
                     i1 = min(rows[0], rows[-1], ind)
                     i2 = max(rows[0], rows[-1], ind)
-                    p = [
-                            [self.data.points[i].x, self.data.points[i].y]
-                            for i in range(i1, i2)
-                        ]
                 else:
                     i1 = ind
                     i2 = ind
-                    p = [point]
-                self.highlight = (p, hyd)
                 self._select_range_in_table(i1, i2)
             else:
-                self.highlight = ([point], hyd)
                 self._select_in_table([ind])
 
         self._onpickevent = None
@@ -142,40 +130,40 @@ class Plot(PamhyrPlot):
         if event.button.value == 1:
             return
 
-        points, _ = self.highlight
-
         z = self._get_z_from_click(event)
         if z < self.data.z_min() or event.button.value == 2:
-            self.highlight = (points, None)
-            self.update()
+            self.highlight = None
+            #self.update()
+            self.draw_highligth()
+            self.update_idle()
             return
 
         a, p, w = self._compute_hydraulics(z)
 
         logger.debug(f"{z, a, p, w}")
 
-        self.highlight = (points, (z, a, p, w))
+        self.highlight = (z, a, p, w)
 
-        self.update()
+        #self.update()
+        self.draw_highligth()
+        self.update_idle()
         return
 
     def select_points_from_indices(self, indices):
-        data = self.data
-        _, hyd = self.highlight
-
-        points = list(
-            map(
-                lambda e: e[1],
-                filter(
-                    lambda e: e[0] in indices,
-                    enumerate(
-                        zip(data.get_station(), data.z())
-                    )
-                )
-            )
-        )
-
-        self.highlight = (points, hyd)
+        #data = self.data
+        #_, hyd = self.highlight
+
+        #points = list(
+            #map(
+                #lambda e: e[1],
+                #filter(
+                    #lambda e: e[0] in indices,
+                    #enumerate(
+                        #zip(data.get_station(), data.z())
+                    #)
+                #)
+            #)
+        #)
         self.update()
 
     def _select_in_table(self, ind):
@@ -250,7 +238,7 @@ class Plot(PamhyrPlot):
 
     def rect_select_callback(self, eclick, erelease):
 
-        points, hyd = self.highlight
+        hyd = self.highlight
         x1, y1 = eclick.xdata, eclick.ydata
         x2, y2 = erelease.xdata, erelease.ydata
 
@@ -268,14 +256,13 @@ class Plot(PamhyrPlot):
             if all(i in rows for i in inds):
                 for ind in sorted(inds, reverse=True):
                     rows.remove(ind)
-                    del (points[ind])
-                self.highlight = (points, hyd)
+                self.highlight = hyd
                 self._select_in_table(rows)
             else:
-                self.highlight = (points+points2, hyd)
+                self.highlight = hyd
                 self._select_in_table(rows+inds)
         else:
-            self.highlight = (points2, hyd)
+            self.highlight = hyd
             self._select_in_table(inds)
         return
 
@@ -319,13 +306,16 @@ class Plot(PamhyrPlot):
             picker=10
         )
 
-        self.draw_annotation(x, y)
+        self.draw_annotation()
+        self.highlight = None
         self.draw_highligth()
 
         self.idle()
 
-    def draw_annotation(self, x, y):
+    def draw_annotation(self):
         gl = map(lambda p: p.name, self.data.points)
+        x = self.data.get_station()
+        y = self.data.z()
 
         # Add label on graph
         self.annotation = []
@@ -363,16 +353,18 @@ class Plot(PamhyrPlot):
         self.canvas.figure.patch.set_facecolor('white')
 
     def draw_highligth(self):
-        points, hyd = self.highlight
+        hyd = self.highlight
         for p in self.hl_points:
             p[0].set_data([], [])
 
         self.hl_points = []
+        x = self.data.get_station()
+        y = self.data.z()
 
-        for x, y in points:
+        for i in self._parent.index_selected_rows():
             self.hl_points.append(
                 self.canvas.axes.plot(
-                    x, y,
+                    x[i], y[i],
                     color=self.color_plot_highlight,
                     lw=1.5, markersize=7, marker='+',
                 )
@@ -383,7 +375,7 @@ class Plot(PamhyrPlot):
         else:
             if self._z_note is not None:
                 self._z_note.set_visible(False)
-                self._z_line[0].set_visible(False)
+                self._z_line.set_visible(False)
                 self._z_fill_between.set_visible(False)
 
     def draw_highligth_z_line(self, z, a, p, w):
@@ -396,20 +388,27 @@ class Plot(PamhyrPlot):
 
         x = self.data.get_station()
         xlim = (x[0], x[-1])
+        ylim = self.canvas.axes.get_ylim()
         pos = (
             xlim[0] + (abs(xlim[0] - xlim[1]) * 0.05),
-            z + 0.8
+            z + + (abs(ylim[0] - ylim[1]) * 0.08)
         )
         y = self.data.z()
 
-        if self._z_note is None:
+        if 1 == 1:
+        #if self._z_note is None:
+            if self._z_note is not None:
+                self._z_note.remove()
+            if self._z_line is not None:
+                self._z_line.remove()
             self.draw_highligth_z_line_fill(x, y, z)
 
-            self._z_line = self.canvas.axes.plot(
+            self._z_line, = self.canvas.axes.plot(
                 xlim, [z, z],
                 color=self.color_plot_river_water
             )
-            self._z_line[0].set_visible(True)
+            self._z_line.set_visible(True)
+            self._z_fill_between.set_visible(True)
 
             self._z_note = self.canvas.axes.annotate(
                 text, pos,
@@ -422,14 +421,16 @@ class Plot(PamhyrPlot):
                 alpha=0.7
             )
             self._z_note.set_visible(True)
-        else:
-            self.draw_highligth_z_line_fill(x, y, z)
+        #else:
+            #self.draw_highligth_z_line_fill(x, y, z)
 
-            self._z_line[0].set_data(xlim, [z, z])
-            self._z_note.set_position(pos)
-            self._z_note.set_text(text)
-            self._z_line[0].set_visible(True)
-            self._z_note.set_visible(True)
+            #self._z_line.set_data(xlim, [z, z])
+            #self._z_note.set_position(pos)
+            #self._z_note.set_text(text)
+            #self._z_line.set_visible(True)
+            #self._z_note.set_visible(True)
+            #self._z_fill_between.set_visible(True)
+        #self.update_idle()
 
     def draw_highligth_z_line_fill(self, x, y, z):
         if self._z_fill_between is not None:
@@ -445,6 +446,5 @@ class Plot(PamhyrPlot):
     @timer
     def update(self):
         self.draw()
-        self.draw_highligth()
 
         self.update_idle()
-- 
GitLab