You're absolutely correct - I wrote the original patch against 91.2,
and forgot to test it against the new trunk.  Below is a new patch
that HAS been tested against the trunk version.  It includes another
fix for some API changes in the Rectangle object.  Note that there's
also a fix in the RectangleSelector to prevent it from raising an
exception under the new API.

I've also noticed that both the SpanSelector and RectangleSelector
don't seem to draw the rectangle with useblit=False on my machine -
I'm only using useblit=True, though, and it works fine there with the
alterations in this patch.


Index: widgets.py
===================================================================
--- widgets.py  (revision 4953)
+++ widgets.py  (working copy)
@@ -827,16 +827,14 @@
         assert direction in ['horizontal', 'vertical'], 'Must choose
horizontal or vertical for direction'
         self.direction = direction

-        self.ax = ax
+        self.ax = None
+        self.canvas = None
         self.visible = True
-        self.canvas = ax.figure.canvas
-        self.canvas.mpl_connect('motion_notify_event', self.onmove)
-        self.canvas.mpl_connect('button_press_event', self.press)
-        self.canvas.mpl_connect('button_release_event', self.release)
-        self.canvas.mpl_connect('draw_event', self.update_background)
+        self.cids=[]

         self.rect = None
         self.background = None
+        self.pressv = None

         self.rectprops = rectprops
         self.onselect = onselect
@@ -847,8 +845,23 @@
         # Needed when dragging out of axes
         self.buttonDown = False
         self.prev = (0, 0)
-
-        if self.direction == 'horizontal':
+
+        self.new_axes(ax)
+
+
+    def new_axes(self,ax):
+        self.ax = ax
+        if self.canvas is not ax.figure.canvas:
+            for cid in self.cids:
+                self.canvas.mpl_disconnect(cid)
+
+            self.canvas = ax.figure.canvas
+
+            self.cids.append(self.canvas.mpl_connect('motion_notify_event',
self.onmove))
+            self.cids.append(self.canvas.mpl_connect('button_press_event',
self.press))
+           self.cids.append(self.canvas.mpl_connect('button_release_event',
self.release))
+           self.cids.append(self.canvas.mpl_connect('draw_event',
self.update_background))
+       if self.direction == 'horizontal':
             trans = blended_transform_factory(self.ax.transData,
self.ax.transAxes)
             w,h = 0,1
         else:
@@ -859,9 +872,8 @@
                                visible=False,
                                **self.rectprops
                                )
-
+
         if not self.useblit: self.ax.add_patch(self.rect)
-        self.pressv = None

     def update_background(self, event):
         'force an update of the background'
@@ -931,10 +943,10 @@
         minv, maxv = v, self.pressv
         if minv>maxv: minv, maxv = maxv, minv
         if self.direction == 'horizontal':
-            self.rect.xy[0] = minv
+            self.rect.set_x(minv)
             self.rect.set_width(maxv-minv)
         else:
-            self.rect.xy[1] = minv
+            self.rect.set_y(minv)
             self.rect.set_height(maxv-minv)

         if self.onmove_callback is not None:
@@ -1155,8 +1167,8 @@
             miny, maxy = self.eventpress.ydata, y # click-y and actual mouse-y
             if minx>maxx: minx, maxx = maxx, minx # get them in the right order
             if miny>maxy: miny, maxy = maxy, miny
-            self.to_draw.xy[0] = minx             # set lower left of box
-            self.to_draw.xy[1] = miny
+            self.to_draw.set_x(minx)             # set lower left of box
+            self.to_draw.set_y(miny)
             self.to_draw.set_width(maxx-minx)     # set width and height of box
             self.to_draw.set_height(maxy-miny)
             self.update()



On Feb 11, 2008 7:48 AM, John Hunter <[EMAIL PROTECTED]> wrote:
> On Feb 10, 2008 5:12 PM, Erik Tollerud <[EMAIL PROTECTED]> wrote:
> > I've been working on an application that uses matplotlib as its
> > plotting library, and I've been noticing a steady decrease in
>
> It looks like there is some confusion in your patch vis-a-vis the
> migration from the old matplotlib transformation architecture (no on a
> branch) to the new (now in the trunk).  I'm attaching the migration
> document.  For example, your patch removes
> blended_transform_factory lines (new transforms call on the trunk) and
> adds blend_xy_sep_transform lines (old transforms call on the 0.91
> maintenance branch).
>
> You can patch either the maintenance branch or the trunk or both, but
> I think the patch as submitted is a little mixed up if I am reading
> this correctly.
>
> JDH
>



-- 
Erik Tollerud
Graduate Student
Center For Cosmology
Department of Physics and Astronomy
4155B Frederick Reines Hall
University of California, Irvine
Office Phone: (949)824-2996
Cell: (651)307-9409
[EMAIL PROTECTED]
Index: widgets.py
===================================================================
--- widgets.py	(revision 4953)
+++ widgets.py	(working copy)
@@ -827,16 +827,14 @@
         assert direction in ['horizontal', 'vertical'], 'Must choose horizontal or vertical for direction'
         self.direction = direction
 
-        self.ax = ax
+        self.ax = None
+        self.canvas = None
         self.visible = True
-        self.canvas = ax.figure.canvas
-        self.canvas.mpl_connect('motion_notify_event', self.onmove)
-        self.canvas.mpl_connect('button_press_event', self.press)
-        self.canvas.mpl_connect('button_release_event', self.release)
-        self.canvas.mpl_connect('draw_event', self.update_background)
+        self.cids=[]
 
         self.rect = None
         self.background = None
+        self.pressv = None
 
         self.rectprops = rectprops
         self.onselect = onselect
@@ -847,8 +845,23 @@
         # Needed when dragging out of axes
         self.buttonDown = False
         self.prev = (0, 0)
-
-        if self.direction == 'horizontal':
+        
+        self.new_axes(ax)
+        
+        
+    def new_axes(self,ax):
+        self.ax = ax
+        if self.canvas is not ax.figure.canvas:
+            for cid in self.cids:
+                self.canvas.mpl_disconnect(cid)
+                
+            self.canvas = ax.figure.canvas
+            
+            self.cids.append(self.canvas.mpl_connect('motion_notify_event', self.onmove))
+            self.cids.append(self.canvas.mpl_connect('button_press_event', self.press))
+	    self.cids.append(self.canvas.mpl_connect('button_release_event', self.release))
+	    self.cids.append(self.canvas.mpl_connect('draw_event', self.update_background))
+	if self.direction == 'horizontal':
             trans = blended_transform_factory(self.ax.transData, self.ax.transAxes)
             w,h = 0,1
         else:
@@ -859,9 +872,8 @@
                                visible=False,
                                **self.rectprops
                                )
-
+                               
         if not self.useblit: self.ax.add_patch(self.rect)
-        self.pressv = None
 
     def update_background(self, event):
         'force an update of the background'
@@ -931,10 +943,10 @@
         minv, maxv = v, self.pressv
         if minv>maxv: minv, maxv = maxv, minv
         if self.direction == 'horizontal':
-            self.rect.xy[0] = minv
+            self.rect.set_x(minv)
             self.rect.set_width(maxv-minv)
         else:
-            self.rect.xy[1] = minv
+            self.rect.set_y(minv)
             self.rect.set_height(maxv-minv)
 
         if self.onmove_callback is not None:
@@ -1155,8 +1167,8 @@
             miny, maxy = self.eventpress.ydata, y # click-y and actual mouse-y
             if minx>maxx: minx, maxx = maxx, minx # get them in the right order
             if miny>maxy: miny, maxy = maxy, miny
-            self.to_draw.xy[0] = minx             # set lower left of box
-            self.to_draw.xy[1] = miny
+            self.to_draw.set_x(minx)             # set lower left of box
+            self.to_draw.set_y(miny)
             self.to_draw.set_width(maxx-minx)     # set width and height of box
             self.to_draw.set_height(maxy-miny)
             self.update()
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to