Revision: 5304
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=5304&view=rev
Author:   jdh2358
Date:     2008-05-29 11:25:15 -0700 (Thu, 29 May 2008)

Log Message:
-----------
added clippath support for ps

Modified Paths:
--------------
    branches/v0_91_maint/examples/polar_demo.py
    branches/v0_91_maint/lib/matplotlib/backends/backend_ps.py
    branches/v0_91_maint/lib/matplotlib/backends/backend_svg.py

Modified: branches/v0_91_maint/examples/polar_demo.py
===================================================================
--- branches/v0_91_maint/examples/polar_demo.py 2008-05-29 16:44:49 UTC (rev 
5303)
+++ branches/v0_91_maint/examples/polar_demo.py 2008-05-29 18:25:15 UTC (rev 
5304)
@@ -57,4 +57,6 @@
 ax.set_rmax(2.0)
 
 ax.set_title("And there was much rejoicing!", fontsize=20)
+
+fig.savefig('polar_demo')
 show()

Modified: branches/v0_91_maint/lib/matplotlib/backends/backend_ps.py
===================================================================
--- branches/v0_91_maint/lib/matplotlib/backends/backend_ps.py  2008-05-29 
16:44:49 UTC (rev 5303)
+++ branches/v0_91_maint/lib/matplotlib/backends/backend_ps.py  2008-05-29 
18:25:15 UTC (rev 5304)
@@ -150,6 +150,8 @@
         self.used_characters = {}
         self.mathtext_parser = MathTextParser("PS")
 
+        self._clip_paths = dict()
+        
     def track_characters(self, font, s):
         """Keeps track of which characters are required from
         each font."""
@@ -445,6 +447,49 @@
         ps = '%1.4g %1.4g m %1.4g %1.4g l'%(x0, y0, x1, y1)
         self._draw_ps(ps, gc, None, "line")
 
+    def _get_clippath_command(self, clippath):
+        id = self._clip_paths.get(clippath)
+        if id is None:
+            id = 'c%x' % len(self._clip_paths)
+            ps_cmd = ['/%s {' % id]
+            ps_cmd.append(self._get_path(clippath))
+            ps_cmd.extend(['clip', 'newpath', '} bind def\n'])
+            self._pswriter.write('\n'.join(ps_cmd))
+            self._clip_paths[clippath] = id
+
+        return '%s\n'%id
+
+    def _get_path(self, path):
+        cmd = []
+        while 1:
+            code, xp, yp = path.vertex()
+
+
+            if code == agg.path_cmd_stop:
+                cmd.append('closepath\n')
+                break
+            elif code == agg.path_cmd_move_to:
+                cmd.append('%g %g m' % (xp, yp))
+            elif code == agg.path_cmd_line_to:
+                cmd.append('%g %g l' % (xp, yp))
+            elif code == agg.path_cmd_curve3:
+                verts = [xp, yp]
+                verts.extend(path.vertex()[1:])
+                cmd.append('%g %g %g %g %g %g c' % (verts[0], verts[1],
+                           verts[0], verts[1],
+                           verts[2], verts[3]))
+            elif code == agg.path_cmd_curve4:
+                verts = [xp, yp]
+                verts.extend(path.vertex()[1:])
+                verts.extend(path.vertex()[1:])
+                cmd.append('%g %g %g %g %g %g c'%tuple(verts))
+            elif code == agg.path_cmd_end_poly:
+                cmd.append('cl\n')
+
+        if len(cmd)==0:
+            return None
+        return '\n'.join(cmd)
+
     def draw_markers(self, gc, path, rgbFace, x, y, transform):
         """
         Draw the markers defined by path at each of the positions in x
@@ -515,10 +560,17 @@
         mask = npy.where(npy.isnan(x) + npy.isnan(y), 0, 1)
 
         cliprect = gc.get_clip_rectangle()
+        clippath = gc.get_clip_path()
         if cliprect:
             write('gsave\n')
             xc,yc,wc,hc=cliprect
             write('%g %g %g %g clipbox\n' % (wc,hc,xc,yc))
+        if clippath:
+            write('gsave\n')
+            cmd = self._get_clippath_command(clippath)
+            write(cmd)
+
+
         write(' '.join(['/o {', ps_cmd, '} bind def\n']))
         # Now evaluate the marker command at each marker location:
         while start < len(x):
@@ -527,8 +579,11 @@
             write('\n'.join(ps)+'\n')
             start = end
             end += step
+
         if cliprect: write('grestore\n')
+        if clippath: write('grestore\n')
 
+
     def draw_path(self, gc, rgbFace, path):
 
         ps_cmd = []
@@ -594,10 +649,17 @@
 
         self.push_gc(gc, store=1)
         cliprect = gc.get_clip_rectangle()
+        clippath = gc.get_clip_path()
+
         if cliprect:
             write('gsave\n')
             xc,yc,wc,hc=cliprect
             write('%g %g %g %g clipbox\n' % (wc,hc,xc,yc))
+        if clippath:
+            write('gsave\n')
+            cmd = self._get_clippath_command(clippath)
+            write(cmd)
+
         while start < len(points):
             drawone.state = 'm'
             ps = [i for i in [drawone(x,y,s) for x,y,s in points[start:end+1]]\
@@ -607,8 +669,8 @@
             start = end
             end += step
         if cliprect: write('grestore\n')
+        if clippath: write('grestore\n')
 
-
     def draw_lines_old(self, gc, x, y, transform=None):
         """
         x and y are npy.equal length arrays, draw lines connecting each
@@ -633,11 +695,18 @@
             self.push_gc(gc, store=1)
 
             cliprect = gc.get_clip_rectangle()
+            clippath = gc.get_clip_path()
+
             if cliprect:
                 write('gsave\n')
                 xc,yc,wc,hc=cliprect
                 write('%g %g %g %g clipbox\n' % (wc,hc,xc,yc))
 
+            if clippath:
+                write('gsave\n')
+                cmd = self._get_clippath_command(clippath)
+                write(cmd)
+
         steps  = 50
         start  = 0
         end    = steps
@@ -672,7 +741,7 @@
             end   += steps
         if transform:
             if cliprect: write("grestore\n")
-
+            if clippath: write('grestore\n')
     def draw_point(self, gc, x, y):
         """
         Draw a single point at x,y
@@ -930,6 +999,7 @@
             write("% "+command+"\n")
 
         cliprect = gc.get_clip_rectangle()
+        clippath = gc.get_clip_path()
         self.set_color(*gc.get_rgb())
         self.set_linewidth(gc.get_linewidth())
         jint = gc.get_joinstyle()
@@ -941,6 +1011,13 @@
         if cliprect:
             x,y,w,h=cliprect
             write('gsave\n%1.4g %1.4g %1.4g %1.4g clipbox\n' % (w,h,x,y))
+
+        if clippath:
+            write('gsave\n')
+            cmd = self._get_clippath_command(clippath)
+            write(cmd)
+
+
         # Jochen, is the strip necessary? - this could be a honking big string
         write(ps.strip())
         write("\n")
@@ -962,6 +1039,9 @@
         if cliprect:
             write("grestore\n")
 
+        if clippath:
+            write('grestore\n')
+
     def push_gc(self, gc, store=1):
         """
         Push the current onto stack, with the exception of the clip box, which

Modified: branches/v0_91_maint/lib/matplotlib/backends/backend_svg.py
===================================================================
--- branches/v0_91_maint/lib/matplotlib/backends/backend_svg.py 2008-05-29 
16:44:49 UTC (rev 5303)
+++ branches/v0_91_maint/lib/matplotlib/backends/backend_svg.py 2008-05-29 
18:25:15 UTC (rev 5304)
@@ -71,7 +71,7 @@
                 cmd.append('L%g %g' % (xp, yp))
             elif code == agg.path_cmd_curve3:
                 verts = [xp, yp]
-                verts.extent(path.vertex()[1:])
+                verts.extend(path.vertex()[1:])
                 verts[-1] = self.height - verts[-1]
                 cmd.append('Q%g %g %g %g' % tuple(verts))
             elif code == agg.path_cmd_curve4:


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
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-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to