Revision: 6814
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=6814&view=rev
Author: mdboom
Date: 2009-01-21 14:52:26 +0000 (Wed, 21 Jan 2009)
Log Message:
-----------
Change simplification algorithm so it always returns points from the original
data, rather than extrapolated ones. This is somewhat experimental.
Modified Paths:
--------------
trunk/matplotlib/src/agg_py_path_iterator.h
Modified: trunk/matplotlib/src/agg_py_path_iterator.h
===================================================================
--- trunk/matplotlib/src/agg_py_path_iterator.h 2009-01-21 14:25:11 UTC (rev
6813)
+++ trunk/matplotlib/src/agg_py_path_iterator.h 2009-01-21 14:52:26 UTC (rev
6814)
@@ -142,8 +142,8 @@
m_do_clipping(width > 0.0 && height > 0.0),
m_origdx(0.0), m_origdy(0.0),
m_origdNorm2(0.0), m_dnorm2Max(0.0), m_dnorm2Min(0.0),
- m_haveMin(false), m_lastMax(false), m_maxX(0.0), m_maxY(0.0),
- m_minX(0.0), m_minY(0.0), m_lastWrittenX(0.0), m_lastWrittenY(0.0)
+ m_lastMax(false), m_nextX(0.0), m_nextY(0.0),
+ m_lastWrittenX(0.0), m_lastWrittenY(0.0)
#if DEBUG_SIMPLIFY
, m_pushed(0), m_skipped(0)
#endif
@@ -302,13 +302,12 @@
//set all the variables to reflect this new orig vector
m_dnorm2Max = m_origdNorm2;
m_dnorm2Min = 0.0;
- m_haveMin = false;
m_lastMax = true;
- m_lastx = m_maxX = *x;
- m_lasty = m_maxY = *y;
- m_lastWrittenX = m_minX = m_lastx;
- m_lastWrittenY = m_minY = m_lasty;
+ m_nextX = m_lastWrittenX = m_lastx;
+ m_nextY = m_lastWrittenY = m_lasty;
+ m_lastx = *x;
+ m_lasty = *y;
#if DEBUG_SIMPLIFY
m_skipped++;
#endif
@@ -358,18 +357,17 @@
{
m_lastMax = true;
m_dnorm2Max = paradNorm2;
- m_maxX = m_lastWrittenX + paradx;
- m_maxY = m_lastWrittenY + parady;
+ m_nextX = *x;
+ m_nextY = *y;
}
}
else
{
- m_haveMin = true;
if (paradNorm2 > m_dnorm2Min)
{
m_dnorm2Min = paradNorm2;
- m_minX = m_lastWrittenX + paradx;
- m_minY = m_lastWrittenY + parady;
+ m_nextX = *x;
+ m_nextY = *y;
}
}
@@ -394,17 +392,12 @@
}
// Fill the queue with the remaining vertices if we've finished the
- // path in the above loop. Mark the path as done, so we don't call
- // m_source->vertex again and segfault.
+ // path in the above loop.
if (cmd == agg::path_cmd_stop)
{
if (m_origdNorm2 != 0.0)
{
- if (m_haveMin)
- {
- queue_push(agg::path_cmd_line_to, m_minX, m_minY);
- }
- queue_push(agg::path_cmd_line_to, m_maxX, m_maxY);
+ queue_push(agg::path_cmd_line_to, m_nextX, m_nextY);
}
queue_push(agg::path_cmd_stop, 0.0, 0.0);
}
@@ -459,12 +452,9 @@
double m_origdNorm2;
double m_dnorm2Max;
double m_dnorm2Min;
- bool m_haveMin;
bool m_lastMax;
- double m_maxX;
- double m_maxY;
- double m_minX;
- double m_minY;
+ double m_nextX;
+ double m_nextY;
double m_lastWrittenX;
double m_lastWrittenY;
@@ -517,11 +507,7 @@
inline void _push(double* x, double* y)
{
- if (m_haveMin)
- {
- queue_push(agg::path_cmd_line_to, m_minX, m_minY);
- }
- queue_push(agg::path_cmd_line_to, m_maxX, m_maxY);
+ queue_push(agg::path_cmd_line_to, m_nextX, m_nextY);
//if we clipped some segments between this line and the next line
//we are starting, we also need to move to the last point.
@@ -546,12 +532,11 @@
m_dnorm2Max = m_origdNorm2;
m_dnorm2Min = 0.0;
- m_haveMin = false;
m_lastMax = true;
- m_lastx = m_maxX = *x;
- m_lasty = m_maxY = *y;
- m_lastWrittenX = m_minX = m_lastx;
- m_lastWrittenY = m_minY = m_lasty;
+ m_lastWrittenX = m_queue[m_queue_write-1].x;
+ m_lastWrittenY = m_queue[m_queue_write-1].y;
+ m_lastx = m_nextX = *x;
+ m_lasty = m_nextY = *y;
m_clipped = false;
#if DEBUG_SIMPLIFY
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