示例#1
0
    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
示例#2
0
    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)
示例#3
0
 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
示例#4
0
 def extents(self):
     if not self.parts:
         return Extents()
     return sum([p.extents() for p in self.parts])