Hello,
I am also interested in masking polygons and defining the polygon by 'clicking' 
on the image... but I do not know anything about GUI.... does anyone can help? 
Is there already something implemented?
Thanks!
Chiara

> Date: Wed, 23 Jan 2008 13:50:15 +1300
> From: [EMAIL PROTECTED]
> To: matplotlib-users@lists.sourceforge.net
> Subject: Re: [Matplotlib-users] Polygon masking possible?
> 
> Hi Søren,
> 
> I've put this back on the list in case it's useful to anyone else, or
> if there are better suggestions or improvements around. Hope you don't
> mind.
> 
> On 22/01/2008, Søren Nielsen <[EMAIL PROTECTED]> wrote:
> > Yeah i'd like to see your code if I can..
> 
> import numpy as n
> 
> def get_poly_pts(x, y, shape):
> """Creates convex polygon mask from list of corners.
> 
>     Parameters
>     ----------
>     x : array_like
>         x co-ordinates of corners
>     y : array_like
>         y co-ordinates of corners, in order corresponding to x
>     shape : array_like
>         dimension sizes of result
> 
>     Returns
>     -------
>     build : ndarray
>         2-D array of shape shape with values True inside polygon
> 
>     Notes
>     -----
>     Code is constrained to convex polygons by "inside"
>     assessment criterion.
> 
>     """
>     x = n.asarray(x)
>     y = n.asarray(y)
>     shape = n.asarray(shape)
>     npts = x.size # should probably assert x.size == y.size
>     inds = n.indices( shape )
>     xs = inds[0]
>     ys = inds[1]
>     xav = n.round(x.mean()).astype(int)
>     yav = n.round(y.mean()).astype(int)
>     for i in xrange(npts): # iterate over pairs of co-ordinates
>         j = (i + 1) % npts
>         m = (y[j] - y[i])/(x[j] - x[i])
>         c = (x[j] * y[i] - x[i] * y[j])/(x[j] - x[i])
>         thisone = ( ys > m * xs + c )
>         if thisone[xav, yav] == False:
>             thisone = ~thisone
>         if i == 0:
>             build = thisone
>         else:
>             build &= thisone
>     return build
> 
> (released under BSD licence)
> 
> > I just needed the push over the edge to know how to draw on the canvas,
> > mapping clicks etc. since i'm still fairly new to matplotlib, so I think
> > your code will be helpfull.
> 
> I hope so. As you can see this code doesn't do any of the drawing or
> click collecting, but the cookbook page should be able to guide you
> there. Ask again on the list if you have any further questions and
> we'll see if we can help.
> 
> Also, the code assumes that the average co-ordinate is inside the
> shape - that's true for convex polygons, but not necessarily for
> arbitrary ones. I use if after taking a convex hull of a greater list
> of points (using the delaunay module in scipy (now in scikits, I
> hear)), which ensures convexity. You just need to be aware of that
> limitation.
> 
> Cheers,
> 
> A.
> -- 
> AJC McMorland, PhD candidate
> Physiology, University of Auckland
> 
> -------------------------------------------------------------------------
> 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-users mailing list
> Matplotlib-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users

_________________________________________________________________
Express yourself instantly with MSN Messenger! Download today it's FREE!
http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/
-------------------------------------------------------------------------
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-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to