From 8e1c05cf731c3cce8ece11013f2b32f1e1fe1a45 Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Mon, 9 Nov 2020 22:05:56 -0800 Subject: [PATCH] add mirror2d() to Rotatable --- masque/shapes/text.py | 2 +- masque/subpattern.py | 2 +- masque/traits/mirrorable.py | 18 +++++++++++++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/masque/shapes/text.py b/masque/shapes/text.py index 07cc1a7..d6cb3ac 100644 --- a/masque/shapes/text.py +++ b/masque/shapes/text.py @@ -121,7 +121,7 @@ class Text(RotatableImpl, Shape, metaclass=AutoSlots): # Move these polygons to the right of the previous letter for xys in raw_polys: poly = Polygon(xys, dose=self.dose, layer=self.layer) - [poly.mirror(ax) for ax, do in enumerate(self.mirrored) if do] + poly.mirror2d(self.mirrored) poly.scale_by(self.height) poly.offset = self.offset + [total_advance, 0] poly.rotate_around(self.offset, self.rotation) diff --git a/masque/subpattern.py b/masque/subpattern.py index 1d5fb41..3913b33 100644 --- a/masque/subpattern.py +++ b/masque/subpattern.py @@ -138,7 +138,7 @@ class SubPattern(PositionableImpl, DoseableImpl, RotatableImpl, ScalableImpl, Mi assert(self.pattern is not None) pattern = self.pattern.deepcopy().deepunlock() pattern.scale_by(self.scale) - [pattern.mirror(ax) for ax, do in enumerate(self.mirrored) if do] + pattern.mirror2d(self.mirrored) pattern.rotate_around((0.0, 0.0), self.rotation) pattern.translate_elements(self.offset) pattern.scale_element_doses(self.dose) diff --git a/masque/traits/mirrorable.py b/masque/traits/mirrorable.py index 8fb5d4b..6990e4c 100644 --- a/masque/traits/mirrorable.py +++ b/masque/traits/mirrorable.py @@ -1,4 +1,4 @@ -from typing import TypeVar +from typing import TypeVar, Tuple from abc import ABCMeta, abstractmethod @@ -28,6 +28,22 @@ class Mirrorable(metaclass=ABCMeta): """ pass + def mirror2d(self: T, axes: Tuple[bool, bool]) -> T: + """ + Optionally mirror the entity across both axes + + Args: + axes: (mirror_across_x, mirror_across_y) + + Returns: + self + """ + if axes[0]: + self.mirror(0) + if axes[1]: + self.mirror(1) + return self + #class MirrorableImpl(Mirrorable, metaclass=ABCMeta): # """