Revision: 6868
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=6868&view=rev
Author:   jouni
Date:     2009-02-02 19:35:43 +0000 (Mon, 02 Feb 2009)

Log Message:
-----------
Reduce number of marker objects in pdf output

Modified Paths:
--------------
    trunk/matplotlib/CHANGELOG
    trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py

Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG  2009-02-02 17:58:48 UTC (rev 6867)
+++ trunk/matplotlib/CHANGELOG  2009-02-02 19:35:43 UTC (rev 6868)
@@ -1,3 +1,5 @@
+2009-02-02 Reduce number of marker XObjects in pdf output - JKS
+
 2009-02-02 Change default resolution on polar plot to 1 - MGD
 
 2009-02-02 Avoid malloc errors in ttconv for fonts that don't have

Modified: trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py     2009-02-02 
17:58:48 UTC (rev 6867)
+++ trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py     2009-02-02 
19:35:43 UTC (rev 6868)
@@ -1109,26 +1109,28 @@
 
     def markerObject(self, path, trans, fillp, lw):
         """Return name of a marker XObject representing the given path."""
-        key = (path, trans, fillp is not None, lw)
+        pathops = self.pathOperations(path, trans)
+        key = (tuple(pathops), bool(fillp))
         result = self.markers.get(key)
         if result is None:
             name = Name('M%d' % len(self.markers))
             ob = self.reserveObject('marker %d' % len(self.markers))
-            self.markers[key] = (name, ob, path, trans, fillp, lw)
+            bbox = path.get_extents(trans)
+            self.markers[key] = [name, ob, bbox, lw]
         else:
+            if result[-1] < lw:
+                result[-1] = lw
             name = result[0]
         return name
 
     def writeMarkers(self):
-        for tup in self.markers.values():
-            name, object, path, trans, fillp, lw = tup
-            bbox = path.get_extents(trans)
+        for (pathops, fillp),(name, ob, bbox, lw) in self.markers.iteritems():
             bbox = bbox.padded(lw * 0.5)
             self.beginStream(
-                object.id, None,
+                ob.id, None,
                 {'Type': Name('XObject'), 'Subtype': Name('Form'),
                  'BBox': list(bbox.extents) })
-            self.writePath(path, trans)
+            self.output(*pathops)
             if fillp:
                 self.output(Op.fill_stroke)
             else:
@@ -1280,10 +1282,17 @@
 
     def draw_path(self, gc, path, transform, rgbFace=None):
         self.check_gc(gc, rgbFace)
-        stream = self.file.writePath(path, transform, rgbFace is None)
+        self.file.writePath(path, transform, rgbFace is None)
         self.file.output(self.gc.paint())
 
     def draw_markers(self, gc, marker_path, marker_trans, path, trans, 
rgbFace=None):
+        # For simple paths or small numbers of markers, don't bother
+        # making an XObject
+        if len(path) * len(marker_path) <= 10:
+            RendererBase.draw_markers(self, gc, marker_path, marker_trans,
+                                      path, trans, rgbFace)
+            return
+
         self.check_gc(gc, rgbFace)
         fillp = rgbFace is not None
 


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:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to