Engauge Digitizer  2
ExportFileFunctions.h
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.
Unit test of Export classes.
Definition: TestExport.h:16
Affine transformation between screen and graph coordinates, based on digitized axis points.
Model for DlgSettingsMainWindow.
Model for DlgSettingsCoords and CmdSettingsCoords.
Storage of one imported image and the data attached to that image.
Definition: Document.h:41
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.