class TransformMixin(object): """Mixin class for transformation support. Adds the _transform and _transformmode attributes to the class.""" transform = None def __init__(self): self._reset() def _reset(self): self.transform = Transform() self._transformmode = 'center' def _get_transformmode(self): return self._transformmode def _set_transformmode(self, mode): self._transformmode = mode transformmode = property(_get_transformmode, _set_transformmode) def translate(self, x, y): self.transform.translate(x, y) def reset(self): self.transform = Transform() def rotate(self, degrees=0, radians=0): if self._transformmode == 'corner': deltax, deltay = self._transform.transformPoint((0, 0)) elif self._transformmode == 'center': deltax, deltay = self._transform.transformPoint(self.center) if degrees: C = math.cos((math.pi/180.0)*degrees) S = math.sin((math.pi/180.0)*degrees) self.transform *= Transform(C, S, -S, C, deltax-(C*deltax)+(S*deltay),deltay-(S*deltax)-(C*deltay)) def translate(self, x=0, y=0): self.transform *= Transform(dx=x, dy=y) def scale(self, x=1, y=None): self.transform.scale(x,y) def skew(self, x=0, y=0): self.transform.skew(x,y) def point(self, point): return self.transform.transformPoint(point) def matrix_with_center(self): pass
def reset(self): self.transform = Transform()
def _reset(self): self.transform = Transform() self._transformmode = 'center'