|
From: <md...@us...> - 2010-06-10 17:04:50
|
Revision: 8407
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8407&view=rev
Author: mdboom
Date: 2010-06-10 17:04:44 +0000 (Thu, 10 Jun 2010)
Log Message:
-----------
[2908399] Support clip paths in QuadMesh with gouraud shading
Modified Paths:
--------------
trunk/matplotlib/lib/matplotlib/backends/backend_svg.py
trunk/matplotlib/src/_backend_agg.cpp
Modified: trunk/matplotlib/lib/matplotlib/backends/backend_svg.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/backends/backend_svg.py 2010-06-10 14:06:50 UTC (rev 8406)
+++ trunk/matplotlib/lib/matplotlib/backends/backend_svg.py 2010-06-10 17:04:44 UTC (rev 8407)
@@ -370,6 +370,24 @@
self._n_gradients += 1
+ def draw_gouraud_triangles(self, gc, triangles_array, colors_array,
+ transform):
+ write = self._svgwriter.write
+
+ clipid = self._get_gc_clip_svg(gc)
+ if clipid is None:
+ clippath = ''
+ else:
+ clippath = 'clip-path="url(#%s)"' % clipid
+
+ write('<g %s>\n' % clippath)
+
+ transform = transform.frozen()
+ for tri, col in zip(triangles_array, colors_array):
+ self.draw_gouraud_triangle(gc, tri, col, transform)
+
+ write('</g>\n')
+
def draw_image(self, gc, x, y, im):
# MGDTODO: Support clippath here
trans = [1,0,0,1,0,0]
Modified: trunk/matplotlib/src/_backend_agg.cpp
===================================================================
--- trunk/matplotlib/src/_backend_agg.cpp 2010-06-10 14:06:50 UTC (rev 8406)
+++ trunk/matplotlib/src/_backend_agg.cpp 2010-06-10 17:04:44 UTC (rev 8407)
@@ -1532,7 +1532,7 @@
theRasterizer.reset_clipping();
rendererBase.reset_clipping(true);
set_clipbox(gc.cliprect, theRasterizer);
- /* TODO: Support clip paths */
+ bool has_clippath = render_clippath(gc.clippath, gc.clippath_trans);
trans *= agg::trans_affine_scaling(1.0, -1.0);
trans *= agg::trans_affine_translation(0.0, (double)height);
@@ -1560,7 +1560,19 @@
theRasterizer.add_path(span_gen);
- agg::render_scanlines_aa(theRasterizer, slineP8, rendererBase, span_alloc, span_gen);
+ if (has_clippath) {
+ typedef agg::pixfmt_amask_adaptor<pixfmt, alpha_mask_type> pixfmt_amask_type;
+ typedef agg::renderer_base<pixfmt_amask_type> amask_ren_type;
+ typedef agg::renderer_scanline_aa<amask_ren_type, span_alloc_t, span_gen_t>
+ amask_aa_renderer_type;
+
+ pixfmt_amask_type pfa(pixFmt, alphaMask);
+ amask_ren_type r(pfa);
+ amask_aa_renderer_type ren(r, span_alloc, span_gen);
+ agg::render_scanlines(theRasterizer, slineP8, ren);
+ } else {
+ agg::render_scanlines_aa(theRasterizer, slineP8, rendererBase, span_alloc, span_gen);
+ }
}
Py::Object
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|