Engauge Digitizer  2
 All Classes Files Functions Variables Enumerations Enumerator Friends Pages
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 MainWindowModel &modelMainWindow,
21  const Transformation &transformation,
22  QString &funcArea,
23  QString &polyArea,
24  QVector<QString> &x,
25  QVector<QString> &y,
26  QVector<QString> &distanceGraphForward,
27  QVector<QString> &distancePercentForward,
28  QVector<QString> &distanceGraphBackward,
29  QVector<QString> &distancePercentBackward) const
30 {
31  const int NUM_SUB_INTERVALS_SMOOTH = 10; // One input point becomes NUM_SUB_INTERVALS points to account for smoothing
32 
33  QVector<QPointF> positionsGraph, positionsGraphWithSubintervals;
35  transformation,
36  positionsGraph);
37 
38  insertSubintervalsAndLoadDistances (NUM_SUB_INTERVALS_SMOOTH,
39  positionsGraph,
40  positionsGraphWithSubintervals,
41  distanceGraphForward,
42  distancePercentForward,
43  distanceGraphBackward,
44  distancePercentBackward);
45  double pArea = polygonAreaForSimplyConnected (positionsGraphWithSubintervals);
46 
47  loadXY (positionsGraph,
48  modelCoords,
49  modelMainWindow,
50  transformation,
51  x,
52  y);
53 
54  // Set header values
55  funcArea = "";
56  polyArea = QString::number (pArea);
57 }
void calculatePositionsGraph(const Points &points, const Transformation &transformation, QVector< QPointF > &positionsGraph) const
Convert screen positions to graph positions.
virtual void calculateGeometry(const Points &points, const DocumentModelCoords &modelCoords, 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.
Affine transformation between screen and graph coordinates, based on digitized axis points...
Model for DlgSettingsMainWindow.
Model for DlgSettingsCoords and CmdSettingsCoords.
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.
double polygonAreaForSimplyConnected(const QVector< QPointF > &points) const
Area in polygon using Shoelace formula, which only works if polygon is simply connected.
void loadXY(const QVector< QPointF > &positionsGraph, const DocumentModelCoords &modelCoords, const MainWindowModel &modelMainWindow, const Transformation &transformation, QVector< QString > &x, QVector< QString > &y) const
Load x and y coordinate vectors.