From: <jd...@us...> - 2008-07-03 13:38:59
|
Revision: 5708 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=5708&view=rev Author: jdh2358 Date: 2008-07-03 06:38:52 -0700 (Thu, 03 Jul 2008) Log Message: ----------- fixed text picking Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/text.py Added Paths: ----------- trunk/matplotlib/examples/api/line_with_text.py Added: trunk/matplotlib/examples/api/line_with_text.py =================================================================== --- trunk/matplotlib/examples/api/line_with_text.py (rev 0) +++ trunk/matplotlib/examples/api/line_with_text.py 2008-07-03 13:38:52 UTC (rev 5708) @@ -0,0 +1,65 @@ +""" +Show how to override basic methods so an artist can contain another +artist. In this case, the line contains a Text instance to label it. +""" +import numpy as np +import matplotlib.pyplot as plt +import matplotlib.lines as lines +import matplotlib.transforms as mtransforms +import matplotlib.text as mtext + + +class MyLine(lines.Line2D): + + def __init__(self, *args, **kwargs): + # we'll update the position when the line data is set + self.text = mtext.Text(0, 0, '') + lines.Line2D.__init__(self, *args, **kwargs) + + # we can't access the label attr until *after* the line is + # inited + self.text.set_text(self.get_label()) + + def set_figure(self, figure): + self.text.set_figure(figure) + lines.Line2D.set_figure(self, figure) + + def set_axes(self, axes): + self.text.set_axes(axes) + lines.Line2D.set_axes(self, axes) + + def set_transform(self, transform): + # 2 pixel offset + texttrans = transform + mtransforms.Affine2D().translate(2, 2) + self.text.set_transform(texttrans) + lines.Line2D.set_transform(self, transform) + + + def set_data(self, x, y): + if len(x): + self.text.set_position((x[-1], y[-1])) + + lines.Line2D.set_data(self, x, y) + + def draw(self, renderer): + # draw my label at the end of the line with 2 pixel offset + lines.Line2D.draw(self, renderer) + self.text.draw(renderer) + + + + + +fig = plt.figure() +ax = fig.add_subplot(111) +x, y = np.random.rand(2, 20) +line = MyLine(x, y, mfc='red', ms=12, label='line label') +#line.text.set_text('line label') +line.text.set_color('red') +line.text.set_fontsize(16) + + +ax.add_line(line) + + +plt.show() Modified: trunk/matplotlib/lib/matplotlib/text.py =================================================================== --- trunk/matplotlib/lib/matplotlib/text.py 2008-07-03 13:21:54 UTC (rev 5707) +++ trunk/matplotlib/lib/matplotlib/text.py 2008-07-03 13:38:52 UTC (rev 5708) @@ -135,17 +135,15 @@ """ if callable(self._contains): return self._contains(self,mouseevent) - try: - l,b,w,h = self.get_window_extent().get_bounds() - except: - # TODO: why does this error occur - #print str(self),"error looking at get_window_extent" - return False,{} + + l,b,w,h = self.get_window_extent().bounds + r = l+w t = b+h xyverts = (l,b), (l, t), (r, t), (r, b) x, y = mouseevent.x, mouseevent.y inside = nxutils.pnpoly(x, y, xyverts) + return inside,{} def _get_xy_display(self): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |