Engauge Digitizer  2
CallbackGatherXThetasAbstractBase.cpp
1 /******************************************************************************************************
2  * (C) 2019 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
3  * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
4  * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
5  ******************************************************************************************************/
6 
7 #include "CallbackGatherXThetasAbstractBase.h"
8 #include "DocumentModelExportFormat.h"
9 #include "EngaugeAssert.h"
10 #include "ExportAlignLinear.h"
11 #include "ExportAlignLog.h"
12 #include "ExportLayoutFunctions.h"
13 #include "ExportPointsSelectionFunctions.h"
14 #include "Logger.h"
15 #include "Point.h"
16 
18  bool extrapolateOutsideEndpoints,
19  const QStringList &curvesIncluded,
20  const Transformation &transformation) :
21  m_extrapolateOutsideEndpoints (extrapolateOutsideEndpoints),
22  m_curvesIncluded (curvesIncluded),
23  m_transformation (transformation)
24 {
25  // Include just the first curve, or all curves depending on DocumentModelExportFormat
26  QStringList::const_iterator itr;
27  for (itr = curvesIncluded.begin(); itr != curvesIncluded.end(); itr++) {
28 
29  QString curveIncluded = *itr;
30  m_curvesIncludedHash [curveIncluded] = true;
31 
32  if (firstCurveOnly) {
33 
34  // We only want points belonging to the first included curve so exit this loop
35  break;
36 
37  }
38  }
39 }
40 
41 CallbackGatherXThetasAbstractBase::~CallbackGatherXThetasAbstractBase()
42 {
43 }
44 
46 {
47  m_xThetaValues [xGraph] = true;
48 }
49 
51 {
52  return m_curveLimitsMax;
53 }
54 
56 {
57  return m_curveLimitsMin;
58 }
59 
61 {
62  return m_curvesIncluded;
63 }
64 
66 {
67  return m_curvesIncludedHash;
68 }
69 
71 {
72  return m_transformation;
73 }
74 
75 void CallbackGatherXThetasAbstractBase::updateMinMax (const QString &curveName,
76  const Point &point)
77 {
78  // Skip unless the endpoints are to be collected. We update the min/max values
79  // even if the curve is not curvesIncludedHash since endpoints are sometimes
80  // required for curves other than the first when collecting just xTheta values from
81  // the first curve
82  if (!m_extrapolateOutsideEndpoints) {
83 
84  QPointF posGraph;
86  posGraph);
87 
88  if (!m_curveLimitsMin.contains (curveName) ||
89  posGraph.x() < m_curveLimitsMin [curveName]) {
90 
91  m_curveLimitsMin [curveName] = posGraph.x ();
92  }
93 
94  if (!m_curveLimitsMax.contains (curveName) ||
95  posGraph.x() > m_curveLimitsMax [curveName]) {
96 
97  m_curveLimitsMax [curveName] = posGraph.x ();
98  }
99  }
100 }
101 
103 {
104  LOG4CPP_INFO_S ((*mainCat)) << "CallbackGatherXThetasAbstractBase::xThetaValuesRaw";
105 
106  return m_xThetaValues;
107 }
ValuesVectorXOrY xThetaValuesRaw() const
Resulting x/theta values for all included functions.
QStringList curvesIncluded() const
Get method for included names.
const Transformation & transformation() const
Get method for transformation.
void updateMinMax(const QString &curveName, const Point &point)
Update the tracked min and max values for each curve.
Class that represents one digitized point. The screen-to-graph coordinate transformation is always ex...
Definition: Point.h:25
QPointF posScreen() const
Accessor for screen position.
Definition: Point.cpp:404
CallbackGatherXThetasAbstractBase(bool firstCurveOnly, bool extrapolateOutsideEndpoints, const QStringList &curvesIncluded, const Transformation &transformation)
Single constructor.
void addGraphX(double xGraph)
Save one graph x value.
Affine transformation between screen and graph coordinates, based on digitized axis points.
CurveLimits curveLimitsMax() const
Endpoint maxima for each curve, if extrapolation has been disabled.
CurveLimits curveLimitsMin() const
Endpoint minima for each curve, if extrapolation has been disabled.
void transformScreenToRawGraph(const QPointF &coordScreen, QPointF &coordGraph) const
Transform from cartesian pixel screen coordinates to cartesian/polar graph coordinates.
CurvesIncludedHash curvesIncludedHash() const
Get method for included names as hash.