1 #include "ExportXThetaValuesMergedFunctions.h"
2 #include "ExportAlignLinear.h"
3 #include "ExportAlignLog.h"
4 #include "ExportLayoutFunctions.h"
5 #include "ExportPointsSelectionFunctions.h"
9 #include "Transformation.h"
14 const ValuesVectorXOrY &xThetaValuesRaw,
16 m_modelExport (modelExport),
17 m_xThetaValuesRaw (xThetaValuesRaw),
18 m_transformation (transformation)
22 void ExportXThetaValuesMergedFunctions::firstSimplestNumberLinear (
double &xThetaFirstSimplestNumber,
24 double &xThetaMax)
const
26 LOG4CPP_INFO_S ((*mainCat)) <<
"ExportXThetaValuesMergedFunctions::firstSimplestNumberLinear";
29 xThetaMin = m_xThetaValuesRaw.firstKey();
30 xThetaMax = m_xThetaValuesRaw.lastKey();
36 xThetaFirstSimplestNumber = alignLinear.firstSimplestNumber();
39 void ExportXThetaValuesMergedFunctions::firstSimplestNumberLog (
double &xThetaFirstSimplestNumber,
41 double &xThetaMax)
const
43 LOG4CPP_INFO_S ((*mainCat)) <<
"ExportXThetaValuesMergedFunctions::firstSimplestNumberLog";
46 xThetaMin = m_xThetaValuesRaw.firstKey();
47 xThetaMax = m_xThetaValuesRaw.lastKey();
53 xThetaFirstSimplestNumber = alignLog.firstSimplestNumber();
56 ExportValuesXOrY ExportXThetaValuesMergedFunctions::periodicLinear()
const
58 LOG4CPP_INFO_S ((*mainCat)) <<
"ExportXThetaValuesMergedFunctions::periodicLinear";
60 if (m_xThetaValuesRaw.count () > 0) {
62 double xThetaFirstSimplestNumber, xThetaMin, xThetaMax;
63 firstSimplestNumberLinear (xThetaFirstSimplestNumber,
70 return periodicLinearGraph(xThetaFirstSimplestNumber,
74 return periodicLinearScreen(xThetaMin,
79 ExportValuesXOrY emptyList;
84 ExportValuesXOrY ExportXThetaValuesMergedFunctions::periodicLinearGraph(
double xThetaFirstSimplestNumber,
86 double xThetaMax)
const
88 LOG4CPP_INFO_S ((*mainCat)) <<
"ExportXThetaValuesMergedFunctions::periodicLinearGraph";
91 ValuesVectorXOrY values;
92 double xTheta = xThetaFirstSimplestNumber;
93 while (xTheta > xThetaMin) {
96 if (xTheta < xThetaMin) {
97 values [xThetaMin] =
true;
101 while (xTheta <= xThetaMax) {
102 values [xTheta] =
true;
106 if (xTheta > xThetaMax) {
107 values [xThetaMax] =
true;
110 return values.keys();
113 ExportValuesXOrY ExportXThetaValuesMergedFunctions::periodicLinearScreen (
double xThetaMin,
114 double xThetaMax)
const
116 LOG4CPP_INFO_S ((*mainCat)) <<
"ExportXThetaValuesMergedFunctions::periodicLinearScreen";
118 const double ARBITRARY_Y = 0.0;
121 QPointF posScreenFirst, posScreenLast;
128 double deltaScreenX = posScreenLast.x() - posScreenFirst.x();
129 double deltaScreenY = posScreenLast.y() - posScreenFirst.y();
130 double deltaScreen = qSqrt (deltaScreenX * deltaScreenX + deltaScreenY * deltaScreenY);
135 if ((interval > 0) &&
136 (interval < deltaScreen)) {
137 s = interval / deltaScreen;
142 double xNext = xThetaMin + s * (xThetaMax - xThetaMin);
143 double delta = xNext - xThetaMin;
145 ValuesVectorXOrY values;
147 double xTheta = xThetaMin;
148 while (xTheta <= xThetaMax) {
150 values [xTheta] =
true;
155 return values.keys();
158 ExportValuesXOrY ExportXThetaValuesMergedFunctions::periodicLog()
const
160 LOG4CPP_INFO_S ((*mainCat)) <<
"ExportXThetaValuesMergedFunctions::periodicLog";
162 double xThetaFirstSimplestNumber, xThetaMin, xThetaMax;
163 firstSimplestNumberLog (xThetaFirstSimplestNumber,
170 return periodicLogGraph(xThetaFirstSimplestNumber,
174 return periodicLogScreen(xThetaMin,
179 ExportValuesXOrY ExportXThetaValuesMergedFunctions::periodicLogGraph (
double xThetaFirstSimplestNumber,
181 double xThetaMax)
const
183 LOG4CPP_INFO_S ((*mainCat)) <<
"ExportXThetaValuesMergedFunctions::periodicLogGraph";
186 ValuesVectorXOrY values;
187 double xTheta = xThetaFirstSimplestNumber;
188 while (xTheta > xThetaMin) {
191 if (xTheta < xThetaMin) {
192 values [xThetaMin] =
true;
196 while (xTheta <= xThetaMax) {
197 values [xTheta] =
true;
201 if (xTheta > xThetaMax) {
202 values [xThetaMax] =
true;
205 return values.keys();
208 ExportValuesXOrY ExportXThetaValuesMergedFunctions::periodicLogScreen (
double xThetaMin,
209 double xThetaMax)
const
211 LOG4CPP_INFO_S ((*mainCat)) <<
"ExportXThetaValuesMergedFunctions::periodicLogScreen";
213 const double ARBITRARY_Y = 0.0;
216 QPointF posScreenFirst, posScreenLast;
223 double deltaScreenX = posScreenLast.x() - posScreenFirst.x();
224 double deltaScreenY = posScreenLast.y() - posScreenFirst.y();
225 double deltaScreen = qSqrt (deltaScreenX * deltaScreenX + deltaScreenY * deltaScreenY);
230 if ((interval > 0) &&
231 (interval < deltaScreen)) {
232 s = interval / deltaScreen;
237 double xNext = qExp (qLn (xThetaMin) + s * (qLn (xThetaMax) - qLn (xThetaMin)));
238 double scale = xNext / xThetaMin;
240 ValuesVectorXOrY values;
242 double xTheta = xThetaMin;
243 while (xTheta <= xThetaMax) {
245 values [xTheta] =
true;
250 return values.keys();
255 LOG4CPP_INFO_S ((*mainCat)) <<
"ExportXThetaValuesMergedFunctions::xThetaValues";
262 ExportValuesXOrY empty;
269 return periodicLinear ();
271 return periodicLog ();
277 return m_xThetaValuesRaw.keys();
ExportXThetaValuesMergedFunctions(const DocumentModelExportFormat &modelExport, const ValuesVectorXOrY &xThetaValuesRaw, const Transformation &transformation)
Single constructor.
ExportValuesXOrY xThetaValues() const
Resulting x/theta values for all included functions.
Pick first simplest x value between specified min and max, for linear scaling.
Pick first simplest x value between specified min and max, for log scaling.
CoordScale coordScaleXTheta() const
Get method for linear/log scale on x/theta.