Engauge Digitizer  2
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 15 of file GeometryStrategyFunctionSmooth.h.

Constructor & Destructor Documentation

◆ GeometryStrategyFunctionSmooth()

GeometryStrategyFunctionSmooth::GeometryStrategyFunctionSmooth ( )

Single constructor.

Definition at line 14 of file GeometryStrategyFunctionSmooth.cpp.

16 {

◆ ~GeometryStrategyFunctionSmooth()

GeometryStrategyFunctionSmooth::~GeometryStrategyFunctionSmooth ( )
virtual

Definition at line 18 of file GeometryStrategyFunctionSmooth.cpp.

20 {

Member Function Documentation

◆ calculateGeometry()

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 22 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 = "";

◆ loadSmoothAmbiguityVector()

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 71 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  }

The documentation for this class was generated from the following files:
Spline
Cubic interpolation given independent and dependent value vectors.
Definition: Spline.h:28
SplinePair
Single X/Y pair for cubic spline interpolation initialization and calculations.
Definition: SplinePair.h:12
Transformation::transformIsDefined
bool transformIsDefined() const
Transform is defined when at least three axis points have been digitized.
Definition: Transformation.cpp:335
GeometryStrategyAbstractBase::insertSubintervalsAndLoadDistances
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.
Definition: GeometryStrategyAbstractBase.cpp:61
GeometryStrategyFunctionSmooth::loadSmoothAmbiguityVector
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...
Definition: GeometryStrategyFunctionSmooth.cpp:71
GeometryStrategyAbstractBase::functionArea
double functionArea(const QVector< QPointF > &positionsGraph) const
Use trapezoidal approximation to compute area under the function. Does not apply to relation.
Definition: GeometryStrategyAbstractBase.cpp:45
GeometryStrategyAbstractBase::loadXY
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.
Definition: GeometryStrategyAbstractBase.cpp:146
SplineDrawer
This class takes the output from Spline and uses that to draw the curve in the graphics window,...
Definition: SplineDrawer.h:34
GeometryStrategyAbstractBase::calculatePositionsGraph
void calculatePositionsGraph(const Points &points, const Transformation &transformation, QVector< QPointF > &positionsGraph) const
Convert screen positions to graph positions.
Definition: GeometryStrategyAbstractBase.cpp:27