def __init__(self, surface, *al, **ad): self._renderer = self._dwg = surface self._bounds = Extents() self._padding = PADDING self._stack = [] self._m = Affine.translation(0, 0) self._xy = (0, 0) self._mxy = self._m * self._xy self._lw = 0 self._rgb = (0, 0, 0) self._ff = "sans-serif" self._fs = 10 self._last_path = None
def _adjust_coordinates(self): extents = self.extents() extents.xmin -= PADDING extents.ymin -= PADDING extents.xmax += PADDING extents.ymax += PADDING m = Affine.translation(-extents.xmin, -extents.ymin) if self.invert_y: m = Affine.scale(self.scale, -self.scale) * m m = Affine.translation(0, self.scale*extents.height) * m else: m = Affine.scale(self.scale, self.scale) * m self.transform(m, self.invert_y) return Extents(0, 0, extents.width * self.scale, extents.height * self.scale)
def extents(self): e = Extents() for p in self.path: e.add(*p[1:3]) if p[0] == 'T': m, text, params = p[3:] h = params['fs'] l = len(text) * h * 0.7 align = params.get('align', 'left') start, end = { 'left': (0, 1), 'middle': (-0.5, 0.5), 'end': (-1, 0), }[align] for x in (start * l, end * l): for y in (0, h): x_, y_ = m * (x, y) e.add(x_, y_) return e
def extents(self): if not self.parts: return Extents() return sum([p.extents() for p in self.parts])