Source code for honeybee_radiance_command.ies2rad
"""ies2rad command."""
from .options.ies2rad import Ies2radOptions
from ._command import Command
import honeybee_radiance_command._exception as exceptions
import honeybee_radiance_command._typing as typing
[docs]
class Ies2rad(Command):
"""Ies2rad command.
Ies2rad converts one or more IES LM-63 photometric files into equivalent
Radiance scene descriptions. The generated luminaires are centered at
the origin and oriented along the negative Z-axis.
Args:
options: Ies2rad options. Defaults to Radiance defaults if unspecified.
output: Path to output file (used only when piping or redirecting).
ies: Path or list of paths to input IES files.
Properties:
* options
* output
* ies
"""
__slots__ = ('_ies',)
def __init__(self, options=None, output=None, ies=None):
"""Initialize Ies2rad command."""
Command.__init__(self, output=output)
self.ies = ies
self.options = options
@property
def options(self):
"""Ies2rad options."""
return self._options
@options.setter
def options(self, value):
if value is None:
value = Ies2radOptions()
if not isinstance(value, Ies2radOptions):
raise ValueError('Expected Ies2radOptions not {}'.format(type(value)))
self._options = value
@property
def ies(self):
"""Input IES file(s)."""
return self._ies
@ies.setter
def ies(self, value):
if value is None:
self._ies = None
elif isinstance(value, (list, tuple)):
self._ies = [typing.normpath(v) for v in value]
else:
self._ies = [typing.normpath(value)]
[docs]
def to_radiance(self):
"""Command in Radiance format."""
self.validate()
ies_files = ' '.join(self.ies)
command_parts = [
self.command,
self.options.to_radiance(),
ies_files
]
cmd = ' '.join(command_parts)
if self.pipe_to:
cmd = ' | '.join((cmd, self.pipe_to.to_radiance(stdin_input=True)))
elif self.output:
cmd = ' > '.join((cmd, self.output))
return ' '.join(cmd.split())
[docs]
def validate(self):
"""Validate command arguments."""
Command.validate(self)
if not self.ies:
raise exceptions.MissingArgumentError(self.command, 'ies')
[docs]
def before_run(self):
import os
if self.options.l.is_set:
libdir = os.path.abspath(self.options.l.value)
else:
libdir = os.getcwd()
if self.options.p.is_set:
output_dir = os.path.join(libdir, self.options.p.value)
else:
output_dir = libdir
if not os.path.exists(output_dir):
os.makedirs(output_dir)