Skip to content

Commit

Permalink
feat(Model, Modifier): Add properties to model.py and mirror to modif…
Browse files Browse the repository at this point in the history
…ier.py (#96)

* feat(Model): Add Radiance properties to model.py

* feat(Radiance): Add Mirror modifier schema.

* feat(Modifiers): Add import for union modifiers constant.

* feat(Modifiers): Delete str version of unioned modifiers constant.
  • Loading branch information
saeranv committed Apr 22, 2020
1 parent 4ce9e62 commit 84bfea4
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 20 deletions.
29 changes: 29 additions & 0 deletions honeybee_schema/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@
DoorEnergyPropertiesAbridged, ApertureEnergyPropertiesAbridged, \
FaceEnergyPropertiesAbridged, RoomEnergyPropertiesAbridged, \
ModelEnergyProperties
from .radiance.properties import ShadeRadiancePropertiesAbridged, \
DoorRadiancePropertiesAbridged, ApertureRadiancePropertiesAbridged, \
FaceRadiancePropertiesAbridged, RoomRadiancePropertiesAbridged, \
ModelRadianceProperties


class Plane(NoExtraBaseModel):
Expand Down Expand Up @@ -73,6 +77,10 @@ class ShadePropertiesAbridged(BaseModel):
default=None
)

radiance: ShadeRadiancePropertiesAbridged = Field(
default=None
)


class Shade(IDdBaseModel):

Expand All @@ -98,6 +106,10 @@ class DoorPropertiesAbridged(BaseModel):
default=None
)

radiance: DoorRadiancePropertiesAbridged = Field(
default=None
)


class Door(IDdBaseModel):

Expand Down Expand Up @@ -140,6 +152,7 @@ def suface_bc_objects(cls, v):
'(Radiance, EnergyPlus).'
)


class AperturePropertiesAbridged(BaseModel):

type: constr(regex='^AperturePropertiesAbridged$') = 'AperturePropertiesAbridged'
Expand All @@ -148,6 +161,10 @@ class AperturePropertiesAbridged(BaseModel):
default=None
)

radiance: ApertureRadiancePropertiesAbridged = Field(
default=None
)


class Aperture(IDdBaseModel):

Expand Down Expand Up @@ -199,6 +216,10 @@ class FacePropertiesAbridged(BaseModel):
default=None
)

radiance: FaceRadiancePropertiesAbridged = Field(
default=None
)


class FaceType(str, Enum):

Expand Down Expand Up @@ -275,6 +296,10 @@ class RoomPropertiesAbridged(BaseModel):
default=None
)

radiance: RoomRadiancePropertiesAbridged = Field(
default=None
)


class Room(IDdBaseModel):

Expand Down Expand Up @@ -330,6 +355,10 @@ class ModelProperties(BaseModel):
default=None
)

radiance: ModelRadianceProperties = Field(
default=None
)


class Model(IDdBaseModel):

Expand Down
56 changes: 48 additions & 8 deletions honeybee_schema/radiance/modifier.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Modfier Schema"""
from __future__ import annotations
from pydantic import Field, constr, validator, root_validator
from typing import List, Union, Optional

from ._base import IDdRadianceBaseModel, BaseModel


Expand All @@ -14,16 +14,12 @@ class Void(BaseModel):
class ModifierBase(IDdRadianceBaseModel):
"""Base class for Radiance Modifiers"""

modifier: Union[
Void, 'Plastic', 'Glass', 'BSDF', 'Glow', 'Light', 'Trans'
] = Field(
modifier: _REFERENCE_UNION_MODIFIERS = Field(
default=None,
description='Material modifier (default: Void).'
)

dependencies: List[
Union[Void, 'Plastic', 'Glass', 'BSDF', 'Glow', 'Light', 'Trans']
] = Field(
dependencies: List[_REFERENCE_UNION_MODIFIERS] = Field(
default=[],
description='List of modifiers that this modifier depends on. '
'This argument is only useful for defining advanced modifiers '
Expand All @@ -32,6 +28,46 @@ class ModifierBase(IDdRadianceBaseModel):
)


class Mirror(ModifierBase):
"""Radiance mirror material."""

type: constr(regex='^mirror$') = 'mirror'

r_reflectance: float = Field(
default=1,
ge=0,
le=1,
description='A value between 0 and 1 for the red channel reflectance '
'(default: 1).'
)

g_reflectance: float = Field(
default=1,
ge=0,
le=1,
description='A value between 0 and 1 for the green channel reflectance '
'(default: 1).'
)

b_reflectance: float = Field(
default=1,
ge=0,
le=1,
description='A value between 0 and 1 for the blue channel reflectance '
'(default: 1).'
)

alternate_material: _REFERENCE_UNION_MODIFIERS = Field(
default=None,
description='An optional material that may be used like the illum type to '
'specify a different material to be used for shading non-source rays. '
'If None, this will keep the alternat_material as mirror. If this alternate '
'material is given as Void, then the mirror surface will be invisible. '
'Using Void is only appropriate if the surface hides other (more '
'detailed) geometry with the same overall reflectance (default: None).'
)


class Plastic(ModifierBase):
"""Radiance plastic material."""

Expand Down Expand Up @@ -284,14 +320,18 @@ class Glow(Light):
'to scene illumination.'
)

# Unioned Modifier Schema objects defined for type reference
_REFERENCE_UNION_MODIFIERS = Union[Plastic, Glass, BSDF, Glow, Light, Trans, Void,
Mirror]

# Required for self.referencing model
# see https://pydantic-docs.helpmanual.io/#self-referencing-models
ModifierBase.update_forward_refs()
Mirror.update_forward_refs()
Plastic.update_forward_refs()
Glass.update_forward_refs()
BSDF.update_forward_refs()
Glow.update_forward_refs()
Light.update_forward_refs()
Trans.update_forward_refs()
Void.update_forward_refs()

7 changes: 1 addition & 6 deletions honeybee_schema/radiance/modifierset.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,8 @@
"""ModifierSet Schema"""
from pydantic import Field, constr
from typing import List, Union, Optional

from .._base import NoExtraBaseModel
from ._base import IDdRadianceBaseModel
from .modifier import Plastic, Glass, BSDF, Glow, Light, Trans, Void

# Unioned Modifier Schema objects defined for type reference
_REFERENCE_UNION_MODIFIERS = Union[Plastic, Glass, BSDF, Glow, Light, Trans, Void]
from .modifier import _REFERENCE_UNION_MODIFIERS


class BaseModifierSetAbridged(NoExtraBaseModel):
Expand Down
9 changes: 3 additions & 6 deletions honeybee_schema/radiance/properties.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
"""Properties Schema"""
from pydantic import Field, constr, validator, root_validator
from typing import List, Union, Optional
from pydantic import Field, constr
from typing import List, Union

from .modifier import Plastic, Glass, BSDF, Glow, Light, Trans, Void
from .modifier import _REFERENCE_UNION_MODIFIERS
from .modifierset import ModifierSet, ModifierSetAbridged
from .._base import NoExtraBaseModel

# Unioned Modifier Schema objects defined for type reference
_REFERENCE_UNION_MODIFIERS = Union[Plastic, Glass, BSDF, Glow, Light, Trans, Void]


class _PropertiesBaseAbridged(NoExtraBaseModel):
"""Base class of Abridged Radiance Properties."""
Expand Down

0 comments on commit 84bfea4

Please sign in to comment.