Source code for ladybug_display.geometry3d.plane
"""A plane that can be displayed in 3D space."""
from ladybug_geometry.geometry3d.plane import Plane
from ladybug.color import Color
from ._base import _SingleColorBase3D
[docs]
class DisplayPlane(_SingleColorBase3D):
"""A plane in 3D space with display properties.
Args:
geometry: A ladybug-geometry Plane object.
color: A ladybug Color object. If None, a default black color will be
used. (Default: None).
show_axes: A boolean to note whether the plane should be displayed with
XY axes instead of just an origin point and a normal vector.
show_grid: A boolean to note whether the plane should be displayed
with a grid.
Properties:
* geometry
* color
* show_axes
* show_grid
* o
* n
* x
* y
* k
* user_data
"""
__slots__ = ('_show_axes', '_show_grid')
def __init__(self, geometry, color=None, show_axes=False, show_grid=False):
"""Initialize base with shade object."""
assert isinstance(geometry, Plane), '\
Expected ladybug_geometry Plane. Got {}'.format(type(geometry))
_SingleColorBase3D.__init__(self, geometry, color)
self.show_axes = show_axes
self.show_grid = show_grid
[docs]
@classmethod
def from_dict(cls, data):
"""Initialize a DisplayPlane from a dictionary.
Args:
data: A dictionary representation of an DisplayPlane object.
"""
assert data['type'] == 'DisplayPlane', \
'Expected DisplayPlane dictionary. Got {}.'.format(data['type'])
color = Color.from_dict(data['color']) if 'color' in data and data['color'] \
is not None else None
ax = data['show_axes'] if 'show_axes' in data else False
gd = data['show_grid'] if 'show_grid' in data else False
geo = cls(Plane.from_dict(data['geometry']), color, ax, gd)
if 'user_data' in data and data['user_data'] is not None:
geo.user_data = data['user_data']
return geo
@property
def show_axes(self):
"""Get or set a boolean for whether to display the XY axes of the plane."""
return self._show_axes
@show_axes.setter
def show_axes(self, value):
try:
self._show_axes = bool(value)
except TypeError:
raise TypeError(
'Expected boolean for DisplayPlane.show_axes. Got {}.'.format(value))
@property
def show_grid(self):
"""Get or set a boolean for whether to display the grid of the plane."""
return self._show_grid
@show_grid.setter
def show_grid(self, value):
try:
self._show_grid = bool(value)
except TypeError:
raise TypeError(
'Expected boolean for DisplayPlane.show_grid. Got {}.'.format(value))
@property
def o(self):
"""Get a Point3D representing the origin of the plane."""
return self._geometry.o
@property
def n(self):
"""Get a Vector3D representing the normal of the plane."""
return self._geometry.n
@property
def x(self):
"""Get aVector3D representing the x axis of the plane."""
return self._geometry.x
@property
def y(self):
"""Get a Vector3D representing the y axis of the plane."""
return self._geometry.y
@property
def k(self):
"""Get a number for the constant of the plane."""
return self._geometry.k
[docs]
def to_dict(self):
"""Return DisplayPlane as a dictionary."""
base = {'type': 'DisplayPlane'}
base['geometry'] = self._geometry.to_dict()
base['color'] = self.color.to_dict()
base['show_axes'] = self.show_axes
base['show_grid'] = self.show_grid
if self.user_data is not None:
base['user_data'] = self.user_data
return base
def __copy__(self):
new_g = DisplayPlane(self.geometry, self.color, self.show_axes, self.show_grid)
new_g._user_data = None if self.user_data is None else self.user_data.copy()
return new_g
def __repr__(self):
return 'DisplayPlane: {}'.format(self.geometry)