Engauge Digitizer  2
ExportFileFunctions.h
Go to the documentation of this file.
1 /******************************************************************************************************
2  * (C) 2014 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 #ifndef EXPORT_FILE_FUNCTIONS_H
8 #define EXPORT_FILE_FUNCTIONS_H
9 
10 #include "CurveLimits.h"
11 #include "ExportFileAbstractBase.h"
12 #include "ExportValuesXOrY.h"
13 #include "Points.h"
14 #include <QStringList>
15 #include <QVector>
16 #include "ValuesVectorXOrY.h"
17 
18 class Document;
22 class MainWindowModel;
23 class QTextStream;
24 class Transformation;
25 
28 {
29  // For unit testing
30  friend class TestExport;
31 
32 public:
35 
38  void exportToFile (const DocumentModelExportFormat &modelExportOverride,
39  const Document &document,
40  const MainWindowModel &modelMainWindow,
41  const Transformation &transformation,
42  QTextStream &str,
43  unsigned int &numWritesSoFar) const;
44 
45 private:
46 
47  void exportAllPerLineXThetaValuesMerged (const DocumentModelExportFormat &modelExportOverride,
48  const Document &document,
49  const MainWindowModel &modelMainWindow,
50  const QStringList &curvesIncluded,
51  const ExportValuesXOrY &xThetaValues,
52  const QString &delimiter,
53  const Transformation &transformation,
54  bool isLogXTheta,
55  bool isLogYRadius,
56  const CurveLimits curveLimitsMin,
57  const CurveLimits curveLimitsMax,
58  QTextStream &str,
59  unsigned int &numWritesSoFar) const;
60  void exportOnePerLineXThetaValuesMerged (const DocumentModelExportFormat &modelExportOverride,
61  const Document &document,
62  const MainWindowModel &modelMainWindow,
63  const QStringList &curvesIncluded,
64  const ExportValuesXOrY &xThetaValues,
65  const QString &delimiter,
66  const Transformation &transformation,
67  bool isLogXTheta,
68  bool isLogYRadius,
69  const CurveLimits curveLimitsMin,
70  const CurveLimits curveLimitsMax,
71  QTextStream &str,
72  unsigned int &numWritesSoFar) const;
73 
77  void initializeYRadiusValues (const QStringList &curvesIncluded,
78  const ExportValuesXOrY &xThetaValuesMerged,
79  QVector<QVector<QString*> > &yRadiusValues) const;
80 
81  double linearlyInterpolate (const Points &points,
82  double xThetaValue,
83  const Transformation &transformation) const;
84  void loadYRadiusValues (const DocumentModelExportFormat &modelExportOverride,
85  const Document &document,
86  const MainWindowModel &modelMainWindow,
87  const QStringList &curvesIncluded,
88  const Transformation &transformation,
89  bool isLogXTheta,
90  bool isLogYRadius,
91  const ExportValuesXOrY &xThetaValues,
92  const CurveLimits &curveLimitsMin,
93  const CurveLimits &curveLimitsMax,
94  QVector<QVector<QString*> > &yRadiusValues) const;
95  void loadYRadiusValuesForCurveInterpolatedSmooth (const DocumentModelCoords &modelCoords,
96  const DocumentModelGeneral &modelGeneral,
97  const MainWindowModel &modelMainWindow,
98  const Points &points,
99  const ExportValuesXOrY &xThetaValues,
100  const Transformation &transformation,
101  bool isLogXTheta,
102  bool isLogYRadius,
103  const QString &curveName,
104  const CurveLimits &curveLimitsMin,
105  const CurveLimits &curveLimitsMax,
106  QVector<QString*> &yRadiusValues) const;
107  void loadYRadiusValuesForCurveInterpolatedStraight (const DocumentModelCoords &modelCoords,
108  const DocumentModelGeneral &modelGeneral,
109  const MainWindowModel &modelMainWindow,
110  const Points &points,
111  const ExportValuesXOrY &xThetaValues,
112  const Transformation &transformation,
113  const QString &curveName,
114  const CurveLimits &curveLimitsMin,
115  const CurveLimits &curveLimitsMax,
116  QVector<QString*> &yRadiusValues) const;
117  void loadYRadiusValuesForCurveRaw (const DocumentModelCoords &modelCoords,
118  const DocumentModelGeneral &modelGeneral,
119  const MainWindowModel &modelMainWindow,
120  const Points &points,
121  const ExportValuesXOrY &xThetaValues,
122  const Transformation &transformation,
123  const QString &curveName,
124  const CurveLimits &curveLimitsMin,
125  const CurveLimits &curveLimitsMax,
126  QVector<QString*> &yRadiusValues) const;
127 
129  void outputXThetaYRadiusValues (const DocumentModelExportFormat &modelExportOverride,
130  const DocumentModelCoords &modelCoords,
131  const DocumentModelGeneral &modelGeneral,
132  const MainWindowModel &modelMainWindow,
133  const QStringList &curvesIncluded,
134  const ExportValuesXOrY &xThetaValuesMerged,
135  const Transformation &transformation,
136  QVector<QVector<QString*> > &yRadiusValues,
137  const QString &delimiter,
138  QTextStream &str,
139  unsigned int &numWritesSoFar) const;
140  // Only include rows that have at least one y/radius entry. This check is required when outputing one curve per row
141  // since the union of all x/theta values is applied to each curve
142  bool rowHasAtLeastOneYRadiusEntry (const QVector<QVector<QString*> > &yRadiusValues,
143  int row) const;
144 
145  // If there are bounds for the curve, make sure xTheta is within those bounds
146  bool xThetaIsNotOutOfBounds (double xTheta,
147  const QString &curveName,
148  const CurveLimits &curveLimitsMin,
149  const CurveLimits &curveLimitsMax) const;
150 };
151 
152 #endif // EXPORT_FILE_FUNCTIONS_H
Model for DlgSettingsGeneral and CmdSettingsGeneral.
Model for DlgSettingsExportFormat and CmdSettingsExportFormat.
ExportFileFunctions()
Single constructor.
QHash< QString, double > CurveLimits
Definition: CurveLimits.h:14
Unit test of Export classes.
Definition: TestExport.h:16
Affine transformation between screen and graph coordinates, based on digitized axis points...
Model for DlgSettingsMainWindow.
QList< double > ExportValuesXOrY
Model for DlgSettingsCoords and CmdSettingsCoords.
Storage of one imported image and the data attached to that image.
Definition: Document.h:41
QList< Point > Points
Definition: Points.h:13
Strategy base class for exporting to a file. This class provides common methods.
Strategy class for exporting to a file. This strategy is external to the Document class so that class...
void exportToFile(const DocumentModelExportFormat &modelExportOverride, const Document &document, const MainWindowModel &modelMainWindow, const Transformation &transformation, QTextStream &str, unsigned int &numWritesSoFar) const
Export Document points according to the settings.