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
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...
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.
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.
Base class for all geometry strategies.
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.
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.