Source code for honeybee_radiance_command.pcomb
"""pcomb command."""
from .options.pcomb import PcombOptions
from ._command import Command
import honeybee_radiance_command._exception as exceptions
import honeybee_radiance_command._typing as typing
[docs]
class Pcomb(Command):
"""Pcomb command.
Pcomb combines equal-sized RADIANCE pictures and sends the result to the
standard output. By default, the result is just a linear combination of the
input pictures.
Args:
options: Command options. It will be set to Radiance default values if not
provided by user.
output: File path to the output file (Default: None).
input: A list of paths to radiance generated hdr images. (Default: None).
Properties:
* options
* output
* input
"""
__slots__ = ('_input')
def __init__(self, options=None, output=None, input=None):
"""Initialize Command."""
Command.__init__(self, output=output)
self.input = input
self.options = options
@property
def options(self):
"""pcomb options."""
return self._options
@options.setter
def options(self, value):
if not value:
value = PcombOptions()
if not isinstance(value, PcombOptions):
raise ValueError('Expected PcombOptions not {}'.format(type(value)))
self._options = value
@property
def input(self):
"""A string of joined paths to the hdr files."""
return self._input
@input.setter
def input(self, value):
if not value:
value = []
elif not isinstance(value, (list, tuple)):
value = [value]
for image in value:
if image[-4:].lower() not in ('.hdr', '.pic', '.unf'):
raise ValueError(
'A list of .hdr files required. Instead got %s.' % (value)
)
self._input = ' '.join(typing.normpath(path) for path in value)
[docs]
def to_radiance(self, stdin_input=False):
"""Command in Radiance format.
Args:
stdin_input: A boolean that indicates if the input for this command
comes from stdin. This is for instance the case when you pipe the input
from another command (default: False).
"""
self.validate(stdin_input)
command_parts = [self.command, self.options.to_radiance()]
cmd = ' '.join(command_parts)
if not stdin_input and self.input:
cmd = ' '.join((cmd, self.input))
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, stdin_input=False):
Command.validate(self)
if not stdin_input and not self.input:
raise exceptions.MissingArgumentError(self.command, 'input')