From 870cba5005a3b15fa716cda5d09db42686c50ab9 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr> Date: Wed, 17 Jan 2024 11:02:44 +0100 Subject: [PATCH] Geometry: Fix width_approximation when rg and rd is missing. --- src/Model/Geometry/ProfileXYZ.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/Model/Geometry/ProfileXYZ.py b/src/Model/Geometry/ProfileXYZ.py index 37b32339..2b29b1f7 100644 --- a/src/Model/Geometry/ProfileXYZ.py +++ b/src/Model/Geometry/ProfileXYZ.py @@ -19,6 +19,7 @@ import logging import numpy as np from typing import List +from functools import reduce from tools import timer @@ -324,6 +325,19 @@ class ProfileXYZ(Profile, SQLSubModel): f"for profile ({self.id}) kp = {self.kp}" ) + def has_standard_named_points(self): + l, r = reduce( + lambda acc, n: ( + (acc[0] | (n == "rg")), + (acc[1] | (n == "rd")) + ), + map(lambda p: p.name.lower().strip(), + self.points), + (False, False) + ) + + return l & r + def add(self): """Add a new PointXYZ to profile. @@ -454,8 +468,12 @@ class ProfileXYZ(Profile, SQLSubModel): return list(map(lambda s: s - constant, station)) def width_approximation(self): - rg = self.get_point_by_name("rg") - rd = self.get_point_by_name("rd") + if self.has_standard_named_points(): + rg = self.get_point_by_name("rg") + rd = self.get_point_by_name("rd") + else: + rg = self.points[0] + rd = self.points[-1] return abs(rg.dist(rd)) -- GitLab