Source code for ladybug_display.geometry3d.polyface
"""A polyface in 3D space with display properties."""
from ladybug_geometry.geometry3d.polyface import Polyface3D
from ladybug.color import Color
from ._base import _SingleColorModeBase3D
[docs]
class DisplayPolyface3D(_SingleColorModeBase3D):
"""A polyface in 3D space with display properties.
Args:
geometry: A ladybug-geometry Polyface3D.
color: A ladybug Color object. If None, a default black color will be
used. (Default: None).
display_mode: Text to indicate the display mode (surface, wireframe, etc.).
Choose from the following. (Default: Surface).
* Surface
* SurfaceWithEdges
* Wireframe
* Points
Properties:
* geometry
* color
* display_mode
* vertices
* faces
* edges
* naked_edges
* internal_edges
* non_manifold_edges
* face_indices
* edge_indices
* edge_types
* min
* max
* center
* area
* volume
* is_solid
* user_data
"""
__slots__ = ()
def __init__(self, geometry, color=None, display_mode='Surface'):
"""Initialize base with shade object."""
assert isinstance(geometry, Polyface3D), '\
Expected ladybug_geometry Polyface3D. Got {}'.format(type(geometry))
_SingleColorModeBase3D.__init__(self, geometry, color, display_mode)
[docs]
@classmethod
def from_dict(cls, data):
"""Initialize a DisplayPolyface3D from a dictionary.
Args:
data: A dictionary representation of an DisplayPolyface3D object.
"""
assert data['type'] == 'DisplayPolyface3D', \
'Expected DisplayPolyface3D dictionary. Got {}.'.format(data['type'])
color = Color.from_dict(data['color']) if 'color' in data and data['color'] \
is not None else None
d_mode = data['display_mode'] if 'display_mode' in data and \
data['display_mode'] is not None else 'Surface'
geo = cls(Polyface3D.from_dict(data['geometry']), color, d_mode)
if 'user_data' in data and data['user_data'] is not None:
geo.user_data = data['user_data']
return geo
@property
def vertices(self):
"""Get a tuple of vertices in the polyface."""
return self._geometry.vertices
@property
def faces(self):
"""Get a tuple of all Face3D objects making up this polyface."""
return self._geometry.faces
@property
def edges(self):
"""Get a tuple of all edges in this polyface as LineSegment3D objects."""
return self._geometry.edges
@property
def naked_edges(self):
"""Get a tuple of all naked edges in this polyface as LineSegment3D objects."""
return self._geometry.naked_edges
@property
def internal_edges(self):
"""Get a tuple of all internal edges in this polyface as LineSegment3D objects.
"""
return self._geometry.internal_edges
@property
def non_manifold_edges(self):
"""Get a tuple of all non-manifold edges as LineSegment3D objects."""
return self._geometry.non_manifold_edges
@property
def face_indices(self):
"""Get a tuple of face tuples with integers corresponding to indices of vertices.
"""
return self._geometry.face_indices
@property
def edge_indices(self):
"""Get a tuple of edge tuples with integers corresponding to indices of vertices.
"""
return self._geometry.edge_indices
@property
def edge_types(self):
"""Get a tuple of integers for each edge that denotes the type of edge.
0 denotes a naked edge, 1 denotes an internal edge, and anything higher is a
non-manifold edge.
"""
return self._geometry.edge_types
@property
def min(self):
"""Get a Point3D for the minimum of the bounding box around the object."""
return self._geometry.min
@property
def max(self):
"""Get a Point3D for the maximum of the bounding box around the object."""
return self._geometry.max
@property
def center(self):
"""Get a Point3D for the center of the bounding box around the object."""
return self._geometry.center
@property
def area(self):
"""Get the area of the polyface."""
return self._geometry.area
@property
def volume(self):
"""Get the volume of the polyface."""
return self._geometry.volume
@property
def is_solid(self):
"""Get a boolean to note whether the polyface is solid (True) or is open (False).
"""
return self._geometry.is_solid
[docs]
def to_dict(self):
"""Return DisplayPolyface3D as a dictionary."""
base = {'type': 'DisplayPolyface3D'}
base['geometry'] = self._geometry.to_dict()
base['color'] = self.color.to_dict()
base['display_mode'] = self.display_mode
if self.user_data is not None:
base['user_data'] = self.user_data
return base
def __copy__(self):
new_g = DisplayPolyface3D(self.geometry, self.color, self.display_mode)
new_g._user_data = None if self.user_data is None else self.user_data.copy()
return new_g
def __repr__(self):
return 'DisplayPolyface3D: {}'.format(self.geometry)