I'm not at all attached to any particular functionality. Feel free to
mangle it as you see fit!
On Feb 5, 2008 5:11 PM, John Hunter <[EMAIL PROTECTED]> wrote:
> On Feb 5, 2008 3:58 PM, John Hunter <[EMAIL PROTECTED]> wrote:
> > On Feb 2, 2008 8:48 AM, Gael Varoquaux <[EMAIL PROTECTED]> wrote:
> >
> > > Here is the new patch. I added visual feedback when accumulating points.
> > > I hope the docstrings are clear.
> >
> > Great -- thanks again. I applied this patch and created a new example
> > ginput_demo.py
>
> Jack replied to me offlist so I am going to paste in his post below.
> Perhaps you and Gael can consult on the ideal functionality of ginput
> vis-a-vis optional line segment drawing, etc...
>
>
>
> From Jack Sankey <[EMAIL PROTECTED]>
> to John Hunter <[EMAIL PROTECTED]>,
> date Feb 5, 2008 4:02 PM
> subject Re: [matplotlib-devel] ginput: blocking call for mouse input
> mailed-by gmail.com
>
>
>
>
> Woa, it's working on GTKAgg using wx.Yield()? You must have added some voodoo
> :)
>
> Also, my version of GaelInput has seemed to stop evolving. This
> version has the option to draw lines between clicks, which I use a
> lot. Also, the default timeout is 0 now, since you can always
> right-click to abort.
>
> -Jack
>
>
>
> class GaelInput(object):
> """
> Class that create a callable object to retrieve mouse click in a
> blocking way, a la MatLab. Based on Gael Varoquaux's almost-working
> object. Thanks Gael! I've wanted to get this working for years!
>
> -Jack
> """
>
> debug = False
> cid = None # event connection object
> clicks = [] # list of click coordinates
> n = 1 # number of clicks we're waiting for
> lines = False # if we should draw the lines
>
> def on_click(self, event):
> """
> Event handler that will be passed to the current figure to
> retrieve clicks.
> """
>
> # write the debug information if we're supposed to
> if self.debug: print "button "+str(event.button)+":
> "+str(event.xdata)+", "+str(event.ydata)
>
> # if this event's a right click we're done
> if event.button == 3:
> self.done = True
> return
>
> # if it's a valid click (and this isn't an extra event
> # in the queue), append the coordinates to the list
> if event.inaxes and not self.done:
> self.clicks.append([event.xdata, event.ydata])
>
> # now if we're supposed to draw lines, do so
> if self.lines and len(self.clicks) > 1:
> event.inaxes.plot([self.clicks[-1][0], self.clicks[-2][0]],
> [self.clicks[-1][1], self.clicks[-2][1]],
> color='w', linewidth=2.0,
> scalex=False, scaley=False)
> event.inaxes.plot([self.clicks[-1][0], self.clicks[-2][0]],
> [self.clicks[-1][1], self.clicks[-2][1]],
> color='k', linewidth=1.0,
> scalex=False, scaley=False)
> _pylab.draw()
>
> # if we have n data points, we're done
> if len(self.clicks) >= self.n and self.n is not 0:
> self.done = True
> return
>
>
> def __call__(self, n=1, timeout=0, debug=False, lines=False):
> """
> Blocking call to retrieve n coordinate pairs through mouse clicks.
>
> n=1 number of clicks to collect. Set n=0 to keep collecting
> points until you click with the right mouse button.
>
> timeout=30 maximum number of seconds to wait for clicks
> before giving up.
> timeout=0 to disable
>
> debug=False show each click event coordinates
>
> lines=False draw lines between clicks
> """
>
> # just for printing the coordinates
> self.debug = debug
>
> # for drawing lines
> self.lines = lines
>
> # connect the click events to the on_click function call
> self.cid = _pylab.connect('button_press_event', self.on_click)
>
> # initialize the list of click coordinates
> self.clicks = []
>
> # wait for n clicks
> self.n = n
> self.done = False
> t = 0.0
> while not self.done:
> # key step: yield the processor to other threads
> _wx.Yield();
> _time.sleep(0.1)
>
> # check for a timeout
> t += 0.1
> if timeout and t > timeout: print "ginput timeout"; break;
>
> # All done! Disconnect the event and return what we have
> _pylab.disconnect(self.cid)
> self.cid = None
> return _numpy.array(self.clicks)
>
>
>
> def ginput(n=1, timeout=0, show=True, lines=False):
> """
> Simple functional call for physicists. This will wait for n clicks
> from the user and
> return a list of the coordinates of each click.
>
> n=1 number of clicks to collect
> timeout=30 maximum number of seconds to wait for clicks
> before giving up.
> timeout=0 to disable
> show=True print the clicks as they are received
> lines=False draw lines between clicks
> """
>
> x = GaelInput()
> return x(n, timeout, show, lines)
>
-------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel