From 634d0a4194bbee8504f70368a19c897c6667af6f Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr> Date: Mon, 17 Apr 2023 11:50:09 +0200 Subject: [PATCH] Geometry: Update guidelines computation. * src/Model/Geometry/Reach.py (compute_guidelines): Now return complete and incomplete guidelines names. --- src/Model/Geometry/ProfileXYZ.py | 2 - src/Model/Geometry/Reach.py | 28 ++++--- src/View/Geometry/GeometryWindow.py | 119 ++++++++++++++-------------- 3 files changed, 76 insertions(+), 73 deletions(-) diff --git a/src/Model/Geometry/ProfileXYZ.py b/src/Model/Geometry/ProfileXYZ.py index d7baf4b4..de194fbe 100644 --- a/src/Model/Geometry/ProfileXYZ.py +++ b/src/Model/Geometry/ProfileXYZ.py @@ -227,9 +227,7 @@ class ProfileXYZ(Profile): station_i = (normalized_direction_vec[0] * xi + normalized_direction_vec[1] * yi) station.append(station_i) - ret = np.array(station) - constant = ret[index_first_named_point] elif first_named_point is None: vector = Vector1d(first_point_not_nan, diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py index f81416fe..ab79afd4 100644 --- a/src/Model/Geometry/Reach.py +++ b/src/Model/Geometry/Reach.py @@ -166,9 +166,11 @@ class Reach: # Guidelines - def _compute_guidelines_cache(self, guide_set, named_points): + def _compute_guidelines_cache(self, guide_set, named_points, + complete, incomplete): # Reset guide lines cache self._guidelines = {} + self._guidelines_is_valid = len(incomplete) == 0 # Make a list of point for each guideline for guide in guide_set: @@ -190,7 +192,7 @@ class Reach: """Compute reach guideline and check if is valid for all profiles Returns: - True if all guide line is valid + Tuple of complete and incomplete guidelines name. """ # Get all point contains into a guideline named_points = [profile.named_points() for profile in self._profiles] @@ -207,20 +209,24 @@ class Reach: points_name ) - # All guide line is valid - is_ok = reduce( - bool.__and__, - map( - lambda l: len(set(l).symmetric_difference(guide_set)) == 0, - points_name + # Get incomplete guideline + incomplete = set( + reduce( + lambda acc, h: acc[1] + h[1], + map( + lambda l: list(set(l).symmetric_difference(guide_set)), + points_name + ) ) ) - self._guidelines_is_valid = is_ok + + complete = guide_set - incomplete # Compute guideline and put data in cache - self._compute_guidelines_cache(guide_set, named_points) + self._compute_guidelines_cache(guide_set, named_points, + complete, incomplete) - return is_ok + return (complete, incomplete) def _map_guidelines_points(self, func): return list( diff --git a/src/View/Geometry/GeometryWindow.py b/src/View/Geometry/GeometryWindow.py index 9908831c..433b0b40 100644 --- a/src/View/Geometry/GeometryWindow.py +++ b/src/View/Geometry/GeometryWindow.py @@ -240,7 +240,7 @@ class GeometryWindow(QMainWindow, WindowToolKit): for x, y in zip(self._reach.get_x(), self._reach.get_y()) ] - self.line_ld_1 = self.ui.canvas_1.axes.plot( + self.line_gl_1 = self.ui.canvas_1.axes.plot( self._reach.get_guidelines_x(), self._reach.get_guidelines_y() ) @@ -319,7 +319,7 @@ class GeometryWindow(QMainWindow, WindowToolKit): self.after_plot_selected_2.set_visible(False) try: - self.line_kp_zld = [ + self.line_kp_zgl = [ self.ui.canvas_2.axes.plot( self._reach.get_kp(), i, lw=1. ) for i in self.model.z_complete_guideline() @@ -348,10 +348,10 @@ class GeometryWindow(QMainWindow, WindowToolKit): self._reach.profile(ind).y ) - for i in range(len(self.line_ld_1)): - self.line_ld_1[i].set_data( - [x[i] for x in self.get_x_complete_list_ld], - [y[i] for y in self.get_y_complete_list_ld] + for i in range(len(self.line_gl_1)): + self.line_gl_1[i].set_data( + [x[i] for x in self.get_x_complete_list_gl], + [y[i] for y in self.get_y_complete_list_gl] ) self.tableView.model().blockSignals(False) @@ -374,8 +374,8 @@ class GeometryWindow(QMainWindow, WindowToolKit): ) try: - for i in range(len(self.line_kp_zld)): - self.line_kp_zld[i][0].set_data( + for i in range(len(self.line_kp_zgl)): + self.line_kp_zgl[i][0].set_data( kp, self.model.z_complete_guideline()[i] ) except: @@ -391,9 +391,9 @@ class GeometryWindow(QMainWindow, WindowToolKit): selected_profile = 0 station = self._reach.profile(selected_profile).get_station() station_plus_1 = self._reach.profile(selected_profile + 1).get_station() - elevation = self._reach.profile(selected_profile).z - elevation_i_plus_1 = self._reach.profile(selected_profile + 1).z - ld = self._reach.profile(selected_profile).name + elevation = self._reach.profile(selected_profile).z() + elevation_i_plus_1 = self._reach.profile(selected_profile + 1).z() + gl = self._reach.profile(selected_profile).name self.ui.canvas_3.axes.cla() self.ui.canvas_3.axes.grid(color='grey', linestyle='--', linewidth=0.5) @@ -429,54 +429,53 @@ class GeometryWindow(QMainWindow, WindowToolKit): color=color_profile_i_plus_1, lw=1.6, linestyle='--' ) self.annotation_3 = [] - self.complete_list_ld = self._reach.get_complete_list_ld() - self.incomplete_list_ld = self._reach.get_incomplete_list_ld() - - line_2d = [[line_2D] for line_2D in self.line_ld_1] - self.color_complete_ld = self.get_line_ld_colors(line_2d) - self.color_incomplete_ld = 2 * ["#000000"] - - x_ld_complete = [] - y_ld_complete = [] - color_scat_complete_ld = [] - x_ld_incomplete = [] - y_ld_incomplete = [] - color_scat_incomplete_ld = [] - - for i, txt in enumerate(list(ld)): - if txt.strip() in self.complete_list_ld: + self.complete_gl, self.incomplete_gl = self._reach.compute_guidelines() + + line_2d = [[line_2D] for line_2D in self.line_gl_1] + self.color_complete_gl = self.get_line_gl_colors(line_2d) + self.color_incomplete_gl = 2 * ["#000000"] + + x_gl_complete = [] + y_gl_complete = [] + color_scat_complete_gl = [] + x_gl_incomplete = [] + y_gl_incomplete = [] + color_scat_incomplete_gl = [] + + for i, txt in enumerate(list(gl)): + if txt.strip() in self.complete_gl: annotation_3 = self.ui.canvas_3.axes.annotate( txt, (station[i], elevation[i]), horizontalalignment='left', verticalalignment='top', annotation_clip=True, fontsize=10, - color=self.color_complete_ld[ - self.complete_list_ld.index(txt) + color=self.color_complete_gl[ + self.complete_gl.index(txt) ] ) annotation_3.set_position((station[i] + 0., elevation[i] + 0.)) self.annotation_3.append(annotation_3) - x_ld_complete.append(station[i]) - y_ld_complete.append(elevation[i]) - color_scat_complete_ld.append(self.color_complete_ld[self.complete_list_ld.index(txt)]) - elif txt.strip() in self.incomplete_list_ld: + x_gl_complete.append(station[i]) + y_gl_complete.append(elevation[i]) + color_scat_complete_gl.append(self.color_complete_gl[self.complete_gl.index(txt)]) + elif txt.strip() in self.incomplete_gl: annotate = self.ui.canvas_3.axes.annotate( txt, (station[i], elevation[i]), horizontalalignment='left', verticalalignment='top', annotation_clip=True, fontsize=11, - color=self.color_incomplete_ld[ - self.incomplete_list_ld.index(txt) + color=self.color_incomplete_gl[ + self.incomplete_gl.index(txt) ], size=10 ) self.annotation_3.append(annotate) - x_ld_incomplete.append(station[i]) - y_ld_incomplete.append(elevation[i]) - color_scat_incomplete_ld.append( - self.color_incomplete_ld[self.incomplete_list_ld.index(txt)] + x_gl_incomplete.append(station[i]) + y_gl_incomplete.append(elevation[i]) + color_scat_incomplete_gl.append( + self.color_incomplete_gl[self.incomplete_gl.index(txt)] ) self.tableView.model().blockSignals(False) @@ -497,45 +496,45 @@ class GeometryWindow(QMainWindow, WindowToolKit): x = self.profile(ind).get_station() y = self._reach.profile(ind).z() - ld = self._reach.profile(ind).name - get_complete_list_ld = self._reach.get_complete_list_ld() - get_incomplete_list_ld = self._reach.get_incomplete_list_ld() + gl = self._reach.profile(ind).name + get_complete_list_gl = self._reach.get_complete_list_gl() + get_incomplete_list_gl = self._reach.get_incomplete_list_gl() try: - x_ld_complete = [] - color_scat_complete_ld = [] - x_ld_incomplete = [] - color_scat_incomplete_ld = [] - for i, txt in enumerate(list(ld)): - if txt in get_complete_list_ld: + x_gl_complete = [] + color_scat_complete_gl = [] + x_gl_incomplete = [] + color_scat_incomplete_gl = [] + for i, txt in enumerate(list(gl)): + if txt in get_complete_list_gl: annotate = self.ui.canvas_3.axes.annotate( txt, (x[i], y[i]), horizontalalignment='left', verticalalignment='top', annotation_clip=True, fontsize=11, - color=self.color_complete_ld[ - get_complete_list_ld.index(txt) + color=self.color_complete_gl[ + get_complete_list_gl.index(txt) ], size=10 ) self.annotation_3.append(annotate) - x_ld_complete.append([x[i], y[i]]) - color_scat_complete_ld.append( - self.color_complete_ld[self.complete_list_ld.index(txt)] + x_gl_complete.append([x[i], y[i]]) + color_scat_complete_gl.append( + self.color_complete_gl[self.complete_gl.index(txt)] ) - elif txt in get_incomplete_list_ld: + elif txt in get_incomplete_list_gl: annotate = self.ui.canvas_3.axes.annotate( txt, (x[i], y[i]), horizontalalignment='left', verticalalignment='top', annotation_clip=True, fontsize=11, - color=self.color_incomplete_ld[ - get_incomplete_list_ld.index(txt) + color=self.color_incomplete_gl[ + get_incomplete_list_gl.index(txt) ], size=10 ) self.annotation_3.append(annotate) - x_ld_incomplete.append([x[i], y[i]]) - color_scat_incomplete_ld.append( - self.color_incomplete_ld[get_incomplete_list_ld.index(txt)] + x_gl_incomplete.append([x[i], y[i]]) + color_scat_incomplete_gl.append( + self.color_incomplete_gl[get_incomplete_list_gl.index(txt)] ) except: print("FIXME") @@ -543,7 +542,7 @@ class GeometryWindow(QMainWindow, WindowToolKit): self.tableView.model().blockSignals(False) self.ui.canvas_3.figure.canvas.draw_idle() - def get_line_ld_colors(self, line_2d): + def get_line_gl_colors(self, line_2d): colors = [] for line in line_2d: -- GitLab