Engauge Digitizer  2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | List of all members
GeometryStrategyFunctionSmooth Class Reference

Calculate for line through the points that is smoothly connected as a function. More...

#include <GeometryStrategyFunctionSmooth.h>

Inheritance diagram for GeometryStrategyFunctionSmooth:
Inheritance graph
Collaboration diagram for GeometryStrategyFunctionSmooth:
Collaboration graph

Public Member Functions

 GeometryStrategyFunctionSmooth ()
 Single constructor. More...
 
virtual ~GeometryStrategyFunctionSmooth ()
 
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< bool > &isPotentialExportAmbiguity, QVector< QString > &distanceGraphForward, QVector< QString > &distancePercentForward, QVector< QString > &distanceGraphBackward, QVector< QString > &distancePercentBackward) const
 Calculate geometry parameters. More...
 
virtual void loadSmoothAmbiguityVector (QVector< QString > &x, QVector< QString > &y, const Transformation &transformation, QVector< bool > &isPotentialExportAmbiguity) const
 Generate a vector that identifies points belonging to segments that overlap, for smoothly connected functions. More...
 
- Public Member Functions inherited from GeometryStrategyAbstractBase
 GeometryStrategyAbstractBase ()
 Single constructor. More...
 
virtual ~GeometryStrategyAbstractBase ()
 

Additional Inherited Members

- Protected Member Functions inherited from GeometryStrategyAbstractBase
void calculatePositionsGraph (const Points &points, const Transformation &transformation, QVector< QPointF > &positionsGraph) const
 Convert screen positions to graph positions. More...
 
double functionArea (const QVector< QPointF > &positionsGraph) const
 Use trapezoidal approximation to compute area under the function. Does not apply to relation. More...
 
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. More...
 
virtual void loadPotentialExportVector (QVector< QString > &x, QVector< QString > &y, const Transformation &transformation, QVector< bool > &isPotentialExportAmbiguity) const
 Load isPotentialExportAmbiguity vector. Default in base class is to load false values since there are no ambiguities. More...
 
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. More...
 
double polygonAreaForSimplyConnected (const QVector< QPointF > &points) const
 Area in polygon using Shoelace formula, which only works if polygon is simply connected. More...
 

Detailed Description

Calculate for line through the points that is smoothly connected as a function.

Definition at line 16 of file GeometryStrategyFunctionSmooth.h.

Constructor & Destructor Documentation

GeometryStrategyFunctionSmooth::GeometryStrategyFunctionSmooth ( )

Single constructor.

Definition at line 15 of file GeometryStrategyFunctionSmooth.cpp.

16 {
17 }
GeometryStrategyFunctionSmooth::~GeometryStrategyFunctionSmooth ( )
virtual

Definition at line 19 of file GeometryStrategyFunctionSmooth.cpp.

20 {
21 }

Member Function Documentation

void GeometryStrategyFunctionSmooth::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< bool > &  isPotentialExportAmbiguity,
QVector< QString > &  distanceGraphForward,
QVector< QString > &  distancePercentForward,
QVector< QString > &  distanceGraphBackward,
QVector< QString > &  distancePercentBackward 
) const
virtual

Calculate geometry parameters.

Implements GeometryStrategyAbstractBase.

Definition at line 23 of file GeometryStrategyFunctionSmooth.cpp.

37 {
38  const int NUM_SUB_INTERVALS_SMOOTH = 10; // One input point becomes NUM_SUB_INTERVALS points to account for smoothing
39 
40  QVector<QPointF> positionsGraph, positionsGraphWithSubintervals;
42  transformation,
43  positionsGraph);
44 
45  insertSubintervalsAndLoadDistances (NUM_SUB_INTERVALS_SMOOTH,
46  positionsGraph,
47  positionsGraphWithSubintervals,
48  distanceGraphForward,
49  distancePercentForward,
50  distanceGraphBackward,
51  distancePercentBackward);
52  double fArea = functionArea (positionsGraphWithSubintervals);
53 
54  loadXY (positionsGraph,
55  modelCoords,
56  modelGeneral,
57  modelMainWindow,
58  transformation,
59  x,
60  y);
61 
63  y,
64  transformation,
65  isPotentialExportAmbiguity);
66 
67  // Set header values
68  funcArea = QString::number (fArea);
69  polyArea = "";
70 }
void calculatePositionsGraph(const Points &points, const Transformation &transformation, QVector< QPointF > &positionsGraph) const
Convert screen positions to graph positions.
double functionArea(const QVector< QPointF > &positionsGraph) const
Use trapezoidal approximation to compute area under the function. Does not apply to relation...
virtual void loadSmoothAmbiguityVector(QVector< QString > &x, QVector< QString > &y, const Transformation &transformation, QVector< bool > &isPotentialExportAmbiguity) const
Generate a vector that identifies points belonging to segments that overlap, for smoothly connected f...
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.
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.
void GeometryStrategyFunctionSmooth::loadSmoothAmbiguityVector ( QVector< QString > &  x,
QVector< QString > &  y,
const Transformation transformation,
QVector< bool > &  isPotentialExportAmbiguity 
) const
virtual

Generate a vector that identifies points belonging to segments that overlap, for smoothly connected functions.

Definition at line 72 of file GeometryStrategyFunctionSmooth.cpp.

76 {
77  // There are N-1 segments for N points
78  int numSegments = x.size () - 1;
79 
80  // Graph/screen transformation must be defined for SplineDrawer, and
81  // at least one point must be defined for Spline. Even better, one segment
82  // must be defined for Spline
83  if (transformation.transformIsDefined() &&
84  numSegments > 0) {
85 
86  // Create spline
87  vector<double> t (unsigned (x.size ()));
88  vector<SplinePair> xy (unsigned (x.size ()));
89  for (unsigned int i = 0; i < unsigned (x.size ()); i++) {
90  t [i] = i;
91  xy [i] = SplinePair (x.at (signed (i)).toDouble (),
92  y.at (signed (i)).toDouble ());
93  }
94  Spline s (t,
95  xy);
96 
97  SplineDrawer sd (transformation);
98 
99  for (int segment = 0; segment < numSegments; segment++) {
100  bool isMultiValued = sd.segmentIsMultiValued (s,
101  x.size (),
102  segment);
103  isPotentialExportAmbiguity.push_back (isMultiValued);
104  }
105  } else {
106 
107  for (int segment = 0; segment < numSegments; segment++) {
108  isPotentialExportAmbiguity.push_back (false);
109  }
110  }
111 }
Cubic interpolation given independent and dependent value vectors.
Definition: Spline.h:29
bool transformIsDefined() const
Transform is defined when at least three axis points have been digitized.
This class takes the output from Spline and uses that to draw the curve in the graphics window...
Definition: SplineDrawer.h:35
Single X/Y pair for cubic spline interpolation initialization and calculations.
Definition: SplinePair.h:13

The documentation for this class was generated from the following files: