Michael Hearne <mhea...@usgs.gov> writes:

> 2) Patch my current code with the fix already in SVN.  I would need
> someone to point me to the relevant files, and give me some pointers
> on applying the patch.

The bug was fixed in revision 7900, and revision 7899 introduced a check
in the pdf backend that raises an exception instead of outputting
invalid pdf. If you can build some old revisions (and your FreeType issue
is caused by some newer changes in matplotlib) you could apply just
these changes to a buildable revision and see if it works.

Index: src/path_converters.h
===================================================================
--- src/path_converters.h	(revision 7898)
+++ src/path_converters.h	(revision 7900)
@@ -684,9 +684,15 @@
         {
             if (m_origdNorm2 != 0.0)
             {
-                queue_push(agg::path_cmd_line_to, m_nextX, m_nextY);
+                queue_push((m_moveto || m_after_moveto) ?
+                           agg::path_cmd_move_to : agg::path_cmd_line_to,
+                           m_nextX, m_nextY);
+                m_moveto = false;
             }
-            queue_push(agg::path_cmd_line_to, m_lastx, m_lasty);
+            queue_push((m_moveto || m_after_moveto) ?
+                       agg::path_cmd_move_to : agg::path_cmd_line_to,
+                       m_lastx, m_lasty);
+            m_moveto = false;
             queue_push(agg::path_cmd_stop, 0.0, 0.0);
         }
 
Index: lib/matplotlib/tests/test_simplification.py
===================================================================
--- lib/matplotlib/tests/test_simplification.py	(revision 7898)
+++ lib/matplotlib/tests/test_simplification.py	(revision 7900)
@@ -2,11 +2,10 @@
 import matplotlib
 from matplotlib.testing.decorators import image_comparison, knownfailureif
 import matplotlib.pyplot as plt
-from matplotlib import patches, path
 
 from pylab import *
 import numpy as np
-from matplotlib import patches, path
+from matplotlib import patches, path, transforms
 nan = np.nan
 Path = path.Path
 
@@ -134,6 +133,38 @@
 
     assert len(simplified) == 13
 
+def test_start_with_moveto():
+    # Should be entirely clipped away to a single MOVETO
+    data = """
+ZwAAAAku+v9UAQAA+Tj6/z8CAADpQ/r/KAMAANlO+v8QBAAAyVn6//UEAAC6ZPr/2gUAAKpv+v+8
+BgAAm3r6/50HAACLhfr/ewgAAHyQ+v9ZCQAAbZv6/zQKAABepvr/DgsAAE+x+v/lCwAAQLz6/7wM
+AAAxx/r/kA0AACPS+v9jDgAAFN36/zQPAAAF6Pr/AxAAAPfy+v/QEAAA6f36/5wRAADbCPv/ZhIA
+AMwT+/8uEwAAvh77//UTAACwKfv/uRQAAKM0+/98FQAAlT/7/z0WAACHSvv//RYAAHlV+/+7FwAA
+bGD7/3cYAABea/v/MRkAAFF2+//pGQAARIH7/6AaAAA3jPv/VRsAACmX+/8JHAAAHKL7/7ocAAAP
+rfv/ah0AAAO4+/8YHgAA9sL7/8QeAADpzfv/bx8AANzY+/8YIAAA0OP7/78gAADD7vv/ZCEAALf5
++/8IIgAAqwT8/6kiAACeD/z/SiMAAJIa/P/oIwAAhiX8/4QkAAB6MPz/HyUAAG47/P+4JQAAYkb8
+/1AmAABWUfz/5SYAAEpc/P95JwAAPmf8/wsoAAAzcvz/nCgAACd9/P8qKQAAHIj8/7cpAAAQk/z/
+QyoAAAWe/P/MKgAA+aj8/1QrAADus/z/2isAAOO+/P9eLAAA2Mn8/+AsAADM1Pz/YS0AAMHf/P/g
+LQAAtur8/10uAACr9fz/2C4AAKEA/f9SLwAAlgv9/8ovAACLFv3/QDAAAIAh/f+1MAAAdSz9/ycx
+AABrN/3/mDEAAGBC/f8IMgAAVk39/3UyAABLWP3/4TIAAEFj/f9LMwAANm79/7MzAAAsef3/GjQA
+ACKE/f9+NAAAF4/9/+E0AAANmv3/QzUAAAOl/f+iNQAA+a/9/wA2AADvuv3/XDYAAOXF/f+2NgAA
+29D9/w83AADR2/3/ZjcAAMfm/f+7NwAAvfH9/w44AACz/P3/XzgAAKkH/v+vOAAAnxL+//04AACW
+Hf7/SjkAAIwo/v+UOQAAgjP+/905AAB5Pv7/JDoAAG9J/v9pOgAAZVT+/606AABcX/7/7zoAAFJq
+/v8vOwAASXX+/207AAA/gP7/qjsAADaL/v/lOwAALZb+/x48AAAjof7/VTwAABqs/v+LPAAAELf+
+/788AAAHwv7/8TwAAP7M/v8hPQAA9df+/1A9AADr4v7/fT0AAOLt/v+oPQAA2fj+/9E9AADQA///
++T0AAMYO//8fPgAAvRn//0M+AAC0JP//ZT4AAKsv//+GPgAAojr//6U+AACZRf//wj4AAJBQ///d
+PgAAh1v///c+AAB+Zv//Dz8AAHRx//8lPwAAa3z//zk/AABih///TD8AAFmS//9dPwAAUJ3//2w/
+AABHqP//ej8AAD6z//+FPwAANb7//48/AAAsyf//lz8AACPU//+ePwAAGt///6M/AAAR6v//pj8A
+AAj1//+nPwAA/////w=="""
+
+    verts = np.fromstring(data.decode('base64'), dtype='<i4')
+    verts = verts.reshape((len(verts) / 2, 2))
+    path = Path(verts)
+    segs = path.iter_segments(transforms.IdentityTransform, clip=(0.0, 0.0, 100.0, 100.0))
+    segs = list(segs)
+    assert len(segs) == 1
+    assert segs[0][1] == Path.MOVETO
+
 if __name__=='__main__':
     import nose
     nose.runmodule(argv=['-s','--with-doctest'], exit=False)
Index: lib/matplotlib/path.py
===================================================================
--- lib/matplotlib/path.py	(revision 7898)
+++ lib/matplotlib/path.py	(revision 7900)
@@ -115,6 +115,8 @@
             codes = np.asarray(codes, self.code_type)
             assert codes.ndim == 1
             assert len(codes) == len(vertices)
+            if len(codes):
+                assert codes[0] == self.MOVETO
 
         assert vertices.ndim == 2
         assert vertices.shape[1] == 2
Index: lib/matplotlib/backends/backend_pdf.py
===================================================================
--- lib/matplotlib/backends/backend_pdf.py	(revision 7898)
+++ lib/matplotlib/backends/backend_pdf.py	(revision 7900)
@@ -1206,8 +1206,12 @@
         last_points = None
         for points, code in path.iter_segments(transform, clip=clip):
             if code == Path.MOVETO:
+                # This is allowed anywhere in the path
                 cmds.extend(points)
                 cmds.append(Op.moveto)
+            elif last_points is None:
+                # The other operations require a previous point
+                raise ValueError, 'Path lacks initial MOVETO'
             elif code == Path.LINETO:
                 cmds.extend(points)
                 cmds.append(Op.lineto)
-- 
Jouni K. Seppänen
http://www.iki.fi/jks
------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to