Source code for fibomat.shapes.spot

"""Provides the :class:`Spot` class."""
from __future__ import annotations
from typing import Optional

from fibomat.linalg import VectorLike, Vector, BoundingBox
from fibomat.shapes import shape


[docs]class Spot(shape.Shape): """0-dim spot."""
[docs] def __init__(self, position: Optional[VectorLike] = None, *, description: Optional[str] = None): """ Args: position (VectorLike, optional): position of the spot, default to (0, 0) description (str, optional): description """ super().__init__(description) self._position: Vector = Vector(position) if position is not None else Vector()
def __repr__(self) -> str: return '{}(position={!r})'.format( self.__class__.__name__, self._position) @property def position(self) -> Vector: """Position of the spot. Same as :attr:`center` Access: get Returns: Vector """ return self._position @property def bounding_box(self) -> BoundingBox: return BoundingBox(self._position, self._position) @property def is_closed(self) -> bool: raise NotImplementedError @property def center(self) -> Vector: return self._position def _impl_translate(self, trans_vec: VectorLike) -> None: self._position += trans_vec def _impl_rotate(self, theta: float) -> None: self._position = self._position.rotated(theta) def _impl_scale(self, fac: float) -> None: self._position *= fac def _impl_mirror(self, mirror_axis: VectorLike) -> None: self._position = self._position.mirrored(mirror_axis)