mirror of https://gitlab.com/pamhyr/pamhyr2
Geometry: Add water level at shift click, end of onpickevent refactoring.
parent
f4561494f6
commit
317cbf904d
|
|
@ -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
|
||||
|
||||
self.highlight = (points, z)
|
||||
a, p, w = self._compute_hydrolics(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"],
|
||||
|
|
|
|||
Loading…
Reference in New Issue