From deb211f6968c5505326afc2004a68eb452568cc5 Mon Sep 17 00:00:00 2001 From: Phil Elson Date: Tue, 14 May 2013 17:02:16 +0100 Subject: [PATCH 1/2] Fixed hatch clipping. --- .../test_artist/clip_path_clipping.pdf | Bin 0 -> 7169 bytes .../test_artist/clip_path_clipping.png | Bin 0 -> 51860 bytes .../test_artist/clip_path_clipping.svg | 1551 +++++++++++++++++ lib/matplotlib/tests/test_artist.py | 49 +- src/_backend_agg.cpp | 18 +- 5 files changed, 1608 insertions(+), 10 deletions(-) create mode 100644 lib/matplotlib/tests/baseline_images/test_artist/clip_path_clipping.pdf create mode 100644 lib/matplotlib/tests/baseline_images/test_artist/clip_path_clipping.png create mode 100644 lib/matplotlib/tests/baseline_images/test_artist/clip_path_clipping.svg diff --git a/lib/matplotlib/tests/baseline_images/test_artist/clip_path_clipping.pdf b/lib/matplotlib/tests/baseline_images/test_artist/clip_path_clipping.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4aca119902903782283bc07d8b2654233f63098f GIT binary patch literal 7169 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 literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/baseline_images/test_artist/clip_path_clipping.png b/lib/matplotlib/tests/baseline_images/test_artist/clip_path_clipping.png new file mode 100644 index 0000000000000000000000000000000000000000..426e35add1a3b637c96db52dd78da7ddfddc7788 GIT binary patch literal 51860 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/matplotlib/tests/test_artist.py b/lib/matplotlib/tests/test_artist.py index 90ba42f88fdc..036120c3fdff 100644 --- a/lib/matplotlib/tests/test_artist.py +++ b/lib/matplotlib/tests/test_artist.py @@ -1,14 +1,17 @@ from __future__ import print_function +import copy + + import numpy as np -from matplotlib.testing.decorators import cleanup import matplotlib.pyplot as plt - import matplotlib.patches as mpatches +import matplotlib.path as mpath import matplotlib.transforms as mtrans import matplotlib.collections as mcollections +from matplotlib.testing.decorators import image_comparison, cleanup @cleanup @@ -88,19 +91,49 @@ def test_collection_transform_of_none(): alpha=0.5) ax.add_collection(c) assert isinstance(c._transOffset, mtrans.IdentityTransform) - -def test_point_in_path(): - from matplotlib.path import Path +def test_point_in_path(): # Test #1787 verts2 = [(0,0), (0,1), (1,1), (1,0), (0,0)] - path = Path(verts2, closed=True) + path = mpath.Path(verts2, closed=True) points = [(0.5,0.5), (1.5,0.5)] - assert np.all(path.contains_points(points) == [True, False]) - + assert np.all(path.contains_points(points) == [True, False]) + + +@image_comparison(baseline_images=["clip_path_clipping"], remove_text=True) +def test_clipping(): + exterior = mpath.Path.unit_rectangle() + exterior = mpath.Path(copy.deepcopy(exterior.vertices), + copy.deepcopy(exterior.codes[:])) + exterior.vertices *= 4 + exterior.vertices -= 2 + interior = mpath.Path.unit_circle() + interior.vertices = interior.vertices[::-1] + clip_path = mpath.Path(vertices=np.concatenate([exterior.vertices, + interior.vertices]), + codes=np.concatenate([exterior.codes, + interior.codes])) + + star = mpath.Path.unit_regular_star(6) + star.vertices *= 2.6 + + ax1 = plt.subplot(121) + col = mcollections.PathCollection([star], lw=5, edgecolor='blue', + facecolor='red', alpha=0.7, hatch='*') + col.set_clip_path(clip_path, ax1.transData) + ax1.add_collection(col) + + ax2 = plt.subplot(122, sharex=ax1, sharey=ax1) + patch = mpatches.PathPatch(star, lw=5, edgecolor='blue', facecolor='red', + alpha=0.7, hatch='*') + patch.set_clip_path(clip_path, ax2.transData) + ax2.add_patch(patch) + + ax1.set_xlim([-3, 3]) + ax1.set_ylim([-3, 3]) if __name__=='__main__': diff --git a/src/_backend_agg.cpp b/src/_backend_agg.cpp index fa813eecc184..d34e63bdda54 100644 --- a/src/_backend_agg.cpp +++ b/src/_backend_agg.cpp @@ -1253,8 +1253,22 @@ void RendererAgg::_draw_path(path_t& path, bool has_clippath, agg::span_allocator sa; img_source_type img_src(hatch_img_pixf); span_gen_type sg(img_src, 0, 0); - theRasterizer.add_path(path); - agg::render_scanlines_aa(theRasterizer, slineP8, rendererBase, sa, sg); + try { + theRasterizer.add_path(path); + } catch (std::overflow_error &e) { + throw Py::OverflowError(e.what()); + } + + if (has_clippath) + { + pixfmt_amask_type pfa(pixFmt, alphaMask); + amask_ren_type ren(pfa); + agg::render_scanlines_aa(theRasterizer, slineP8, ren, sa, sg); + } + else + { + agg::render_scanlines_aa(theRasterizer, slineP8, rendererBase, sa, sg); + } } // Render stroke From c0e2e48249f81ffd7adeffe03661ec95f6d4a4d0 Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Tue, 14 May 2013 16:42:47 -0400 Subject: [PATCH 2/2] Don't overwrite unit_circle vertices -- causes problems for many other tests --- lib/matplotlib/tests/test_artist.py | 42 +++++++++++++++-------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/lib/matplotlib/tests/test_artist.py b/lib/matplotlib/tests/test_artist.py index 036120c3fdff..a19d49226b8d 100644 --- a/lib/matplotlib/tests/test_artist.py +++ b/lib/matplotlib/tests/test_artist.py @@ -18,29 +18,29 @@ def test_patch_transform_of_none(): # tests the behaviour of patches added to an Axes with various transform # specifications - + ax = plt.axes() ax.set_xlim([1, 3]) ax.set_ylim([1, 3]) - + # Draw an ellipse over data coord (2,2) by specifying device coords. xy_data = (2, 2) xy_pix = ax.transData.transform_point(xy_data) - + # Not providing a transform of None puts the ellipse in data coordinates . e = mpatches.Ellipse(xy_data, width=1, height=1, fc='yellow', alpha=0.5) ax.add_patch(e) assert e._transform == ax.transData - + # Providing a transform of None puts the ellipse in device coordinates. - e = mpatches.Ellipse(xy_pix, width=120, height=120, fc='coral', + e = mpatches.Ellipse(xy_pix, width=120, height=120, fc='coral', transform=None, alpha=0.5) assert e.is_transform_set() is True ax.add_patch(e) assert isinstance(e._transform, mtrans.IdentityTransform) - + # Providing an IdentityTransform puts the ellipse in device coordinates. - e = mpatches.Ellipse(xy_pix, width=100, height=100, + e = mpatches.Ellipse(xy_pix, width=100, height=100, transform=mtrans.IdentityTransform(), alpha=0.5) ax.add_patch(e) assert isinstance(e._transform, mtrans.IdentityTransform) @@ -55,39 +55,39 @@ def test_patch_transform_of_none(): assert e.get_transform() != intermediate_transform assert e.is_transform_set() is True assert e._transform == ax.transData - + @cleanup def test_collection_transform_of_none(): - # tests the behaviour of collections added to an Axes with various + # tests the behaviour of collections added to an Axes with various # transform specifications ax = plt.axes() ax.set_xlim([1, 3]) ax.set_ylim([1, 3]) - + #draw an ellipse over data coord (2,2) by specifying device coords xy_data = (2, 2) xy_pix = ax.transData.transform_point(xy_data) - - # not providing a transform of None puts the ellipse in data coordinates + + # not providing a transform of None puts the ellipse in data coordinates e = mpatches.Ellipse(xy_data, width=1, height=1) c = mcollections.PatchCollection([e], facecolor='yellow', alpha=0.5) ax.add_collection(c) - # the collection should be in data coordinates + # the collection should be in data coordinates assert c.get_offset_transform() + c.get_transform() == ax.transData - + # providing a transform of None puts the ellipse in device coordinates e = mpatches.Ellipse(xy_pix, width=120, height=120) - c = mcollections.PatchCollection([e], facecolor='coral', + c = mcollections.PatchCollection([e], facecolor='coral', alpha=0.5) - c.set_transform(None) + c.set_transform(None) ax.add_collection(c) assert isinstance(c.get_transform(), mtrans.IdentityTransform) - + # providing an IdentityTransform puts the ellipse in device coordinates e = mpatches.Ellipse(xy_pix, width=100, height=100) - c = mcollections.PatchCollection([e], transform=mtrans.IdentityTransform(), + c = mcollections.PatchCollection([e], transform=mtrans.IdentityTransform(), alpha=0.5) ax.add_collection(c) assert isinstance(c._transOffset, mtrans.IdentityTransform) @@ -100,7 +100,7 @@ def test_point_in_path(): path = mpath.Path(verts2, closed=True) points = [(0.5,0.5), (1.5,0.5)] - assert np.all(path.contains_points(points) == [True, False]) + assert np.all(path.contains_points(points) == [True, False]) @image_comparison(baseline_images=["clip_path_clipping"], remove_text=True) @@ -111,6 +111,8 @@ def test_clipping(): exterior.vertices *= 4 exterior.vertices -= 2 interior = mpath.Path.unit_circle() + interior = mpath.Path(copy.deepcopy(interior.vertices), + copy.deepcopy(interior.codes[:])) interior.vertices = interior.vertices[::-1] clip_path = mpath.Path(vertices=np.concatenate([exterior.vertices, interior.vertices]), @@ -125,7 +127,7 @@ def test_clipping(): facecolor='red', alpha=0.7, hatch='*') col.set_clip_path(clip_path, ax1.transData) ax1.add_collection(col) - + ax2 = plt.subplot(122, sharex=ax1, sharey=ax1) patch = mpatches.PathPatch(star, lw=5, edgecolor='blue', facecolor='red', alpha=0.7, hatch='*')