Source code for fibomat.pattern
"""
Provides the :class:`Pattern` class.
"""
# pylint: disable=protected-access
from __future__ import annotations
from typing import Generic, TypeVar, Optional, Dict
from fibomat.mill import MillBase
from fibomat.linalg import DimTransformable, DimVector, DimVectorLike, DimBoundingBox
from fibomat.raster_styles import RasterStyle
from fibomat.shapes import DimShape
DimTransformableT = TypeVar('DimTransformableT', bound=DimTransformable)
[docs]class Pattern(DimTransformable, Generic[DimTransformableT]):
"""
Class is used to collect a shape with a length unit, mill settings and optional settings.
"""
[docs] def __init__(
self,
dim_shape: DimShape,
mill: MillBase,
raster_style: RasterStyle,
*,
description: Optional[str] = None,
**kwargs
):
"""
Args:
dim_shape (Tuple[ShapeType, units.LengthUnit]):
tuple of a shape type and its length unit. ShapeType can be any transformable, e.g. a layout.Group or
shapes.Line, ...
mill (Mill): mill object
**kwargs: additional args
"""
super().__init__(description=description)
self._dim_shape = dim_shape
self._mill = mill
self._raster_style = raster_style
self._kwargs = kwargs
@property
def dim_shape(self) -> DimShape:
"""Dimensioned shape of the pattern.
Access:
get
Returns:
DimShape
"""
return self._dim_shape
@property
def mill(self) -> MillBase:
"""Mill of the pattern.
Access:
get
Returns:
MillBase
"""
return self._mill
@property
def raster_style(self) -> RasterStyle:
"""Raster style of the pattern.
Access:
get
Returns:
RasterStyle
"""
return self._raster_style
@property
def kwargs(self) -> Dict:
"""Additional passed arguments.
Access:
get
Returns:
Dict
"""
return self._kwargs
@property
def bounding_box(self) -> DimBoundingBox:
return self.dim_shape.bounding_box
@property
def center(self) -> DimVector:
return self._dim_shape.center
def _impl_translate(self, trans_vec: DimVectorLike) -> None:
self._dim_shape._impl_translate(DimVector(trans_vec))
def _impl_rotate(self, theta: float) -> None:
self._dim_shape._impl_rotate(theta)
def _impl_scale(self, fac: float) -> None:
self._dim_shape._impl_scale(fac)
def _impl_mirror(self, mirror_axis: DimVectorLike) -> None:
self._dim_shape._impl_mirror(DimVector(mirror_axis))