Source code for ladybug_display.geometry3d.point

"""A point that can be displayed in 3D space."""
from ladybug_geometry.geometry3d.pointvector import Point3D
from ladybug.color import Color

from ._base import _SingleColorBase3D
from ladybug_display.altnumber import default
from ladybug_display.typing import float_positive


[docs]class DisplayPoint3D(_SingleColorBase3D): """A point in 3D space with display properties. Args: geometry: A ladybug-geometry Point3D object. color: A ladybug Color object. If None, a default black color will be used. (Default: None). radius: Number for radius in pixels (for the screen) or millimeters (in print). This can also be the Default object to indicate that the default settings of the interface should be used. Properties: * geometry * color * radius * x * y * z * user_data """ __slots__ = ('_radius',) def __init__(self, geometry, color=None, radius=default): """Initialize base with shade object.""" assert isinstance(geometry, Point3D), '\ Expected ladybug_geometry Point3D. Got {}'.format(type(geometry)) _SingleColorBase3D.__init__(self, geometry, color) self.radius = radius
[docs] @classmethod def from_dict(cls, data): """Initialize a DisplayPoint3D from a dictionary. Args: data: A dictionary representation of an DisplayPoint3D object. """ assert data['type'] == 'DisplayPoint3D', \ 'Expected DisplayPoint3D dictionary. Got {}.'.format(data['type']) color = Color.from_dict(data['color']) if 'color' in data and data['color'] \ is not None else None rad = default if 'radius' not in data or \ data['radius'] == default.to_dict() else data['radius'] geo = cls(Point3D.from_dict(data['geometry']), color, rad) if 'user_data' in data and data['user_data'] is not None: geo.user_data = data['user_data'] return geo
@property def radius(self): """Get or set a number for the radius of this object.""" return self._radius @radius.setter def radius(self, value): if value == default: self._radius = default else: self._radius = float_positive(value, 'point radius') @property def x(self): """Get the X coordinate.""" return self._geometry.x @property def y(self): """Get the Y coordinate.""" return self._geometry.y @property def z(self): """Get the Z coordinate.""" return self._geometry.z
[docs] def distance_to_point(self, point): """Get the distance from this point to another DisplayPoint3D.""" return self.geometry.distance_to_point(point.geometry)
[docs] def to_dict(self): """Return DisplayPoint3D as a dictionary.""" base = {'type': 'DisplayPoint3D'} base['geometry'] = self._geometry.to_dict() base['color'] = self.color.to_dict() base['radius'] = default.to_dict() if self.radius == default else self.radius if self.user_data is not None: base['user_data'] = self.user_data return base
def __copy__(self): new_g = DisplayPoint3D(self.geometry, self.color, self.radius) new_g._user_data = None if self.user_data is None else self.user_data.copy() return new_g def __getitem__(self, key): return (self.x, self.y, self.z)[key] def __iter__(self): return iter((self.x, self.y, self.z)) def __repr__(self): return 'DisplayPoint3D: {}'.format(self.geometry)