|
From: <md...@us...> - 2009-10-22 13:43:42
|
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.
|