Source code for dragonfly_radiance.properties.context
# coding=utf-8
"""Context Shade Radiance Properties."""
from honeybee.shade import Shade
from honeybee_radiance.modifier import Modifier
from honeybee_radiance.properties.shade import ShadeRadianceProperties
from honeybee_radiance.properties.shademesh import ShadeMeshRadianceProperties
from honeybee_radiance.mutil import dict_to_modifier # imports all modifiers classes
from honeybee_radiance.lib.modifiers import generic_context
[docs]
class ContextShadeRadianceProperties(object):
"""Radiance Properties for Dragonfly ContextShade.
Args:
host_shade: A dragonfly_core ContextShade object that hosts these properties.
modifier: An optional Modifier object to set the reflectance and specularity
of the ContextShade. The default is a completely diffuse modifier
with 0.2 reflectance.
Properties:
* host
* modifier
* is_modifier_set_by_user
"""
__slots__ = ('_host', '_modifier')
def __init__(self, host_shade, modifier=None):
"""Initialize ContextShade radiance properties."""
self._host = host_shade
self.modifier = modifier
@property
def host(self):
"""Get the Shade object hosting these properties."""
return self._host
@property
def modifier(self):
"""Get or set a Modifier for the context shade."""
if self._modifier: # set by user
return self._modifier
else:
return generic_context
@modifier.setter
def modifier(self, value):
if value is not None:
assert isinstance(value, Modifier), \
'Expected Modifier. Got {}.'.format(type(value))
value.lock() # lock editing in case modifier has multiple references
self._modifier = value
@property
def is_modifier_set_by_user(self):
"""Boolean noting if modifier is user-set."""
return self._modifier is not None
[docs]
@classmethod
def from_dict(cls, data, host):
"""Create ContextShadeRadianceProperties from a dictionary.
Note that the dictionary must be a non-abridged version for this
classmethod to work.
Args:
data: A dictionary representation of ContextShadeRadianceProperties.
host: A ContextShade object that hosts these properties.
"""
assert data['type'] == 'ContextShadeRadianceProperties', \
'Expected ContextShadeRadianceProperties. Got {}.'.format(data['type'])
new_prop = cls(host)
if 'modifier' in data and data['modifier'] is not None:
new_prop.modifier = dict_to_modifier(data['modifier'])
return new_prop
[docs]
def apply_properties_from_dict(self, abridged_data, modifiers):
"""Apply properties from a ContextShadeRadiancePropertiesAbridged dictionary.
Args:
abridged_data: A ContextShadeRadiancePropertiesAbridged dictionary (typically
coming from a Model).
modifiers: A dictionary of modifiers with modifiers identifiers
as keys, which will be used to re-assign modifiers.
"""
if 'modifier' in abridged_data and abridged_data['modifier'] is not None:
self.modifier = modifiers[abridged_data['modifier']]
[docs]
def to_dict(self, abridged=False):
"""Return radiance properties as a dictionary.
Args:
abridged: Boolean to note whether the full dictionary describing the
object should be returned (False) or just an abridged version (True).
Default: False.
"""
base = {'radiance': {}}
base['radiance']['type'] = 'ContextShadeRadianceProperties' if not \
abridged else 'ContextShadeRadiancePropertiesAbridged'
if self._modifier is not None:
base['radiance']['modifier'] = self._modifier.identifier if abridged \
else self._modifier.to_dict()
return base
[docs]
def to_honeybee(self, new_host):
"""Get a honeybee version of this object.
Args:
new_host: A honeybee-core Shade or ShadeMesh object that will host
these properties.
"""
return ShadeRadianceProperties(new_host, self._modifier) \
if isinstance(new_host, Shade) else \
ShadeMeshRadianceProperties(new_host, self._modifier)
[docs]
def from_honeybee(self, hb_properties):
"""Transfer radiance attributes from a Honeybee Shade to Dragonfly ContextShade.
Args:
hb_properties: The ShadeRadianceProperties of the honeybee Shade
that is being translated to a Dragonfly ContextShade.
"""
self._modifier = hb_properties._modifier
[docs]
def duplicate(self, new_host=None):
"""Get a copy of this object.
new_host: A new ContextShade object that hosts these properties.
If None, the properties will be duplicated with the same host.
"""
_host = new_host or self._host
return ContextShadeRadianceProperties(_host, self._modifier)
[docs]
def ToString(self):
return self.__repr__()
def __repr__(self):
return 'Context Shade Radiance Properties: {}'.format(self.host.identifier)