Engauge Digitizer 2
Loading...
Searching...
No Matches
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.
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.
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.
Public Member Functions inherited from GeometryStrategyAbstractBase
 GeometryStrategyAbstractBase ()
 Single constructor.
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.
double functionArea (const QVector< QPointF > &positionsGraph) const
 Use trapezoidal approximation to compute area under the function. Does not apply to relation.
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.
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.
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.
double polygonAreaForSimplyConnected (const QVector< QPointF > &points) const
 Area in polygon using Shoelace formula, which only works if polygon is simply connected.

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::GeometryStrategyFunctionSmooth ( )

Single constructor.

Definition at line 15 of file GeometryStrategyFunctionSmooth.cpp.

16{
17}

◆ ~GeometryStrategyFunctionSmooth()

GeometryStrategyFunctionSmooth::~GeometryStrategyFunctionSmooth ( )
virtual

Definition at line 19 of file GeometryStrategyFunctionSmooth.cpp.

20{
21}

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 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 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 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...

◆ 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 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}
SplinePair()
Default constructor. Normally used only by generic container classes.
bool transformIsDefined() const
Transform is defined when at least three axis points have been digitized.

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