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