diff --git a/src/Model/Geometry/Point.py b/src/Model/Geometry/Point.py new file mode 100644 index 0000000000000000000000000000000000000000..a844e7d4080e4a222196d5e87fad860190ada990 --- /dev/null +++ b/src/Model/Geometry/Point.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- + +class Point(object): + def __init__(self, name:str = ""): + super(Point, self).__init__() + + self._name = name + + @property + def name(self): + return self._name + + @name.setter + def name(self, name): + self._name = name + + def point_is_named(self): + """ + Returns: + True if the point is named. + """ + return self._name.strip() == "" diff --git a/src/Model/Geometry/PointXY.py b/src/Model/Geometry/PointXY.py new file mode 100644 index 0000000000000000000000000000000000000000..66bbfc6863e52303233c6e89cc3f114e435facb3 --- /dev/null +++ b/src/Model/Geometry/PointXY.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- + +from math import dist + +from Model.Geometry.Point import Point + +class PointXY(Point): + def __init__(self, x:float = 0.0, y:float = 0.0, + name: str = ""): + super(PointXY, self).__init__(name = name) + + self._x = float(x) + self._y = float(y) + + def __repr__(self): + return f"[{self._x}, {self._y}, {self._name}]" + + @property + def x(self): + return self._x + + @x.setter + def x(self, value): + self._x = float(value) + + @property + def y(self): + return self._y + + @y.setter + def y(self, value): + self._y = float(value) + + @staticmethod + def distance(p1, p2): + """Euclidean distance between p1 and p2. + + Args: + p1: A XY Point + p2: A XY Point + + Returns: + Euclidean distance between the two points + """ + return dist((p1.x(), p1.y()), (p2.x(), p2.y())) diff --git a/src/Model/Geometry/PointXYZ.py b/src/Model/Geometry/PointXYZ.py index 14c29bebc55c968d3bd3040e1798b5e402420994..a1b6f3610182dfe37e1392bd02b9abdaeb00f982 100644 --- a/src/Model/Geometry/PointXYZ.py +++ b/src/Model/Geometry/PointXYZ.py @@ -3,35 +3,17 @@ from math import dist from pandas import isna as pd_is_na -class PointXYZ: - def __init__(self, x: float, y: float, z: float, point_name: str = ""): - self.x = float(x) - self.y = float(y) - self.z = float(z) - self.name = point_name - self.points = [self.x, self.y, self.z, self.name] +from Model.Geometry.PointXY import PointXY - def __repr__(self): - point_xyz_name = f"({self.x}, {self.y},{self.z}, {self.name})" - return point_xyz_name - - @property - def x(self): - return self._x +class PointXYZ(PointXY): + def __init__(self, x:float = 0.0, y:float = 0.0, z:float = 0.0, + name:str = ""): + super(PointXYZ, self).__init__(x=x, y=y, name=name) - @x.setter - def x(self, value): - self._x = float(value) + self._z = float(z) - @property - def y(self): - return self._y - - @y.setter - def y(self, value): - self._y = float(value) - - # self.points[1] = self._y + def __repr__(self): + return f"({self._x}, {self._y}, {self._z}, {self._name})" @property def z(self): @@ -41,28 +23,13 @@ class PointXYZ: def z(self, value): self._z = float(value) - @property - def name(self): - return self._name - - @name.setter - def name(self, point_name): - self._name = point_name - - def point_is_named(self): - """ - Returns: - True if the point is named. - """ - return len(self.name.strip()) != 0 - @property def is_nan(self): """ Returns: True if at least one coordinate is as np.nan """ - return pd_is_na(self.x) or pd_is_na(self.y) or pd_is_na(self.z) + return pd_is_na(self.x()) or pd_is_na(self.y()) or pd_is_na(self.z()) @staticmethod def distance(p1, p2): @@ -75,4 +42,4 @@ class PointXYZ: Returns: Euclidean distance between the two points """ - return dist((p1.x, p1.y, p1.z), (p2.x, p2.y, p2.z)) + return dist((p1.x(), p1.y(), p1.z()), (p2.x(), p2.y(), p2.z()))