If anyone faces a similar issue, there is a solution here.

http://scipy.org/Cookbook/Matplotlib/Interactive_Plotting

Essentially, we should also check for "toolbar.mode"

Thanks,
Venkat.

Venkat Ramanan wrote:
> Hi,
>
> I have written a simple image viewing tool with window/level controls 
> linked to the right mouse, which generally works okay.
>
> But when I use the pan/zoom button, clicking and dragging the right 
> mouse button changes the zoom as intended, but also affects the 
> window/level too which is undesirable.
>
> How to change the callback so that the pan/zoom mode doesn't affect 
> window/level?
>
> The code is attached.
>
> If there are better image viewing tools using matplotlib, I can 
> upgrade, but I couldn't find them on a quick search. The goal is to 
> add some plotting capability ( plot row, col on user-specified 
> coordinates) and some ROI drawing capability. ( See my other post for 
> those questions. )
>
> Matplotlib: 0.87.7, python: 2.5 ubuntu 7.04
>
> Thanks,
> Venkat.
>
> ------------------------------------------------------------------------
>
> #!/usr/bin/env python
> import scipy
> import pylab
> from pylab import cos, sqrt, arctan2, sqrt,pi,cm, clim, 
> get_current_fig_manager
> import sys
> # Displaying an image with window/level controls
> # from matplotlib
>
> pylab.ion()
>
> xstart = 0;
> ystart = 0;
> win = 0;
> lev = 0;
> vmax_orig = 0;
> vmin_orig = 0;
>
> def on_click(event):
>   #get the x and y coords, flip y from top to bottom
>   global win,lev
>   win = im.norm.vmax - im.norm.vmin;
>   lev = (im.norm.vmax + im.norm.vmin)/2;
>   x, y = event.x, event.y;
>   if event.button==3:
>     if event.inaxes is not None:
>       global xstart,ystart
>       xstart = event.xdata;
>       ystart = event.ydata;
>       #print 'click:data coords', event.xdata, event.ydata;
>
> def on_move(event):
>   #get the x and y pixel coords
>   x, y = event.x, event.y
>   scale = 10;
>   if event.button==3:
>     if event.inaxes is not None:
>       xdelta = event.xdata - xstart;
>       ydelta = event.ydata - ystart;
>       xratio = xdelta / (im.get_extent()[1]-im.get_extent()[0]);
>       yratio = ydelta / (im.get_extent()[3]-im.get_extent()[2]);
>
>       new_win = xratio*scale + win;
>       new_lev = yratio*scale + lev;
>       if new_win < 0: new_win = 0;
>       
>       clim_high = new_lev + new_win/2;
>       clim_low  = new_lev - new_win/2;
>       clim(clim_low,clim_high);
>
>       #print 'move:deltas', xdelta, ydelta
>       #print 'clim_low: ', clim_low, 'clim_high: ', clim_high
>
> def on_release(event):
>   global win,lev
>   x, y = event.x, event.y
>   if event.button==2:
>     if event.inaxes is not None:
>       clim(vmin_orig,vmax_orig);
>       print 'release: vmin: ',im.norm.vmin,'vmax: ',im.norm.vmax
>
> def viewimage(imdata):
>   global im,vmax_orig,vmin_orig
>   im=pylab.imshow(imdata,origin='lower',cmap=cm.gray);
>   vmax_orig = im.norm.vmax;
>   vmin_orig = im.norm.vmin;
>   binding_id = pylab.connect('motion_notify_event', on_move)
>   pylab.connect('button_press_event', on_click)
>   pylab.connect('button_release_event', on_release)
>   pylab.show();
>
> def main():
>   # Creating the grid of coordinates x,y 
>   x,y = scipy.ogrid[-1.:1.:.01, -1.:1.:.01]
>   z = 3*y*(3*x**2-y**2)/4 + .5*cos(6*pi * sqrt(x**2 +y**2) + arctan2(x,y))
>   viewimage(z);
>
> if __name__ == '__main__':
>     main()
>   
> ------------------------------------------------------------------------
>
> -------------------------------------------------------------------------
> SF.Net email is sponsored by: 
> Check out the new SourceForge.net Marketplace.
> It's the best place to buy or sell services for
> just about anything Open Source.
> http://sourceforge.net/services/buy/index.php
> ------------------------------------------------------------------------
>
> _______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>   

-------------------------------------------------------------------------
SF.Net email is sponsored by: 
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to