Revision: 7900
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7900&view=rev
Author: mdboom
Date: 2009-10-22 13:43:31 +0000 (Thu, 22 Oct 2009)
Log Message:
-----------
Fix path simplification so the path always starts with a MOVETO.
Modified Paths:
--------------
trunk/matplotlib/lib/matplotlib/path.py
trunk/matplotlib/lib/matplotlib/tests/test_simplification.py
trunk/matplotlib/src/path_converters.h
Modified: trunk/matplotlib/lib/matplotlib/path.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/path.py 2009-10-21 18:41:35 UTC (rev
7899)
+++ trunk/matplotlib/lib/matplotlib/path.py 2009-10-22 13:43:31 UTC (rev
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
Modified: trunk/matplotlib/lib/matplotlib/tests/test_simplification.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/tests/test_simplification.py
2009-10-21 18:41:35 UTC (rev 7899)
+++ trunk/matplotlib/lib/matplotlib/tests/test_simplification.py
2009-10-22 13:43:31 UTC (rev 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)
Modified: trunk/matplotlib/src/path_converters.h
===================================================================
--- trunk/matplotlib/src/path_converters.h 2009-10-21 18:41:35 UTC (rev
7899)
+++ trunk/matplotlib/src/path_converters.h 2009-10-22 13:43:31 UTC (rev
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);
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins