Engauge Digitizer  2
 All Classes Functions Variables Typedefs Enumerations Friends Pages
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.
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.
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.
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.