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()
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()
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()
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()