Source code for fibomat.linalg.boundingboxes.boundingbox

from __future__ import annotations
from typing import Iterable, Any

import numpy as np

from fibomat.linalg.boundingboxes.boundingbox_base import BoundingBoxBase
from fibomat.linalg.vectors import Vector, VectorLike
from fibomat.units import U_


[docs]class BoundingBox(BoundingBoxBase[Vector, float]): _VectorClass = Vector
[docs] @classmethod def from_points(cls, points: Iterable[VectorLike]) -> BoundingBox: """ Constructs rectangular bounding box containing all `points` Args: points (VectorArrayLike): points which should be included in bounding box Returns: (BoundingBox): new `BoundingBox` """ points = np.asarray(points) if len(points) == 0 or points.ndim != 2 or points.shape[1] != 2: raise ValueError('points must not be empty and contain vector compatible values.') return BoundingBox(np.min(points, axis=0), np.max(points, axis=0))
def __mul__(self, other: Any): if isinstance(other, U_): from .dim_boundingbox import DimBoundingBox return DimBoundingBox(self._lower_left * other, self._upper_right * other) else: raise NotImplementedError