From fa35d49a42fb55a5318cd9d8ad0fc31df9d8fd81 Mon Sep 17 00:00:00 2001 From: Theophile Terraz Date: Thu, 6 Jul 2023 11:33:59 +0200 Subject: [PATCH] add purge --- src/Model/Geometry/ProfileXYZ.py | 23 ++++++++++++++++++++++- src/Model/Geometry/Reach.py | 9 +++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/Model/Geometry/ProfileXYZ.py b/src/Model/Geometry/ProfileXYZ.py index 611d9fdc..cdee171b 100644 --- a/src/Model/Geometry/ProfileXYZ.py +++ b/src/Model/Geometry/ProfileXYZ.py @@ -278,11 +278,12 @@ class ProfileXYZ(Profile): x = self.x() y = self.y() z = self.z() - for i in len(self.points)-1: + for i in range(len(self.points)-1): dx = x[i+1] - x[i] dy = y[i+1] - y[i] dz = z[i+1] - z[i] l.append( np.sqrt(dx*dx + dy*dy + dz*dz) ) + return l @@ -294,5 +295,25 @@ class ProfileXYZ(Profile): for i in l: lc = lc + i lcum.append(lc) + return lcum + @timer + def purge(self, np) -> list: + + points = self.points + if (self.number_points <= np): return points + while len(points) > np: + x1 = [point.x() for point in points] + y1 = [point.y() for point in points] + z1 = [point.z() for point in points] + l = [(x*x+y*y+z*z) for (x,y,z) in zip(x1,y1,z1)] + l2 = [(x + y) for (x, y) in zip(l[:-1], l[1:])] + imin = np.argmin(l2)+1 + points.pop(imin) + + return points + + + + diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py index 0830831f..2d3b435d 100644 --- a/src/Model/Geometry/Reach.py +++ b/src/Model/Geometry/Reach.py @@ -704,3 +704,12 @@ class Reach: if n <= npoint_max: # we add the missing points at the end of the profile for k in range(n,npoints_max): new_profiles[isect].add_point(new_profiles[isect].points[-1]) + @timer + def purge(self, np: int) -> list: + profiles = [] + for profile in self.profiles(): + points = profile.purge(np) + profiles.append(ProfileXYZ()) + profiles[-1].import_points(points) + + return profiles