Source code for fibomat.raster_styles.zero_d.prerasterized
from typing import Tuple, Sequence, Union
import numpy as np
from fibomat.rasterizedpattern import RasterizedPattern
from fibomat.shapes.rasterizedpoints import RasterizedPoints
from fibomat.raster_styles.rasterstyle import RasterStyle
from fibomat.units import LengthUnit, TimeUnit, scale_to, scale_factor
from fibomat.shapes import Shape, DimShape
from fibomat.mill import Mill
[docs]class PreRasterized(RasterStyle):
[docs] def __init__(self):
pass
def __repr__(self):
return '{}()'.format(self.__class__.__name__)
@property
def dimension(self) -> int:
return 0
@staticmethod
def _prepare_and_scale(
dim_shape: DimShape,
mill: Mill,
out_length_unit: LengthUnit,
out_time_unit: TimeUnit
) -> RasterizedPattern:
# dim_shape = DimObj.create(dim_shape)
# if isinstance(dim_shape, RasterizedPattern):
# rasterized_pattern = dim_shape
#
# if rasterized_pattern.length_unit != out_length_unit:
# rasterized_pattern._dwell_points[:, :2] *= scale_factor(out_length_unit, rasterized_pattern.length_unit)
#
# if rasterized_pattern.time_unit != out_time_unit:
# rasterized_pattern._dwell_points[:, 2] *= scale_factor(out_time_unit, rasterized_pattern.time_unit)
#
# return rasterized_pattern
if isinstance(dim_shape.shape, RasterizedPoints):
points = np.array(dim_shape.shape.dwell_points)
points[:, :2] *= scale_factor(out_length_unit, dim_shape.unit)
points[:, 2] *= scale_to(out_time_unit, mill.dwell_time)
if mill.repeats != 1:
return RasterizedPattern(np.concatenate([points]*mill.repeats), out_length_unit, out_time_unit)
else:
return RasterizedPattern(points, out_length_unit, out_time_unit)
else:
raise TypeError('Shape must be of type RasterizedPoints or RasterizedPattern for PreRasterized style')
[docs] def rasterize(
self,
dim_shape: DimShape,
mill: Mill,
out_length_unit: LengthUnit,
out_time_unit: TimeUnit
) -> RasterizedPattern:
return self._prepare_and_scale(dim_shape, mill, out_length_unit, out_time_unit)