PointXYZ.py 1.35 KiB
# -*- coding: utf-8 -*-

from math import dist
from pandas import isna as pd_is_na

from Model.Geometry.Point import Point

class PointXYZ(Point):
    def __init__(self, x:float = 0.0, y:float = 0.0, z:float = 0.0,
                 name:str = ""):
        super(PointXYZ, self).__init__(name=name)

        self._x = float(x)
        self._y = float(y)
        self._z = float(z)

    def __repr__(self):
        return f"({self._x}, {self._y}, {self._z}, {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)

    @property
    def z(self):
        return self._z

    @z.setter
    def z(self, value):
        self._z = float(value)

    @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())

    @staticmethod
    def distance(p1, p2):
        """Euclidean distance between p1 and p2.

        Args:
            p1: A XYZ Point
            p2: A XYZ Point

        Returns:
            Euclidean distance between the two points
        """
        return dist((p1.x(), p1.y(), p1.z()), (p2.x(), p2.y(), p2.z()))