Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a59743d

Browse files
committed
finished event picker
svn path=/trunk/matplotlib/; revision=846
1 parent ddc5cf9 commit a59743d

3 files changed

Lines changed: 18 additions & 9 deletions

File tree

examples/object_picker.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
#!/usr/bin/env python
22
"""
3+
As of matplotlib-0.70, there is GUI neutral object picking. See for
4+
example the picker_demo.py.
5+
36
Show how to use the mouse to select objects and a build dialog to set
47
line properties. The approach here can be readily extended to include
58
all artists and properties. Volunteers welcome!

lib/matplotlib/axes.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3141,20 +3141,20 @@ def dist_x_y(p1, x, y):
31413141

31423142
def dist(a):
31433143
if isinstance(a, Text):
3144-
xa, ya = a.get_position()
3145-
p = a.get_transform().xy_tup((xa,ya))
3146-
return dist_points( xywin, p)
3144+
bbox = a.get_window_extent()
3145+
l,b,w,h = bbox.get_bounds()
3146+
verts = (l,b), (l,b+h), (l+w,b+h), (l+w, b)
3147+
xt, yt = zip(*verts)
31473148
elif isinstance(a, Patch):
31483149
verts = a.get_verts()
31493150
tverts = a.get_transform().seq_xy_tups(verts)
3150-
x, y = zip(*tverts)
3151-
return dist_x_y(xywin, array(x), array(y))
3151+
xt, yt = zip(*tverts)
31523152
elif isinstance(a, Line2D):
31533153
xdata = a.get_xdata()
31543154
ydata = a.get_ydata()
31553155
xt, yt = a.get_transform().numerix_x_y(xdata, ydata)
3156-
return dist_x_y(xywin, xt, yt)
31573156

3157+
return dist_x_y(xywin, asarray(xt), asarray(yt))
31583158

31593159
artists = self.lines + self.patches + self.texts
31603160
if not len(artists): return None

lib/matplotlib/text.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def __init__(self,
5959
self._rotation = rotation
6060
self._fontproperties = fontproperties
6161
self._bbox = None
62-
62+
self._renderer = None
6363
def _get_multialignment(self):
6464
if self._multialignment is not None: return self._multialignment
6565
else: return self._horizontalalignment
@@ -209,6 +209,8 @@ def set_bbox(self, rectprops):
209209
def draw(self, renderer):
210210
if not self.get_visible(): return
211211
if self._text=='': return
212+
if renderer is not None:
213+
self._renderer = renderer
212214

213215
gc = renderer.new_gc()
214216
gc.set_foreground(self._color)
@@ -315,8 +317,12 @@ def get_verticalalignment(self):
315317
"Return the vertical alignment as string"
316318
return self._verticalalignment
317319

318-
def get_window_extent(self, renderer):
319-
bbox, info = self._get_layout(renderer)
320+
def get_window_extent(self, renderer=None):
321+
if renderer is not None:
322+
self._renderer = renderer
323+
if self._renderer is None:
324+
raise RuntimeError('Cannot get window extent w/o renderer')
325+
bbox, info = self._get_layout(self._renderer)
320326
return bbox
321327

322328

0 commit comments

Comments
 (0)