7 #include "EngaugeAssert.h"
10 #include "SplineDrawer.h"
13 m_transformation (transformation)
20 m_segmentOperations.resize (numSegments);
25 for (
int segment = 0; segment < numSegments; segment++) {
27 bool itsAKeeper =
true;
31 if (segmentIsMultiValued (spline,
38 m_segmentOperations [segment] = (itsAKeeper ?
39 SPLINE_DRAWER_ENUM_VISIBLE_DRAW :
40 SPLINE_DRAWER_ENUM_INVISIBLE_MOVE);
45 bool SplineDrawer::segmentIsMultiValued (
const Spline &spline,
52 (segment < numSegments - 1)) {
55 double tI = (double) segment;
56 double tIp1 = (double) (segment + 1);
62 int deltaX = posScreenEnd.
x() - posScreenStart.
x();
63 int deltaY = posScreenEnd.
y() - posScreenStart.
y();
64 double pixelDistance = qSqrt (deltaX * deltaX + deltaY * deltaY);
65 double numSteps = pixelDistance;
68 double tIDelta = 1.0 / numSteps;
69 for (
int itI = 1; itI < numSteps - 1; itI++) {
71 double tIm1 = segment + (itI - 1) * tIDelta;
72 double tI = segment + (itI ) * tIDelta;
73 double tIp1 = segment + (itI + 1) * tIDelta;
79 QPointF posScreenBefore (spBefore.x(), spBefore.y());
80 QPointF posScreenCurrent (spCurrent.
x(), spCurrent.
y());
81 QPointF posScreenAfter (spAfter.
x(), spAfter.
y());
83 QPointF posGraphBefore, posGraphCurrent, posGraphAfter;
93 double deltaXBefore = posGraphCurrent.x() - posGraphBefore.x();
94 double deltaXAfter = posGraphAfter.x() - posGraphCurrent.x();
96 if ((deltaXBefore > 0 && deltaXAfter < 0) ||
97 (deltaXBefore < 0 && deltaXAfter > 0)) {
110 if (segment < m_segmentOperations.count()) {
111 return m_segmentOperations.at (segment);
113 return SPLINE_DRAWER_ENUM_INVISIBLE_MOVE;
SplinePair interpolateCoeff(double t) const
Return interpolated y for specified x.
Cubic interpolation given independent and dependent value vectors.
double y() const
Get method for y.
void bindToSpline(int numSegments, const Spline &spline)
Analyze each segment in the Spline.
SplineDrawerOperation segmentOperation(int segment) const
Indicate if, and how, segment is to be drawn.
SplineDrawer(const Transformation &transformation)
Single constructor.
double x() const
Get method for x.
Single X/Y pair for cubic spline interpolation initialization and calculations.