Engauge Digitizer  2
GeometryStrategyRelationStraight.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 "GeometryStrategyRelationStraight.h"
8 #include "Transformation.h"
9 
11 {
12 }
13 
14 GeometryStrategyRelationStraight::~GeometryStrategyRelationStraight()
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_STRAIGHT = 1; // Value of one with trapezoidal integration results in calculations using straight lines between points
32 
33  QVector<QPointF> positionsGraph, positionsGraphWithSubintervals;
35  transformation,
36  positionsGraph);
37 
38  insertSubintervalsAndLoadDistances (NUM_SUB_INTERVALS_STRAIGHT,
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.
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.
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.