Geometry: Update guidelines computation.

* src/Model/Geometry/Reach.py (compute_guidelines): Now return complete and incomplete guidelines names.
mesh
Pierre-Antoine Rouby 2023-04-17 11:50:09 +02:00
parent d22ab3bbd7
commit 634d0a4194
3 changed files with 73 additions and 70 deletions

View File

@ -227,9 +227,7 @@ class ProfileXYZ(Profile):
station_i = (normalized_direction_vec[0] * xi + station_i = (normalized_direction_vec[0] * xi +
normalized_direction_vec[1] * yi) normalized_direction_vec[1] * yi)
station.append(station_i) station.append(station_i)
ret = np.array(station) ret = np.array(station)
constant = ret[index_first_named_point] constant = ret[index_first_named_point]
elif first_named_point is None: elif first_named_point is None:
vector = Vector1d(first_point_not_nan, vector = Vector1d(first_point_not_nan,

View File

@ -166,9 +166,11 @@ class Reach:
# Guidelines # 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 # Reset guide lines cache
self._guidelines = {} self._guidelines = {}
self._guidelines_is_valid = len(incomplete) == 0
# Make a list of point for each guideline # Make a list of point for each guideline
for guide in guide_set: for guide in guide_set:
@ -190,7 +192,7 @@ class Reach:
"""Compute reach guideline and check if is valid for all profiles """Compute reach guideline and check if is valid for all profiles
Returns: Returns:
True if all guide line is valid Tuple of complete and incomplete guidelines name.
""" """
# Get all point contains into a guideline # Get all point contains into a guideline
named_points = [profile.named_points() for profile in self._profiles] named_points = [profile.named_points() for profile in self._profiles]
@ -207,20 +209,24 @@ class Reach:
points_name points_name
) )
# All guide line is valid # Get incomplete guideline
is_ok = reduce( incomplete = set(
bool.__and__, reduce(
map( lambda acc, h: acc[1] + h[1],
lambda l: len(set(l).symmetric_difference(guide_set)) == 0, map(
points_name 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 # 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): def _map_guidelines_points(self, func):
return list( return list(

View File

@ -240,7 +240,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
for x, y in zip(self._reach.get_x(), self._reach.get_y()) 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_x(),
self._reach.get_guidelines_y() self._reach.get_guidelines_y()
) )
@ -319,7 +319,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.after_plot_selected_2.set_visible(False) self.after_plot_selected_2.set_visible(False)
try: try:
self.line_kp_zld = [ self.line_kp_zgl = [
self.ui.canvas_2.axes.plot( self.ui.canvas_2.axes.plot(
self._reach.get_kp(), i, lw=1. self._reach.get_kp(), i, lw=1.
) for i in self.model.z_complete_guideline() ) for i in self.model.z_complete_guideline()
@ -348,10 +348,10 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self._reach.profile(ind).y self._reach.profile(ind).y
) )
for i in range(len(self.line_ld_1)): for i in range(len(self.line_gl_1)):
self.line_ld_1[i].set_data( self.line_gl_1[i].set_data(
[x[i] for x in self.get_x_complete_list_ld], [x[i] for x in self.get_x_complete_list_gl],
[y[i] for y in self.get_y_complete_list_ld] [y[i] for y in self.get_y_complete_list_gl]
) )
self.tableView.model().blockSignals(False) self.tableView.model().blockSignals(False)
@ -374,8 +374,8 @@ class GeometryWindow(QMainWindow, WindowToolKit):
) )
try: try:
for i in range(len(self.line_kp_zld)): for i in range(len(self.line_kp_zgl)):
self.line_kp_zld[i][0].set_data( self.line_kp_zgl[i][0].set_data(
kp, self.model.z_complete_guideline()[i] kp, self.model.z_complete_guideline()[i]
) )
except: except:
@ -391,9 +391,9 @@ class GeometryWindow(QMainWindow, WindowToolKit):
selected_profile = 0 selected_profile = 0
station = self._reach.profile(selected_profile).get_station() station = self._reach.profile(selected_profile).get_station()
station_plus_1 = self._reach.profile(selected_profile + 1).get_station() station_plus_1 = self._reach.profile(selected_profile + 1).get_station()
elevation = self._reach.profile(selected_profile).z elevation = self._reach.profile(selected_profile).z()
elevation_i_plus_1 = self._reach.profile(selected_profile + 1).z elevation_i_plus_1 = self._reach.profile(selected_profile + 1).z()
ld = self._reach.profile(selected_profile).name gl = self._reach.profile(selected_profile).name
self.ui.canvas_3.axes.cla() self.ui.canvas_3.axes.cla()
self.ui.canvas_3.axes.grid(color='grey', linestyle='--', linewidth=0.5) 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='--' color=color_profile_i_plus_1, lw=1.6, linestyle='--'
) )
self.annotation_3 = [] self.annotation_3 = []
self.complete_list_ld = self._reach.get_complete_list_ld() self.complete_gl, self.incomplete_gl = self._reach.compute_guidelines()
self.incomplete_list_ld = self._reach.get_incomplete_list_ld()
line_2d = [[line_2D] for line_2D in self.line_ld_1] line_2d = [[line_2D] for line_2D in self.line_gl_1]
self.color_complete_ld = self.get_line_ld_colors(line_2d) self.color_complete_gl = self.get_line_gl_colors(line_2d)
self.color_incomplete_ld = 2 * ["#000000"] self.color_incomplete_gl = 2 * ["#000000"]
x_ld_complete = [] x_gl_complete = []
y_ld_complete = [] y_gl_complete = []
color_scat_complete_ld = [] color_scat_complete_gl = []
x_ld_incomplete = [] x_gl_incomplete = []
y_ld_incomplete = [] y_gl_incomplete = []
color_scat_incomplete_ld = [] color_scat_incomplete_gl = []
for i, txt in enumerate(list(ld)): for i, txt in enumerate(list(gl)):
if txt.strip() in self.complete_list_ld: if txt.strip() in self.complete_gl:
annotation_3 = self.ui.canvas_3.axes.annotate( annotation_3 = self.ui.canvas_3.axes.annotate(
txt, (station[i], elevation[i]), txt, (station[i], elevation[i]),
horizontalalignment='left', horizontalalignment='left',
verticalalignment='top', annotation_clip=True, verticalalignment='top', annotation_clip=True,
fontsize=10, fontsize=10,
color=self.color_complete_ld[ color=self.color_complete_gl[
self.complete_list_ld.index(txt) self.complete_gl.index(txt)
] ]
) )
annotation_3.set_position((station[i] + 0., elevation[i] + 0.)) annotation_3.set_position((station[i] + 0., elevation[i] + 0.))
self.annotation_3.append(annotation_3) self.annotation_3.append(annotation_3)
x_ld_complete.append(station[i]) x_gl_complete.append(station[i])
y_ld_complete.append(elevation[i]) y_gl_complete.append(elevation[i])
color_scat_complete_ld.append(self.color_complete_ld[self.complete_list_ld.index(txt)]) color_scat_complete_gl.append(self.color_complete_gl[self.complete_gl.index(txt)])
elif txt.strip() in self.incomplete_list_ld: elif txt.strip() in self.incomplete_gl:
annotate = self.ui.canvas_3.axes.annotate( annotate = self.ui.canvas_3.axes.annotate(
txt, (station[i], elevation[i]), horizontalalignment='left', txt, (station[i], elevation[i]), horizontalalignment='left',
verticalalignment='top', annotation_clip=True, fontsize=11, verticalalignment='top', annotation_clip=True, fontsize=11,
color=self.color_incomplete_ld[ color=self.color_incomplete_gl[
self.incomplete_list_ld.index(txt) self.incomplete_gl.index(txt)
], ],
size=10 size=10
) )
self.annotation_3.append(annotate) self.annotation_3.append(annotate)
x_ld_incomplete.append(station[i]) x_gl_incomplete.append(station[i])
y_ld_incomplete.append(elevation[i]) y_gl_incomplete.append(elevation[i])
color_scat_incomplete_ld.append( color_scat_incomplete_gl.append(
self.color_incomplete_ld[self.incomplete_list_ld.index(txt)] self.color_incomplete_gl[self.incomplete_gl.index(txt)]
) )
self.tableView.model().blockSignals(False) self.tableView.model().blockSignals(False)
@ -497,45 +496,45 @@ class GeometryWindow(QMainWindow, WindowToolKit):
x = self.profile(ind).get_station() x = self.profile(ind).get_station()
y = self._reach.profile(ind).z() y = self._reach.profile(ind).z()
ld = self._reach.profile(ind).name gl = self._reach.profile(ind).name
get_complete_list_ld = self._reach.get_complete_list_ld() get_complete_list_gl = self._reach.get_complete_list_gl()
get_incomplete_list_ld = self._reach.get_incomplete_list_ld() get_incomplete_list_gl = self._reach.get_incomplete_list_gl()
try: try:
x_ld_complete = [] x_gl_complete = []
color_scat_complete_ld = [] color_scat_complete_gl = []
x_ld_incomplete = [] x_gl_incomplete = []
color_scat_incomplete_ld = [] color_scat_incomplete_gl = []
for i, txt in enumerate(list(ld)): for i, txt in enumerate(list(gl)):
if txt in get_complete_list_ld: if txt in get_complete_list_gl:
annotate = self.ui.canvas_3.axes.annotate( annotate = self.ui.canvas_3.axes.annotate(
txt, (x[i], y[i]), horizontalalignment='left', txt, (x[i], y[i]), horizontalalignment='left',
verticalalignment='top', annotation_clip=True, verticalalignment='top', annotation_clip=True,
fontsize=11, fontsize=11,
color=self.color_complete_ld[ color=self.color_complete_gl[
get_complete_list_ld.index(txt) get_complete_list_gl.index(txt)
], ],
size=10 size=10
) )
self.annotation_3.append(annotate) self.annotation_3.append(annotate)
x_ld_complete.append([x[i], y[i]]) x_gl_complete.append([x[i], y[i]])
color_scat_complete_ld.append( color_scat_complete_gl.append(
self.color_complete_ld[self.complete_list_ld.index(txt)] 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( annotate = self.ui.canvas_3.axes.annotate(
txt, (x[i], y[i]), horizontalalignment='left', txt, (x[i], y[i]), horizontalalignment='left',
verticalalignment='top', annotation_clip=True, verticalalignment='top', annotation_clip=True,
fontsize=11, fontsize=11,
color=self.color_incomplete_ld[ color=self.color_incomplete_gl[
get_incomplete_list_ld.index(txt) get_incomplete_list_gl.index(txt)
], ],
size=10 size=10
) )
self.annotation_3.append(annotate) self.annotation_3.append(annotate)
x_ld_incomplete.append([x[i], y[i]]) x_gl_incomplete.append([x[i], y[i]])
color_scat_incomplete_ld.append( color_scat_incomplete_gl.append(
self.color_incomplete_ld[get_incomplete_list_ld.index(txt)] self.color_incomplete_gl[get_incomplete_list_gl.index(txt)]
) )
except: except:
print("FIXME") print("FIXME")
@ -543,7 +542,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.tableView.model().blockSignals(False) self.tableView.model().blockSignals(False)
self.ui.canvas_3.figure.canvas.draw_idle() 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 = [] colors = []
for line in line_2d: for line in line_2d: