Skip to content

Provide backward-compatible nxutils #746

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Mar 14, 2012
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Creates a backward compatibility layer for nxutils. nxutils is now im…
…plemented in terms of the methods in _path.cpp. A "points_in_path" method has been added to support "nxutils.points_in_poly".
  • Loading branch information
mdboom committed Mar 8, 2012
commit 67352c8fe8f7b83e9f5c6774fd8f677aed6e158a
5 changes: 3 additions & 2 deletions examples/event_handling/lasso_demo.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
inside polygon detection routine.
"""
from matplotlib.widgets import Lasso
from matplotlib.nxutils import points_inside_poly
from matplotlib.colors import colorConverter
from matplotlib.collections import RegularPolyCollection
from matplotlib import path

from matplotlib.pyplot import figure, show
from numpy import nonzero
Expand Down Expand Up @@ -50,7 +50,8 @@ def __init__(self, ax, data):

def callback(self, verts):
facecolors = self.collection.get_facecolors()
ind = nonzero(points_inside_poly(self.xys, verts))[0]
p = path.Path(verts)
ind = nonzero(p.contains_points(self.xys))[0]
for i in range(self.Nxy):
if i in ind:
facecolors[i] = Datum.colorin
Expand Down
46 changes: 46 additions & 0 deletions lib/matplotlib/nxutils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import warnings

from matplotlib import path

def pnpoly(x, y, xyverts):
"""
inside = pnpoly(x, y, xyverts)

Return 1 if x,y is inside the polygon, 0 otherwise.

*xyverts*
a sequence of x,y vertices.

A point on the boundary may be treated as inside or outside.

Deprecated: Use `matplotlib.path.Path.contains_point` instead.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use the deprecated directive ".. deprecated:: 1.2.0"
http://matplotlib.sourceforge.net/devel/documenting_mpl.html#formatting

"""
warings.warn(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your warnings are backwards. The string comes first, then the deprecation.

DeprecationWarning,
"nxutils is deprecated. Use matplotlib.path.Path.contains_point instead.")

p = path.Path(xyverts)
return p.contains_point(x, y)

def points_inside_poly(xypoints, xyverts):
"""
mask = points_inside_poly(xypoints, xyverts)

Returns a boolean ndarray, True for points inside the polygon.

*xypoints*
a sequence of N x,y pairs.

*xyverts*
sequence of x,y vertices of the polygon.

A point on the boundary may be treated as inside or outside.

Deprecated: Use `matplotlib.path.Path.contains_points` instead.
"""
warnings.warn(
DeprecationWarning,
"nxutils is deprecated. Use matplotlib.path.Path.contains_points instead.")

p = path.Path(xyverts)
return p.contains_points(xypoints)
21 changes: 20 additions & 1 deletion lib/matplotlib/path.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from matplotlib._path import point_in_path, get_path_extents, \
point_in_path_collection, get_path_collection_extents, \
path_in_path, path_intersects_path, convert_path_to_polygons, \
cleanup_path
cleanup_path, points_in_path
from matplotlib.cbook import simple_linear_interpolation, maxdict
from matplotlib import rcParams

Expand Down Expand Up @@ -280,12 +280,31 @@ def contains_point(self, point, transform=None, radius=0.0):

If *transform* is not *None*, the path will be transformed
before performing the test.

*radius* allows the path to be made slightly larger or
smaller.
"""
if transform is not None:
transform = transform.frozen()
result = point_in_path(point[0], point[1], radius, self, transform)
return result

def contains_points(self, points, transform=None, radius=0.0):
"""
Returns a bool array which is *True* if the path contains the
corresponding point.

If *transform* is not *None*, the path will be transformed
before performing the test.

*radius* allows the path to be made slightly larger or
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I prefer the words "thicker" and "thinner"

smaller.
"""
if transform is not None:
transform = transform.frozen()
result = points_in_path(points, radius, self, transform)
return result

def contains_path(self, path, transform=None):
"""
Returns *True* if this path completely contains the given path.
Expand Down
Loading