From e842fef434a077d697e1a0fc7c3e3afd43061a12 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr> Date: Mon, 7 Oct 2024 14:08:28 +0200 Subject: [PATCH] BC, Geometry: Add safety condition to value computation. --- src/Model/Geometry/Reach.py | 15 +++++++++++++++ src/View/BoundaryCondition/Edit/Window.py | 14 ++++++++++++++ src/View/BoundaryCondition/Edit/translate.py | 9 +++++++++ src/View/Tools/ASubWindow.py | 2 +- 4 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py index c10b56fc..3ef25793 100644 --- a/src/Model/Geometry/Reach.py +++ b/src/Model/Geometry/Reach.py @@ -368,6 +368,9 @@ class Reach(SQLSubModel): def inter_profiles_rk(self): profiles = sorted(self.profiles, key=lambda p: p.rk) + if len(profiles) == 0: + return [] + first = profiles[0] last = profiles[-1] @@ -750,6 +753,9 @@ class Reach(SQLSubModel): cnt += 1 def get_incline(self): + if len(self.profiles) == 0: + return 0.0 + first = self.profile(0) last = self.profile(len(self) - 1) @@ -767,6 +773,9 @@ class Reach(SQLSubModel): def get_incline_mean(self): profiles = self.profiles + if len(profiles) == 0: + return 0.0 + previous = profiles[0] incline_acc = 0 @@ -790,6 +799,9 @@ class Reach(SQLSubModel): def get_incline_median(self): profiles = self.profiles + if len(profiles) == 0: + return 0.0 + previous = profiles[0] incline_acc = [] @@ -814,6 +826,9 @@ class Reach(SQLSubModel): def get_incline_median_mean(self): profiles = self.profiles + if len(profiles) == 0: + return 0.0 + previous = profiles[0] incline_acc = [] diff --git a/src/View/BoundaryCondition/Edit/Window.py b/src/View/BoundaryCondition/Edit/Window.py index 336a9671..a414dcaa 100644 --- a/src/View/BoundaryCondition/Edit/Window.py +++ b/src/View/BoundaryCondition/Edit/Window.py @@ -347,6 +347,13 @@ class EditBoundaryConditionWindow(PamhyrWindow): if node is None: return reach = self._data.reach(self._study.river)[0] + if len(reach.profiles) == 0: + self.message_box( + text=self._trad["title_need_geometry"], + informative_text=self._trad["msg_need_geometry"] + ) + return + profile = reach.profiles[-1] dlg = GenerateDialog(self.slope_value, reach, @@ -379,6 +386,13 @@ class EditBoundaryConditionWindow(PamhyrWindow): if node is None: return reach = self._data.reach(self._study.river)[0] + if len(reach.profiles) == 0: + self.message_box( + text=self._trad["title_need_geometry"], + informative_text=self._trad["msg_need_geometry"] + ) + return + profile = reach.profiles[-1] z_min = profile.z_min() z_max = profile.z_max() diff --git a/src/View/BoundaryCondition/Edit/translate.py b/src/View/BoundaryCondition/Edit/translate.py index 006c49df..3912b81c 100644 --- a/src/View/BoundaryCondition/Edit/translate.py +++ b/src/View/BoundaryCondition/Edit/translate.py @@ -44,3 +44,12 @@ class BCETranslate(BCTranslate): "z": self._dict["unit_elevation"], "solid": _translate("BoundaryCondition", "Solid (kg/s)"), } + + self._dict["title_need_geometry"] = _translate( + "Geometry", "No geometry" + ) + self._dict["msg_need_geometry"] = _translate( + "Geometry", + "There is not geometry found for this reach, " + "a geometry is needed to this features" + ) diff --git a/src/View/Tools/ASubWindow.py b/src/View/Tools/ASubWindow.py index 01db62f4..25928e4d 100644 --- a/src/View/Tools/ASubWindow.py +++ b/src/View/Tools/ASubWindow.py @@ -142,7 +142,7 @@ class WindowToolKit(object): Returns: Nothing """ - msg = QMessageBox() + msg = QMessageBox(parent=self) msg.setIcon(QMessageBox.Warning) msg.setText(text) -- GitLab