Engauge Digitizer  2
GeometryStrategyRelationSmooth.cpp
1 /******************************************************************************************************
2  * (C) 2016 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 "GeometryStrategyRelationSmooth.h"
8 #include "Transformation.h"
9 
11 {
12 }
13 
14 GeometryStrategyRelationSmooth::~GeometryStrategyRelationSmooth()
15 {
16 }
17 
19  const DocumentModelCoords &modelCoords,
20  const DocumentModelGeneral &modelGeneral,
21  const MainWindowModel &modelMainWindow,
22  const Transformation &transformation,
23  QString &funcArea,
24  QString &polyArea,
25  QVector<QString> &x,
26  QVector<QString> &y,
27  QVector<QString> &distanceGraphForward,
28  QVector<QString> &distancePercentForward,
29  QVector<QString> &distanceGraphBackward,
30  QVector<QString> &distancePercentBackward) const
31 {
32  const int NUM_SUB_INTERVALS_SMOOTH = 10; // One input point becomes NUM_SUB_INTERVALS points to account for smoothing
33 
34  QVector<QPointF> positionsGraph, positionsGraphWithSubintervals;
36  transformation,
37  positionsGraph);
38 
39  insertSubintervalsAndLoadDistances (NUM_SUB_INTERVALS_SMOOTH,
40  positionsGraph,
41  positionsGraphWithSubintervals,
42  distanceGraphForward,
43  distancePercentForward,
44  distanceGraphBackward,
45  distancePercentBackward);
46  double pArea = polygonAreaForSimplyConnected (positionsGraphWithSubintervals);
47 
48  loadXY (positionsGraph,
49  modelCoords,
50  modelGeneral,
51  modelMainWindow,
52  transformation,
53  x,
54  y);
55 
56  // Set header values
57  funcArea = "";
58  polyArea = QString::number (pArea);
59 }
Model for DlgSettingsGeneral and CmdSettingsGeneral.
virtual void calculateGeometry(const Points &points, const DocumentModelCoords &modelCoords, const DocumentModelGeneral &modelGeneral, const MainWindowModel &modelMainWindow, const Transformation &transformation, QString &funcArea, QString &polyArea, QVector< QString > &x, QVector< QString > &y, QVector< QString > &distanceGraphForward, QVector< QString > &distancePercentForward, QVector< QString > &distanceGraphBackward, QVector< QString > &distancePercentBackward) const
Calculate geometry parameters.
void calculatePositionsGraph(const Points &points, const Transformation &transformation, QVector< QPointF > &positionsGraph) const
Convert screen positions to graph positions.
void loadXY(const QVector< QPointF > &positionsGraph, const DocumentModelCoords &modelCoords, const DocumentModelGeneral &modelGeneral, const MainWindowModel &modelMainWindow, const Transformation &transformation, QVector< QString > &x, QVector< QString > &y) const
Load x and y coordinate vectors.
Affine transformation between screen and graph coordinates, based on digitized axis points...
Model for DlgSettingsMainWindow.
Model for DlgSettingsCoords and CmdSettingsCoords.
double polygonAreaForSimplyConnected(const QVector< QPointF > &points) const
Area in polygon using Shoelace formula, which only works if polygon is simply connected.
void insertSubintervalsAndLoadDistances(int subintervalsPerInterval, const QVector< QPointF > &positionsGraph, QVector< QPointF > &positionsGraphWithSubintervals, QVector< QString > &distanceGraphForward, QVector< QString > &distancePercentForward, QVector< QString > &distanceGraphBackward, QVector< QString > &distancePercentBackward) const
Insert the specified number of subintervals into each interval.