From 52c311887a2c147bd7b005d2c4f89fc1e2affe48 Mon Sep 17 00:00:00 2001 From: Theophile Terraz <theophile.terraz@inrae.fr> Date: Wed, 17 Jul 2024 11:36:57 +0200 Subject: [PATCH] more hydraulic values in raw results --- src/Model/Geometry/ProfileXYZ.py | 26 +++++++++++++++++++++++--- src/View/Results/Table.py | 29 ++++++++++++++++++++++++++++- src/View/Results/translate.py | 7 ++++++- src/View/Translate.py | 10 +++++++++- 4 files changed, 66 insertions(+), 6 deletions(-) diff --git a/src/Model/Geometry/ProfileXYZ.py b/src/Model/Geometry/ProfileXYZ.py index 9d31a97d..ee765c22 100644 --- a/src/Model/Geometry/ProfileXYZ.py +++ b/src/Model/Geometry/ProfileXYZ.py @@ -402,12 +402,12 @@ class ProfileXYZ(Profile, SQLSubModel): return abs(rg.dist(rd)) def wet_perimeter(self, z): - poly = self.wet_polygon(z) + line = self.wet_line(z) - if poly is None: + if line is None: return 0 - return poly.length + return line.length def wet_area(self, z): poly = self.wet_polygon(z) @@ -417,6 +417,26 @@ class ProfileXYZ(Profile, SQLSubModel): return poly.area + def wet_radius(self, z): + p = self.wet_perimeter(z) + a = self.wet_area(z) + + if p == 0: + return 0 + + return a/p + + def wet_line(self, z): + points = self.wet_points(z) + if len(points) < 3: + return None + + z = map(lambda p: p.z, points) + station = self._get_station(points) + + line = geometry.LineString(list(zip(station, z))) + return line + def wet_polygon(self, z): points = self.wet_points(z) if len(points) < 3: diff --git a/src/View/Results/Table.py b/src/View/Results/Table.py index 7ce91f38..1b16a882 100644 --- a/src/View/Results/Table.py +++ b/src/View/Results/Table.py @@ -86,12 +86,39 @@ class TableModel(PamhyrTableModel): elif self._headers[column] == "discharge": v = self._lst[row].get_ts_key(self._timestamp, "Q") return f"{v:.4f}" - elif self._headers[column] == "speed": + elif self._headers[column] == "velocity": q = self._lst[row].get_ts_key(self._timestamp, "Q") z = self._lst[row].get_ts_key(self._timestamp, "Z") v = self._lst[row].geometry.speed(q, z) return f"{v:.4f}" + elif self._headers[column] == "width": + pt_left, pt_right = self._lst[row].get_ts_key( + self._timestamp, + "water_limits" + ) + v = pt_left.dist_2d(pt_right) + return f"{v:.4f}" + elif self._headers[column] == "depth": + z = self._lst[row].get_ts_key(self._timestamp, "Z") + z_min = self._lst[row].geometry.z_min() + v = z - z_min + return f"{v:.4f}" + elif self._headers[column] == "wet_area": + z = self._lst[row].get_ts_key(self._timestamp, "Z") + v = self._lst[row].geometry.wet_area(z) + return f"{v:.4f}" + elif self._headers[column] == "wet_perimeter": + z = self._lst[row].get_ts_key(self._timestamp, "Z") + v = self._lst[row].geometry.wet_perimeter(z) + return f"{v:.4f}" + elif self._headers[column] == "hydraulic_radius": + z = self._lst[row].get_ts_key(self._timestamp, "Z") + v = self._lst[row].geometry.wet_radius(z) + return f"{v:.4f}" + else: + v = 0.0 + return f"{v:.4f}" return QVariant() diff --git a/src/View/Results/translate.py b/src/View/Results/translate.py index 55c9c45e..05ae7d6b 100644 --- a/src/View/Results/translate.py +++ b/src/View/Results/translate.py @@ -57,5 +57,10 @@ class ResultsTranslate(MainTranslate): "name": _translate("Results", "Profile"), "water_elevation": self._dict["unit_water_elevation"], "discharge": self._dict["unit_discharge"], - "speed": self._dict["unit_speed"], + "velocity": self._dict["unit_speed"], + "width": self._dict["unit_width"], + "depth": self._dict["unit_height"], + "wet_area": self._dict["unit_wet_area"], + "wet_perimeter": self._dict["unit_wet_perimeter"], + "hydraulic_radius": self._dict["unit_hydraulic_radius"], } diff --git a/src/View/Translate.py b/src/View/Translate.py index 16b198b5..a9c3d8ee 100644 --- a/src/View/Translate.py +++ b/src/View/Translate.py @@ -61,7 +61,7 @@ class UnitTranslate(CommonWordTranslate): self._dict["unit_water_elevation"] = _translate( "Unit", "Water elevation (m)" ) - self._dict["unit_speed"] = _translate("Unit", "Speed (m/s)") + self._dict["unit_speed"] = _translate("Unit", "Velocity (m/s)") self._dict["unit_discharge"] = _translate("Unit", "Discharge (m³/s)") self._dict["unit_area"] = _translate("Unit", "Area (hectare)") @@ -71,6 +71,14 @@ class UnitTranslate(CommonWordTranslate): self._dict["unit_date_s"] = _translate("Unit", "Date (sec)") self._dict["unit_date_iso"] = _translate("Unit", "Date (ISO format)") + self._dict["unit_wet_area"] = _translate("Unit", "Wet Area (m²)") + self._dict["unit_wet_perimeter"] = _translate( + "Unit", "Wet Perimeter (m)" + ) + self._dict["unit_hydraulic_radius"] = _translate( + "Unit", "Hydraulic Radius (m)" + ) + class MainTranslate(UnitTranslate): def __init__(self): -- GitLab