Commit 317cbf90 authored by Pierre-Antoine Rouby's avatar Pierre-Antoine Rouby
Browse files

Geometry: Add water level at shift click, end of onpickevent refactoring.

Showing with 106 additions and 25 deletions
+106 -25
......@@ -519,10 +519,10 @@ class ProfileXYZ(Profile, SQLSubModel):
station = []
constant = 0.0
if (first_named_point is not None and
last_named_point is not None):
if (first_named_point != last_named_point and
first_named_point.x != last_named_point.x):
if (first_named_point is not None
and last_named_point is not None):
if (first_named_point != last_named_point
and first_named_point.x != last_named_point.x):
vector = Vector1d(first_named_point, last_named_point)
norm_dir_vec = vector.normalized_direction_vector()
else:
......
......@@ -135,7 +135,6 @@ class RubarBE(CommandLineSolver):
name = self._study.name
return f"{name}.TRA"
def export(self, study, repertory, qlog=None):
self._study = study
name = study.name.replace(" ", "_")
......@@ -384,7 +383,9 @@ class RubarBE(CommandLineSolver):
last = profiles[-1]
if first.kp not in data or last.kp not in data:
logger.error("Study initial condition is not fully defined")
logger.error(
"Study initial condition is not fully defined"
)
return
f_h_s = self._export_tps_profile_height_speed(first, data)
......@@ -419,7 +420,6 @@ class RubarBE(CommandLineSolver):
# Last mail
f.write(f"{ind:>5} {f_h_s[0]} {f_h_s[1]}")
def _export_tps_init_data(self, ics):
data = {}
......
......@@ -47,6 +47,9 @@ class Plot(PamhyrPlot):
)
self._table = table
self._z_note = None
self._z_line = None
self._z_fill_between = None
self.line_xy = []
self.line_gl = []
......@@ -63,7 +66,8 @@ class Plot(PamhyrPlot):
self.hl_points = []
self.highlight = (
[], # Points list to highlight
None # Water level (z)
None # Hydrolic values (z, wet_area,
# wet_preimeter, water_width)
)
def onpick(self, event):
......@@ -74,11 +78,11 @@ class Plot(PamhyrPlot):
if modifiers != Qt.ControlModifier:
return
points, z = self.highlight
_, hyd = self.highlight
ind, point = self._closer_point(event)
self.highlight = ([point], z)
self.highlight = ([point], hyd)
self._select_in_table(ind)
self.update()
......@@ -92,18 +96,24 @@ class Plot(PamhyrPlot):
if modifiers != Qt.ShiftModifier:
return
points, z = self.highlight
points, _ = self.highlight
# Compute largeur au miroir
z = self._get_z_from_click(event)
if z < self.data.z_min():
return
a, p, w = self._compute_hydrolics(z)
self.highlight = (points, z)
logger.debug(f"{z, a, p, w}")
self.highlight = (points, (z, a, p, w))
self.update()
return
def select_points_from_indexes(self, indexes):
data = self.data
_, z = self.highlight
_, hyd = self.highlight
points = list(
map(
......@@ -117,7 +127,7 @@ class Plot(PamhyrPlot):
)
)
self.highlight = (points, z)
self.highlight = (points, hyd)
self.update()
def _select_in_table(self, ind):
......@@ -157,11 +167,9 @@ class Plot(PamhyrPlot):
def dist_mouse(point):
x, y = point[1]
d = (
sqrt(
d = sqrt(
(((mx - x) / ratio) ** 2) +
((my - y) ** 2)
)
)
return d
......@@ -171,6 +179,22 @@ class Plot(PamhyrPlot):
return closer
def _get_z_from_click(self, event):
return event.ydata
def _compute_hydrolics(self, z):
profile = self.data
points = profile.wet_points(z)
station = profile._get_station(points)
width = abs(station[0] - station[-1])
poly = profile.wet_polygon(z)
area = poly.area
perimeter = poly.length
return area, perimeter, width
@timer
def draw(self):
self.init_axes()
......@@ -180,9 +204,7 @@ class Plot(PamhyrPlot):
x_carto = self.data.x()
y_carto = self.data.y()
if (len(x_carto) < 3
or len(y_carto) < 3
or len(x) < 3):
if (len(x_carto) < 3 or len(y_carto) < 3 or len(x) < 3):
# Noting to do in this case
return
......@@ -193,7 +215,7 @@ class Plot(PamhyrPlot):
)
self.draw_annotation(x, y)
self.draw_hightligth()
self.draw_highligth()
self.idle()
......@@ -235,8 +257,8 @@ class Plot(PamhyrPlot):
self.canvas.axes.set_facecolor('#F9F9F9')
self.canvas.figure.patch.set_facecolor('white')
def draw_hightligth(self):
points, z = self.highlight
def draw_highligth(self):
points, hyd = self.highlight
for p in self.hl_points:
p[0].set_data([], [])
......@@ -252,8 +274,63 @@ class Plot(PamhyrPlot):
)
)
if hyd is not None:
self.draw_highligth_z_line(*hyd)
def draw_highligth_z_line(self, z, a, p, w):
text = (
f"Z = {z:.3f} m, " +
f"{self._trad['width']} = {w:.3f} m,\n" +
f"{self._trad['area']} = {a:.3f} m², " +
f"{self._trad['perimeter']} = {p:.3f} m"
)
x = self.data.get_station()
xlim = (x[0], x[-1])
pos = (
xlim[0] + (abs(xlim[0] - xlim[1]) * 0.05),
z + 0.8
)
y = self.data.z()
if self._z_note is None:
self.draw_highligth_z_line_fill(x, y, z)
self._z_line = self.canvas.axes.plot(
xlim, [z, z],
color=self.color_plot_river_water
)
self._z_note = self.canvas.axes.annotate(
text, pos,
horizontalalignment='left',
verticalalignment='top',
annotation_clip=True,
color=self.color_plot_river_water,
fontsize=9,
fontweight='bold',
alpha=0.7
)
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)
def draw_highligth_z_line_fill(self, x, y, z):
if self._z_fill_between is not None:
self._z_fill_between.remove()
self._z_fill_between = self.canvas.axes.fill_between(
x, y, z,
where=y <= z,
facecolor=self.color_plot_river_water_zone,
interpolate=True, alpha=0.7
)
@timer
def update(self):
self.draw_hightligth()
self.draw_highligth()
self.update_idle()
......@@ -32,6 +32,10 @@ class GeometryProfileTranslate(GeometryTranslate):
"Geometry", "Geometry cross-section"
)
self._dict["width"] = _translate("Geometry", "Width")
self._dict["area"] = _translate("Geometry", "Area")
self._dict["perimeter"] = _translate("Geometry", "Perimeter")
self._sub_dict["table_headers"] = {
"x": self._dict["x"],
"y": self._dict["y"],
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment