Engauge Digitizer  2
GeometryStrategyAbstractBase.h
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 #ifndef GEOMETRY_STRATEGY_ABSTRACT_BASE_H
8 #define GEOMETRY_STRATEGY_ABSTRACT_BASE_H
9 
10 #include "Points.h"
11 #include <QPolygonF>
12 #include <QVector>
13 
16 class MainWindowModel;
17 class QPointF;
18 class Transformation;
19 
24 {
25 public:
28  virtual ~GeometryStrategyAbstractBase ();
29 
31  virtual void calculateGeometry (const Points &points,
32  const DocumentModelCoords &modelCoords,
33  const DocumentModelGeneral &modelGeneral,
34  const MainWindowModel &modelMainWindow,
35  const Transformation &transformation,
36  QString &funcArea,
37  QString &polyArea,
38  QVector<QString> &x,
39  QVector<QString> &y,
40  QVector<QString> &distanceGraphForward,
41  QVector<QString> &distancePercentForward,
42  QVector<QString> &distanceGraphBackward,
43  QVector<QString> &distancePercentBackward) const = 0;
44 
45 protected:
46 
48  void calculatePositionsGraph (const Points &points,
49  const Transformation &transformation,
50  QVector<QPointF> &positionsGraph) const;
51 
53  double functionArea (const QVector<QPointF> &positionsGraph) const;
54 
58  void insertSubintervalsAndLoadDistances (int subintervalsPerInterval,
59  const QVector<QPointF> &positionsGraph,
60  QVector<QPointF> &positionsGraphWithSubintervals,
61  QVector<QString> &distanceGraphForward,
62  QVector<QString> &distancePercentForward,
63  QVector<QString> &distanceGraphBackward,
64  QVector<QString> &distancePercentBackward) const;
65 
67  void loadXY (const QVector<QPointF> &positionsGraph,
68  const DocumentModelCoords &modelCoords,
69  const DocumentModelGeneral &modelGeneral,
70  const MainWindowModel &modelMainWindow,
71  const Transformation &transformation,
72  QVector<QString> &x,
73  QVector<QString> &y) const;
74 
77  double polygonAreaForSimplyConnected (const QVector<QPointF> &points) const;
78 
79 };
80 
81 #endif // GEOMETRY_STRATEGY_ABSTRACT_BASE_H
void calculatePositionsGraph(const Points &points, const Transformation &transformation, QVector< QPointF > &positionsGraph) const
Convert screen positions to graph positions.
Model for DlgSettingsGeneral and CmdSettingsGeneral.
double functionArea(const QVector< QPointF > &positionsGraph) const
Use trapezoidal approximation to compute area under the function. Does not apply to relation...
Base class for all geometry strategies.
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 =0
Calculate geometry parameters.
Affine transformation between screen and graph coordinates, based on digitized axis points...
Model for DlgSettingsMainWindow.
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.
Model for DlgSettingsCoords and CmdSettingsCoords.
GeometryStrategyAbstractBase()
Single constructor.
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.