Source code for eradiate.scenes.surface._core

from __future__ import annotations

from abc import ABC, abstractmethod

import attrs

from ..core import CompositeSceneElement, NodeSceneElement
from ..._factory import Factory
from ...attrs import documented, get_doc, parse_docs

surface_factory = Factory()
surface_factory.register_lazy_batch(
    [
        ("_basic.BasicSurface", "basic", {}),
        ("_central_patch.CentralPatchSurface", "central_patch", {}),
        ("_dem.DEMSurface", "dem", {}),
    ],
    cls_prefix="eradiate.scenes.surface",
)


[docs]@parse_docs @attrs.define(eq=False, slots=False) class Surface(CompositeSceneElement, ABC): """ An abstract base class defining common facilities for all surfaces. All scene elements deriving from this interface are composite and cannot be turned into a kernel scene instance on their own: they must be owned by a container which take care of expanding them. Notes ----- * This class is to be used as a mixin. """ id: str | None = documented( attrs.field( default="surface", validator=attrs.validators.optional(attrs.validators.instance_of(str)), ), doc=get_doc(NodeSceneElement, "id", "doc"), type=get_doc(NodeSceneElement, "id", "type"), init_type=get_doc(NodeSceneElement, "id", "init_type"), default='"surface"', ) @property @abstractmethod def _template_bsdfs(self) -> dict: pass @property @abstractmethod def _template_shapes(self) -> dict: pass @property def template(self) -> dict: # Inherit docstring return {**self._template_bsdfs, **self._template_shapes} @property @abstractmethod def _params_bsdfs(self) -> dict: pass @property @abstractmethod def _params_shapes(self) -> dict: pass @property def params(self) -> dict: # Inherit docstring return {**self._params_bsdfs, **self._params_shapes}