Example #1
0
    def _render_linearring(self, f, data, pxlsz, ss):
        c = self._slatectx
        c.set_operator(cr.OPERATOR_OVER)
        ss.style_stroke(c, data, pxlsz)
        c.move_to(*self.imgcoords(*f.coords[0]))
        for x, y in f.coords[1:]:
            c.line_to(self.imgcoords(x,y))
        c.close_path()
        c.stroke()
        
        label = ss.get_label(data)
        if label and len(label) > 0 and ss.style_label(c, data, pxlsz):
            xoff, yoff = ss.get_labeloffsets(data, pxlsz)
            c.save()
            
            c.move_to(0,0)
            anchor = self.imgcoords(f.interpolate(xoff, normalized=True))
            xbear, ybear, width, height, _0, _1 = cr.text_extents(label)
            width = width * pxlsz[0]
            adv = self.imgcoords(*f.interpolate(f.length*xoff + width))
            angle = math.arctan((adv[1] - anchor[1]) / (adv[0] - anchor[0]))
            c.translate(-yoff*height)
            c.rotate(angle)
            c.translate(*anchor)
            if ss.style_labelhalo(c, data, pxlsz):
                c.text_path(label)
                c.stroke()
            
            c.text_path(label)
            if ss.style_labelfill(c, data, pxlsz):
                c.fill_preserve()
            if ss.style_labelstroke(c, data, pxlsz):
                c.stroke()

            c.restore()
Example #2
0
    def _render_linearring(self, f, data, pxlsz, ss):
        c = self._slatectx
        c.set_operator(cr.OPERATOR_OVER)
        ss.style_stroke(c, data, pxlsz)
        c.move_to(*self.imgcoords(*f.coords[0]))
        for x, y in f.coords[1:]:
            c.line_to(self.imgcoords(x, y))
        c.close_path()
        c.stroke()

        label = ss.get_label(data)
        if label and len(label) > 0 and ss.style_label(c, data, pxlsz):
            xoff, yoff = ss.get_labeloffsets(data, pxlsz)
            c.save()

            c.move_to(0, 0)
            anchor = self.imgcoords(f.interpolate(xoff, normalized=True))
            xbear, ybear, width, height, _0, _1 = cr.text_extents(label)
            width = width * pxlsz[0]
            adv = self.imgcoords(*f.interpolate(f.length * xoff + width))
            angle = math.arctan((adv[1] - anchor[1]) / (adv[0] - anchor[0]))
            c.translate(-yoff * height)
            c.rotate(angle)
            c.translate(*anchor)
            if ss.style_labelhalo(c, data, pxlsz):
                c.text_path(label)
                c.stroke()

            c.text_path(label)
            if ss.style_labelfill(c, data, pxlsz):
                c.fill_preserve()
            if ss.style_labelstroke(c, data, pxlsz):
                c.stroke()

            c.restore()
Example #3
0
    def _render_polygon(self, f, data, pxlsz, ss):
        c = self._slatectx
        c.set_operator(cr.OPERATOR_OVER)
        c.move_to(*self.imgcoords(*f.coords[0]))
        for x, y in f.exterior.coords[1:]:
            c.line_to(self.imgcoords(x,y))
        c.close_path()

        for interior in f.interiors:
            c.new_sub_path()
            c.move_to(*self.imgcoords(*f.coords[0]))
            for x, y in f.exterior.coords[1:]:
                c.line_to(self.imgcoords(x,y))
            c.close_path()

        if ss.style_fill(c, data, pxlsz):
            cr.fill_preserve()
        if ss.style_stroke(c, data, pxlsz):
            cr.stroke()
        
        label = ss.get_label(data)
        if label and len(label) > 0 and ss.style_label(c, data, pxlsz):
            anchor = self.imgcoords(*f.representative_point())
            xbear, ybear, width, height, _0, _1 = cr.text_extents(label)
            width = width * pxlsz[0]
            xoff = -(width+xbear) / 2.0
            yoff = (height-ybear) / 2.0
            c.move_to(anchor[0]+xoff, anchor[1]+yoff)

            if ss.style_labelhalo(c, data, pxlsz):
                c.text_path(label)
                c.stroke()
            
            c.text_path(label)
            if ss.style_labelfill(c, data, pxlsz):
                c.fill_preserve()
            if ss.style_labelstroke(c, data, pxlsz):
                c.stroke()
Example #4
0
    def _render_polygon(self, f, data, pxlsz, ss):
        c = self._slatectx
        c.set_operator(cr.OPERATOR_OVER)
        c.move_to(*self.imgcoords(*f.coords[0]))
        for x, y in f.exterior.coords[1:]:
            c.line_to(self.imgcoords(x, y))
        c.close_path()

        for interior in f.interiors:
            c.new_sub_path()
            c.move_to(*self.imgcoords(*f.coords[0]))
            for x, y in f.exterior.coords[1:]:
                c.line_to(self.imgcoords(x, y))
            c.close_path()

        if ss.style_fill(c, data, pxlsz):
            cr.fill_preserve()
        if ss.style_stroke(c, data, pxlsz):
            cr.stroke()

        label = ss.get_label(data)
        if label and len(label) > 0 and ss.style_label(c, data, pxlsz):
            anchor = self.imgcoords(*f.representative_point())
            xbear, ybear, width, height, _0, _1 = cr.text_extents(label)
            width = width * pxlsz[0]
            xoff = -(width + xbear) / 2.0
            yoff = (height - ybear) / 2.0
            c.move_to(anchor[0] + xoff, anchor[1] + yoff)

            if ss.style_labelhalo(c, data, pxlsz):
                c.text_path(label)
                c.stroke()

            c.text_path(label)
            if ss.style_labelfill(c, data, pxlsz):
                c.fill_preserve()
            if ss.style_labelstroke(c, data, pxlsz):
                c.stroke()