diff --git a/src/Model/Geometry/PointXYZ.py b/src/Model/Geometry/PointXYZ.py index 2e806687cbc5bb9f5bfeac1031e06cb02c93ac04..cf678c24f26e6f25e9ff728406971c94e405c2e9 100644 --- a/src/Model/Geometry/PointXYZ.py +++ b/src/Model/Geometry/PointXYZ.py @@ -192,6 +192,22 @@ class PointXYZ(Point, SQLSubModel): def dist(self, p2): return PointXYZ.distance(self, p2) + def dist_2d(self, p2): + return PointXYZ.distance_2d(self, p2) + + @staticmethod + def distance_2d(p1, p2): + """Euclidean distance between p1 and p2. + + Args: + p1: A XYZ Point + p2: A XYZ Point + + Returns: + Euclidean 2D distance between the two points + """ + return dist((p1.x, p1.y), (p2.x, p2.y)) + @staticmethod def distance(p1, p2): """Euclidean distance between p1 and p2. @@ -201,6 +217,6 @@ class PointXYZ(Point, SQLSubModel): p2: A XYZ Point Returns: - Euclidean distance between the two points + Euclidean 3D distance between the two points """ return dist((p1.x, p1.y, p1.z), (p2.x, p2.y, p2.z)) diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py index 1b7748fe7d06aea9677e16110ded24f7fb1e0f9c..e294a087d630429cf0b73fcf6a3af7928cc9c4c7 100644 --- a/src/Model/Geometry/Reach.py +++ b/src/Model/Geometry/Reach.py @@ -573,7 +573,6 @@ class Reach(SQLSubModel): ind += 1 prof = ProfileXYZ( - kp=round(points[0][0]), reach=self, status=self._status ) prof.import_points(points) @@ -582,6 +581,7 @@ class Reach(SQLSubModel): self.profiles = profiles + self.profiles self._update_profile_numbers() + self._recompute_kp() return profiles @@ -814,3 +814,24 @@ class Reach(SQLSubModel): except Exception as e: logger_exception(e) return 0 + + def _recompute_kp(self, offset=0.0): + self._recompute_kp_no_gl(offset=offset) + + def _recompute_kp_no_gl(self, offset=0.0): + profiles = iter(self.profiles) + + previous = next(profiles) + previous.kp = offset + + for profile in profiles: + prev_points = previous.points + curr_points = profile.points + + dist = ( + prev_points[0].dist_2d(curr_points[0]) + + prev_points[-1].dist_2d(curr_points[-1]) + ) / 2.0 + + profile.kp = previous.kp + dist + previous = profile