def __init__(self, width, height, dpi): if __debug__: verbose.report('RendererAgg.__init__', 'debug-annoying') self.dpi = dpi self.width = width self.height = height self._renderer = _RendererAgg(int(width), int(height), dpi.get(), debug=False) self.draw_polygon = self._renderer.draw_polygon self.draw_rectangle = self._renderer.draw_rectangle self.draw_path = self._renderer.draw_path self.draw_lines = self._renderer.draw_lines self.draw_markers = self._renderer.draw_markers self.draw_image = self._renderer.draw_image self.draw_line_collection = self._renderer.draw_line_collection self.draw_quad_mesh = self._renderer.draw_quad_mesh self.draw_poly_collection = self._renderer.draw_poly_collection self.draw_regpoly_collection = self._renderer.draw_regpoly_collection self.copy_from_bbox = self._renderer.copy_from_bbox self.restore_region = self._renderer.restore_region self.texmanager = TexManager() self.bbox = lbwh_to_bbox(0, 0, self.width, self.height)
def pick(self, x, y, epsilon=5): """ Return the artist at location x,y with an error tolerance epsilon (in pixels) """ clickBBox = lbwh_to_bbox(x - epsilon / 2, y - epsilon / 2, epsilon, epsilon) draw_bbox(clickBBox, self.renderer) def over_text(t): bbox = t.get_window_extent(self.renderer) return clickBBox.overlaps(bbox) def over_line(line): # can't use the line bbox because it covers the entire extent # of the line trans = line.get_transform() xdata, ydata = trans.numerix_x_y(line.get_xdata(), line.get_ydata()) distances = sqrt((x - xdata) ** 2 + (y - ydata) ** 2) return amin(distances) < epsilon for ax in self.figure.axes: for line in ax.get_lines(): if over_line(line): self.select_line(line) return text = ax.get_xticklabels() text.extend(ax.get_yticklabels()) for t in text: if over_text(t): self.select_text(t) return
def __init__(self, width, height, dpi): if __debug__: verbose.report("RendererAgg.__init__", "debug-annoying") RendererBase.__init__(self) self.dpi = dpi self.width = width self.height = height if __debug__: verbose.report( "RendererAgg.__init__ width=%s, \ height=%s" % (width, height), "debug-annoying", ) self._renderer = _RendererAgg(int(width), int(height), dpi.get(), debug=False) if __debug__: verbose.report("RendererAgg.__init__ _RendererAgg done", "debug-annoying") self.draw_polygon = self._renderer.draw_polygon self.draw_rectangle = self._renderer.draw_rectangle self.draw_path = self._renderer.draw_path self.draw_lines = self._renderer.draw_lines self.draw_markers = self._renderer.draw_markers self.draw_image = self._renderer.draw_image self.draw_line_collection = self._renderer.draw_line_collection self.draw_quad_mesh = self._renderer.draw_quad_mesh self.draw_poly_collection = self._renderer.draw_poly_collection self.draw_regpoly_collection = self._renderer.draw_regpoly_collection self.copy_from_bbox = self._renderer.copy_from_bbox self.restore_region = self._renderer.restore_region self.mathtext_parser = MathTextParser("Agg") self.bbox = lbwh_to_bbox(0, 0, self.width, self.height) if __debug__: verbose.report("RendererAgg.__init__ done", "debug-annoying")
def __init__(self, width, height, dpi): if __debug__: verbose.report('RendererAgg.__init__', 'debug-annoying') self.dpi = dpi self.width = width self.height = height if __debug__: verbose.report('RendererAgg.__init__ width=%s, height=%s'%(width, height), 'debug-annoying') self._renderer = _RendererAgg(int(width), int(height), dpi.get(), debug=False) if __debug__: verbose.report('RendererAgg.__init__ _RendererAgg done', 'debug-annoying') self.draw_polygon = self._renderer.draw_polygon self.draw_rectangle = self._renderer.draw_rectangle self.draw_path = self._renderer.draw_path self.draw_lines = self._renderer.draw_lines self.draw_markers = self._renderer.draw_markers self.draw_image = self._renderer.draw_image self.draw_line_collection = self._renderer.draw_line_collection self.draw_quad_mesh = self._renderer.draw_quad_mesh self.draw_poly_collection = self._renderer.draw_poly_collection self.draw_regpoly_collection = self._renderer.draw_regpoly_collection self.copy_from_bbox = self._renderer.copy_from_bbox self.restore_region = self._renderer.restore_region self.texmanager = TexManager() self.bbox = lbwh_to_bbox(0,0, self.width, self.height) if __debug__: verbose.report('RendererAgg.__init__ done', 'debug-annoying')
def __init__(self, width, height, dpi): if __debug__: verbose.report('RendererAgg.__init__', 'debug-annoying') RendererBase.__init__(self) self.dpi = dpi self.width = width self.height = height if __debug__: verbose.report('RendererAgg.__init__ width=%s, \ height=%s'%(width, height), 'debug-annoying') self._renderer = _RendererAgg(int(width), int(height), dpi.get(), debug=False) if __debug__: verbose.report('RendererAgg.__init__ _RendererAgg done', 'debug-annoying') self.draw_polygon = self._renderer.draw_polygon self.draw_rectangle = self._renderer.draw_rectangle self.draw_path = self._renderer.draw_path self.draw_lines = self._renderer.draw_lines self.draw_markers = self._renderer.draw_markers self.draw_image = self._renderer.draw_image self.draw_line_collection = self._renderer.draw_line_collection self.draw_quad_mesh = self._renderer.draw_quad_mesh self.draw_poly_collection = self._renderer.draw_poly_collection self.draw_regpoly_collection = self._renderer.draw_regpoly_collection self.copy_from_bbox = self._renderer.copy_from_bbox self.restore_region = self._renderer.restore_region self.mathtext_parser = MathTextParser('Agg') self.bbox = lbwh_to_bbox(0,0, self.width, self.height) if __debug__: verbose.report('RendererAgg.__init__ done', 'debug-annoying')
def __init__(self, width, height, dpi): if __debug__: verbose.report('RendererAgg.__init__', 'debug-annoying') self.dpi = dpi self.width = width self.height = height self._renderer = _RendererAgg(int(width), int(height), dpi.get(), debug=False) self.draw_polygon = self._renderer.draw_polygon self.draw_rectangle = self._renderer.draw_rectangle self.draw_path = self._renderer.draw_path self.draw_lines = self._renderer.draw_lines self.draw_markers = self._renderer.draw_markers self.draw_image = self._renderer.draw_image self.draw_line_collection = self._renderer.draw_line_collection self.draw_poly_collection = self._renderer.draw_poly_collection self.draw_regpoly_collection = self._renderer.draw_regpoly_collection self.cache = self._renderer.cache self.blit = self._renderer.blit self.texmanager = TexManager() self.texd = {} # a cache of tex image rasters self.bbox = lbwh_to_bbox(0,0, self.width, self.height)
def draw_tex(self, gc, x, y, s, prop, angle): # todo, handle props, angle, origins rgb = gc.get_rgb() size = prop.get_size_in_points() dpi = self.dpi.get() flip = angle==90 w,h,d = self.get_text_width_height_descent(s, prop, 'TeX', rgb) if flip: w,h = h,w x -= w texmanager = self.get_texmanager() key = s, size, dpi, rgb, angle, texmanager.get_font_config() im = self.texd.get(key) if im is None: Z = texmanager.get_rgba(s, size, dpi, rgb) if flip: r = Z[:,:,0] g = Z[:,:,1] b = Z[:,:,2] a = Z[:,:,3] m,n,tmp = Z.shape def func(x): return npy.transpose(npy.fliplr(x)) Z = npy.zeros((n,m,4), float) Z[:,:,0] = func(r) Z[:,:,1] = func(g) Z[:,:,2] = func(b) Z[:,:,3] = func(a) im = fromarray(Z, 1) im.flipud_out() self.texd[key] = im cliprect = gc.get_clip_rectangle() if cliprect is None: bbox = None else: bbox = lbwh_to_bbox(*cliprect) self.draw_image(x, self.height-y, im, bbox)
def draw_tex(self, gc, x, y, s, prop, angle): # todo, handle props, angle, origins rgb = gc.get_rgb() size = prop.get_size_in_points() dpi = self.dpi.get() flip = angle == 90 w, h = self.get_text_width_height(s, prop, 'TeX', rgb) if flip: w, h = h, w x -= w texmanager = self.get_texmanager() key = s, size, dpi, rgb, angle, texmanager.get_font_config() im = self.texd.get(key) if im is None: Z = texmanager.get_rgba(s, size, dpi, rgb) if flip: r = Z[:, :, 0] g = Z[:, :, 1] b = Z[:, :, 2] a = Z[:, :, 3] m, n, tmp = Z.shape def func(x): return transpose(fliplr(x)) Z = zeros((n, m, 4), typecode=Float) Z[:, :, 0] = func(r) Z[:, :, 1] = func(g) Z[:, :, 2] = func(b) Z[:, :, 3] = func(a) im = fromarray(Z, 1) im.flipud_out() self.texd[key] = im cliprect = gc.get_clip_rectangle() if cliprect is None: bbox = None else: bbox = lbwh_to_bbox(*cliprect) self.draw_image(x, self.height - y, im, bbox)
def pick(self, x, y, epsilon=5): """ Return the artist at location x,y with an error tolerance epsilon (in pixels) """ clickBBox = lbwh_to_bbox(x - epsilon / 2, y - epsilon / 2, epsilon, epsilon) draw_bbox(clickBBox, self.renderer) def over_text(t): bbox = t.get_window_extent(self.renderer) return clickBBox.overlaps(bbox) def over_line(line): # can't use the line bbox because it covers the entire extent # of the line trans = line.get_transform() xdata, ydata = trans.numerix_x_y(line.get_xdata(), line.get_ydata()) distances = sqrt((x - xdata)**2 + (y - ydata)**2) return min(distances) < epsilon for ax in self.figure.axes: for line in ax.get_lines(): if over_line(line): self.select_line(line) return text = ax.get_xticklabels() text.extend(ax.get_yticklabels()) for t in text: if over_text(t): self.select_text(t) return