mirror of https://gitlab.com/pamhyr/pamhyr2
Geometry: Update guidelines computation.
* src/Model/Geometry/Reach.py (compute_guidelines): Now return complete and incomplete guidelines names.mesh
parent
d22ab3bbd7
commit
634d0a4194
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue