Source code for raytraverse.renderer.sprenderer

# -*- coding: utf-8 -*-
# Copyright (c) 2020 Stephen Wasilewski, HSLU and EPFL
# =======================================================================
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# =======================================================================
from io import StringIO

import numpy as np

from raytools import io
from clasp.script_tools import pipeline


[docs] class SpRenderer(object): """sub-process renderer for calling external executables""" args = None scene = None name = "rtrace" defaultargs = "" _args = None nproc = None def __init__(self, rayargs=None, scene=None, nproc=None, default_args=True): if default_args: if rayargs is None: rayargs = self.get_default_args() else: rayargs = f"{self.get_default_args()} {rayargs}" if rayargs is not None and scene is not None: self.set_args(rayargs, nproc) self.load_scene(scene) @classmethod def __call__(cls, rays): s = StringIO() np.savetxt(s, rays) out = pipeline([f"{cls.name} -n {cls.nproc} {cls.args} {cls.scene}"], inp=s.getvalue()) return out
[docs] def run(self, *args, **kwargs): """alias for call, for consistency with SamplerPt classes for nested dimensions of evaluation""" return self(args[0])
[docs] @classmethod def get_default_args(cls): return cls.defaultargs
[docs] @classmethod def reset(cls): """reset engine instance and unset associated attributees""" cls.scene = None cls.args = None cls._args = None
[docs] @classmethod def set_args(cls, args, nproc=None): """prepare arguments to call engine instance initialization Parameters ---------- args: str rendering options nproc: int, optional cpu limit """ if nproc is None: nproc = cls.nproc nproc = io.get_nproc(nproc) if "-ab 0" in args: nproc = 1 cls.nproc = nproc cls.args = args
[docs] @classmethod def load_scene(cls, scene): """load octree file to engine instance Parameters ---------- scene: str path to octree file Raises ------ ValueError: can only be called after set_args, otherwise engine instance will abort. """ cls.scene = scene