From 1da3461dfecaaa973f94098f9b07d08023e9fae9 Mon Sep 17 00:00:00 2001 From: Theophile Terraz Date: Wed, 26 Nov 2025 11:16:19 +0100 Subject: [PATCH] debug meshing --- src/Meshing/Internal.py | 39 +++++++++++++------------------- src/Model/Geometry/Profile.py | 19 ++++++++++++---- src/Model/Geometry/ProfileXYZ.py | 14 +++++------- src/View/Geometry/Window.py | 5 +--- 4 files changed, 38 insertions(+), 39 deletions(-) diff --git a/src/Meshing/Internal.py b/src/Meshing/Internal.py index ba4a6d8f..5094b649 100644 --- a/src/Meshing/Internal.py +++ b/src/Meshing/Internal.py @@ -63,8 +63,6 @@ class InternalMeshing(AMeshingTool): gl = reach.compute_guidelines() profiles = reach.profiles[limites[0]:limites[1]+1] - print(profiles) - # we make sure that the lines are in the left-to-right order guide_list = [ x.name @@ -72,38 +70,31 @@ class InternalMeshing(AMeshingTool): if x.name in gl[0] ] - gl1 = [""] + guide_list - gl2 = guide_list + [""] - max_values = [0] * (len(guide_list) + 1) - max_values_index = [0] * (len(guide_list) + 1) + guide_list = ["un"] + guide_list + ["np"] + max_values = [0] * (len(guide_list) - 1) + max_values_index = [0] * (len(guide_list) - 1) # we work between each couple of guidelines for j, p in enumerate(profiles): - index1 = 0 - index2 = p.named_point_index(guide_list[0]) - if index2 - index1 > max_values[0]: - max_values[0] = index2 - index1 - max_values_index[0] = j for i in range(len(guide_list) - 1): index1 = p.named_point_index(guide_list[i]) index2 = p.named_point_index(guide_list[i+1]) - if index2 - index1 > max_values[i + 1]: - max_values[i + 1] = index2 - index1 - max_values_index[i + 1] = j - index1 = p.named_point_index(guide_list[-1]) - index2 = len(p) - 1 - if index2 - index1 > max_values[-1]: - max_values[-1] = index2 - index1 - max_values_index[-1] = j + if index2 - index1 > max_values[i]: + max_values[i] = index2 - index1 + max_values_index[i] = j for i in range(len(max_values)): for isect in range(max_values_index[i], len(profiles)-1): self.compl_sect(profiles[isect], profiles[isect+1], - gl1[i], gl2[i]) + guide_list[i], + guide_list[i+1]) + for isect in reversed(range(0, max_values_index[i])): self.compl_sect(profiles[isect+1], profiles[isect], - gl1[i], gl2[i]) + guide_list[i], + guide_list[i+1]) + def interpolate_transversal_step(self, reach, @@ -124,11 +115,12 @@ class InternalMeshing(AMeshingTool): d = 1.0/float(np[i]+1) ptr0 = ptr for j in range(np[i]): - p = reach.profiles[ptr0].copy() + p = ProfileXYZ(reach=reach, status=reach._status) # RATIO entre les deux sections initiales dj = float(j+1)*d ptr += 1 # next profile, original for k in range(len(reach.profiles[ptr0].points)): + p.add() p.points[k].x = reach.profiles[ptr0].points[k].x + \ dj*(reach.profiles[ptr].points[k].x - reach.profiles[ptr0].points[k].x) @@ -141,7 +133,6 @@ class InternalMeshing(AMeshingTool): p.rk = reach.profiles[ptr0].rk + \ dj*(reach.profiles[ptr].rk - reach.profiles[ptr0].rk) - p.name = f'interpol{p.rk}' reach.insert_profile(ptr, p) ptr += 1 # next profile, original @@ -302,6 +293,8 @@ class InternalMeshing(AMeshingTool): sgn = -1.0 else: sgn = sign(reach.profiles[-1].rk - reach.profiles[0].rk) + if abs(sgn) < 0.5: + sgn = 1.0 reach.profiles[origin].rk = origin_value diff --git a/src/Model/Geometry/Profile.py b/src/Model/Geometry/Profile.py index 7f9d5373..3c452ed4 100644 --- a/src/Model/Geometry/Profile.py +++ b/src/Model/Geometry/Profile.py @@ -89,12 +89,23 @@ class Profile(object): return self.points[index] def named_point(self, name): - return next((p for p in self.points if p.name == name), None) + if name == "un": + return self.points[0] + elif name == "np": + return self.points[-1] + else: + return next((p for p in self.points if p.name == name), None) def named_point_index(self, name): - return next( - (p for p in enumerate(self.points) if p[1].name == name), None - )[0] + if name == "un": + return 0 + elif name == "np": + return len(self.points) - 1 + else: + return next( + (p for p in enumerate(self.points) if p[1].name == name), + None + )[0] @property def reach(self): diff --git a/src/Model/Geometry/ProfileXYZ.py b/src/Model/Geometry/ProfileXYZ.py index db92bd57..00c5ab71 100644 --- a/src/Model/Geometry/ProfileXYZ.py +++ b/src/Model/Geometry/ProfileXYZ.py @@ -900,14 +900,12 @@ class ProfileXYZ(Profile, SQLSubModel): self.point(i+1).z = 0.5 * self.point(i).z + 0.5 * self.point(i+2).z def copy(self): - p = ProfileXYZ(self.id, - self.name, - self.rk, - self.reach, - self.num, - 0, - 0, 0, - self._status) + p = ProfileXYZ(name = self.name, + rk = self.rk, + reach = self.reach, + nb_point = 0, + code1 = 0, code2 = 0, + status = self.reach._status) for i, k in enumerate(self.points): p.insert_point(i, k.copy()) diff --git a/src/View/Geometry/Window.py b/src/View/Geometry/Window.py index f00cfc89..bff05b10 100644 --- a/src/View/Geometry/Window.py +++ b/src/View/Geometry/Window.py @@ -358,14 +358,11 @@ class GeometryWindow(PamhyrWindow): def _update_rk(self, data): try: - mesher = MeshingWithMageMailleurTT() + mesher = InternalMeshing() self._table.update_rk(mesher, data) except Exception as e: logger_exception(e) raise ExternFileMissingError( - module="mage", - filename="MailleurTT", - path=MeshingWithMageMailleurTT._path(), src_except=e )