From 248a85442840c6fc766758618686bbb0f22ba4fb Mon Sep 17 00:00:00 2001 From: Ryan May Date: Thu, 19 Dec 2019 20:49:59 -0700 Subject: [PATCH] Backport PR #15970: Process clip paths the same way as regular Paths. --- .../baseline_images/test_axes/imshow_clip.png | Bin 21375 -> 21416 bytes .../test_offsetbox/offsetbox_clipping.png | Bin 3969 -> 3999 bytes src/_backend_agg.cpp | 17 ++++++++++++++--- src/_backend_agg.h | 16 ++++++++-------- 4 files changed, 22 insertions(+), 11 deletions(-) diff --git a/lib/matplotlib/tests/baseline_images/test_axes/imshow_clip.png b/lib/matplotlib/tests/baseline_images/test_axes/imshow_clip.png index 3f38834b97588d8f01d9e42fd544fb22f5f5d793..e68b7c3c0bafd0af3ab30182e8053bcb1123e0f6 100644 GIT binary patch literal 21416 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 diff --git a/lib/matplotlib/tests/baseline_images/test_offsetbox/offsetbox_clipping.png b/lib/matplotlib/tests/baseline_images/test_offsetbox/offsetbox_clipping.png index 3b62fc31883bb3412b8de31100c9534445c1b0dd..a0c0aecb075dc6f01405e594f023b227c9de5bf5 100644 GIT binary patch delta 1075 zcmYk5ZA@BM7{|{=s2Ce<>n2-k3rU-jWmZJz1P4^RTIXVPjZIc{YOSKBQ?QCm2Lg7< z)cH8LetQBa(#v}Nwrbk!NfmtA~Gih8LETM^uqHr;am=iC2z`90@3 zbyO|2@kI7{aq>lRrl?r_ML`80log1}OGV;R!DX6+Ur{L#31g#}_$e1vieuu~tf(Ts zB>LSFW?>PV85fJ^#`|OS{!)cuKLARzqBs-)(EB0WO}YU;CJFG%R}Q{P>MJljw(aT`>szk-!P@iM>Lz6hiDlO_G|`2D>ncrhcTbm<6O55PRGhWCfI`v zczB`ATPNRK9-n2NXt1FDCQ}FZs~b{LyCP*@J;n45rp(7nFXQ@0MPxt&r2?BwIBRrkAGH-;ScLvu&;h*XQ0f+8(yY+M|j1>{0r-L+< z0gsTboHMj>l^aLZmhPFgW89o(exx-*O&Ph7zUp#G9B$8a zECBDXAwz)YubGy;#i=F*!%o5@`fpDi5I`O>hIeA5gwu8Na!;9ys1y*%=HXRq3j;4| zhL_)rgck`c>dTIFd8Rfl1T^nK1dQf$?+!k(5wG9Z#KujQ*+Mhh(X)>gr1)@))NVbL!cBH=qk*eN2PmYg7e=m3zQdH%ZWYFxdUzA8rvr{H}``v!U@30^O07XPH z0F4J}031xNl5CAdwmg=2^ccAbcO4h6+*(7tH$A20~O-?`Cb>`Cbe*rOT6srIL literal 3969 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV2a>i1B%QlYbpRzEX7WqAsj$Z!;#Vf4nJ@F#*W;|lxbnLviJr;B4q#hkadH|9n^mur7`Uc8A>nN^y9!8P5;RHpL<3B3>6 z=DHUwS5vllz$4|9bGM4YT!)Dw&9SzGJ*=btk& zFbMoO{{~1MsNxV{U{FwYU|?wIVE_skF|jZ(oER0v79hoj)eQAN{`~yBW9LrE>C>k_ zKH4q5`8fl_hu+=0cYl0&dHKg*UtfRx^z`)2VmVdDPYrkO-04}pdi70X28JKp@^&>6 z`SC>kYk6-hDSslLqS)by@`|po`{rdHdq|2S^STM4+tNUZIZr!?n z-*@)z_iwOK*uTH*>#M7)H{Q)tU%zm}&73<`t}wN=d-VSQ|Lp&Qfx*G80ho>?8JQRu zQdl^Aw&o@cte++c(WHDRbxP!prXSmcOpiFfj_~U8){XOOH@131@Q2E2ZzrR0z zdwUyLtS=K#VE8{tKYm}&{kq?|-+1I2f$TH$7z}#DH;`MQ#+;F3_z+@K|F7oHm&^W} z(?4*4*xy(hGFdnd?0@q1_V&lm=hx4(ZFW!Ce)}wCb`92Qp2(7nL|e{#i56wrPDIxY&C9 z?OR#S_S-jst?wUg=d=IMAwT~P);u+`n{^3`4nH)gW>Q3I`X(st-*D~d-s@oW@Hi)0 zKS+Et`-gU5yWa4aguH#-oINe4UY1B5e_Z&DN9o;OJus5nU+?$(Z?Sa!eOPL$`}_5J zVQHypHL#ag|L|}-|Kqc>%{QmpcmXTSpTu??K#li5!d9c1op5Fc7l}Xhll;GY%*a+g R11x?SJYD@<);T3K0RUCiPmurs diff --git a/src/_backend_agg.cpp b/src/_backend_agg.cpp index d14b3ee347f7..0ae17741d735 100644 --- a/src/_backend_agg.cpp +++ b/src/_backend_agg.cpp @@ -129,10 +129,15 @@ RendererAgg::restore_region(BufferRegion ®ion, int xx1, int yy1, int xx2, int } bool RendererAgg::render_clippath(py::PathIterator &clippath, - const agg::trans_affine &clippath_trans) + const agg::trans_affine &clippath_trans, + e_snap_mode snap_mode) { typedef agg::conv_transform transformed_path_t; - typedef agg::conv_curve curve_t; + typedef PathNanRemover nan_removed_t; + typedef PathClipper clipped_t; + typedef PathSnapper snapped_t; + typedef PathSimplifier simplify_t; + typedef agg::conv_curve curve_t; bool has_clippath = (clippath.total_vertices() != 0); @@ -145,7 +150,13 @@ bool RendererAgg::render_clippath(py::PathIterator &clippath, rendererBaseAlphaMask.clear(agg::gray8(0, 0)); transformed_path_t transformed_clippath(clippath, trans); - curve_t curved_clippath(transformed_clippath); + nan_removed_t nan_removed_clippath(transformed_clippath, true, clippath.has_curves()); + clipped_t clipped_clippath(nan_removed_clippath, !clippath.has_curves(), width, height); + snapped_t snapped_clippath(clipped_clippath, snap_mode, clippath.total_vertices(), 0.0); + simplify_t simplified_clippath(snapped_clippath, + clippath.should_simplify() && !clippath.has_curves(), + clippath.simplify_threshold()); + curve_t curved_clippath(simplified_clippath); theRasterizer.add_path(curved_clippath); rendererAlphaMask.color(agg::gray8(255, 255)); agg::render_scanlines(theRasterizer, scanlineAlphaMask, rendererAlphaMask); diff --git a/src/_backend_agg.h b/src/_backend_agg.h index 55af1950773f..c372cb12ea0a 100644 --- a/src/_backend_agg.h +++ b/src/_backend_agg.h @@ -251,7 +251,7 @@ class RendererAgg template void set_clipbox(const agg::rect_d &cliprect, R &rasterizer); - bool render_clippath(py::PathIterator &clippath, const agg::trans_affine &clippath_trans); + bool render_clippath(py::PathIterator &clippath, const agg::trans_affine &clippath_trans, e_snap_mode snap_mode); template void _draw_path(PathIteratorType &path, bool has_clippath, const facepair_t &face, GCAgg &gc); @@ -379,7 +379,7 @@ RendererAgg::_draw_path(path_t &path, bool has_clippath, const facepair_t &face, // function set_clipbox(gc.cliprect, theRasterizer); if (has_clippath) { - render_clippath(gc.clippath.path, gc.clippath.trans); + render_clippath(gc.clippath.path, gc.clippath.trans, gc.snap_mode); } // Transfer the hatch to the main image buffer @@ -468,7 +468,7 @@ RendererAgg::draw_path(GCAgg &gc, PathIterator &path, agg::trans_affine &trans, theRasterizer.reset_clipping(); rendererBase.reset_clipping(true); set_clipbox(gc.cliprect, theRasterizer); - bool has_clippath = render_clippath(gc.clippath.path, gc.clippath.trans); + bool has_clippath = render_clippath(gc.clippath.path, gc.clippath.trans, gc.snap_mode); trans *= agg::trans_affine_scaling(1.0, -1.0); trans *= agg::trans_affine_translation(0.0, (double)height); @@ -586,7 +586,7 @@ inline void RendererAgg::draw_markers(GCAgg &gc, theRasterizer.reset_clipping(); rendererBase.reset_clipping(true); set_clipbox(gc.cliprect, rendererBase); - bool has_clippath = render_clippath(gc.clippath.path, gc.clippath.trans); + bool has_clippath = render_clippath(gc.clippath.path, gc.clippath.trans, gc.snap_mode); double x, y; @@ -832,7 +832,7 @@ inline void RendererAgg::draw_image(GCAgg &gc, theRasterizer.reset_clipping(); rendererBase.reset_clipping(true); set_clipbox(gc.cliprect, theRasterizer); - bool has_clippath = render_clippath(gc.clippath.path, gc.clippath.trans); + bool has_clippath = render_clippath(gc.clippath.path, gc.clippath.trans, gc.snap_mode); agg::rendering_buffer buffer; buffer.attach( @@ -941,7 +941,7 @@ inline void RendererAgg::_draw_path_collection_generic(GCAgg &gc, theRasterizer.reset_clipping(); rendererBase.reset_clipping(true); set_clipbox(cliprect, theRasterizer); - bool has_clippath = render_clippath(clippath, clippath_trans); + bool has_clippath = render_clippath(clippath, clippath_trans, gc.snap_mode); // Set some defaults, assuming no face or edge gc.linewidth = 0.0; @@ -1249,7 +1249,7 @@ inline void RendererAgg::draw_gouraud_triangle(GCAgg &gc, theRasterizer.reset_clipping(); rendererBase.reset_clipping(true); set_clipbox(gc.cliprect, theRasterizer); - bool has_clippath = render_clippath(gc.clippath.path, gc.clippath.trans); + bool has_clippath = render_clippath(gc.clippath.path, gc.clippath.trans, gc.snap_mode); _draw_gouraud_triangle(points, colors, trans, has_clippath); } @@ -1263,7 +1263,7 @@ inline void RendererAgg::draw_gouraud_triangles(GCAgg &gc, theRasterizer.reset_clipping(); rendererBase.reset_clipping(true); set_clipbox(gc.cliprect, theRasterizer); - bool has_clippath = render_clippath(gc.clippath.path, gc.clippath.trans); + bool has_clippath = render_clippath(gc.clippath.path, gc.clippath.trans, gc.snap_mode); for (int i = 0; i < points.dim(0); ++i) { typename PointArray::sub_t point = points.subarray(i);