JKQTPlotter trunk/v5.0.0
an extensive Qt5+Qt6 Plotter framework (including a feature-richt plotter widget, a speed-optimized, but limited variant and a LaTeX equation renderer!), written fully in C/C++ and without external dependencies
|
This virtual JKQTPGraph descendent extends JKQTPXYGraph with two additional columns that encode for a vector starting at (x,y), i.e. either two distances along the x- and y-axis ( ), or a rotation angle and a vector length . More...
#include <jkqtpgraphsbase.h>
Public Types | |
enum | VectorDataLayout { DeltaXDeltaYLayout , AngleAndLengthLayout , DefaultVectorDataLayout =DeltaXDeltaYLayout } |
values from this enum indicates how to interpret the data columns provided to this graph More... | |
Public Types inherited from JKQTPXYGraph | |
enum | DataSortOrder { Unsorted =0 , SortedX =1 , SortedY =2 } |
specifies how to sort the data in a JKQTPXYGraph before drawing More... | |
Public Types inherited from JKQTPPlotElement | |
enum | HitTestMode { HitTestXY , HitTestXOnly , HitTestYOnly } |
modes of operation for the function hitTest() More... | |
Public Slots | |
void | setAngleAndLengthColumn (int colAngle, int colLength) |
det angleColumn and lengthColumn column at the same time! ALso ensures that vectorDataLayout is set accordingly. | |
void | setAngleColumn (int col) |
the column that contains the rotation angle [in radian] | |
void | setDxColumn (int col) |
the column that contains the delta along the x-axis. | |
void | setDxDyColumn (int colDx, int colDy) |
det dxColumn and dyColumn column at the same time! ALso ensures that vectorDataLayout is set accordingly. | |
void | setDyColumn (int col) |
the column that contains the delta along the y-axis. | |
void | setLengthColumn (int col) |
the column that contains the vector length | |
Public Slots inherited from JKQTPXYGraph | |
void | setDataSortOrder (DataSortOrder __value) |
if !=Unsorted , the data is sorted before plotting | |
void | setDataSortOrder (int __value) |
if !=Unsorted , the data is sorted before plotting | |
virtual void | setKeyColumn (int __value) |
sets the column used as "key" for the current graph (typically this call setXColumn(), but for horizontal graphs like filled curves or barcharts it may call setYColumn() ) | |
virtual void | setValueColumn (int __value) |
sets the column used as "value" for the current graph (typically this call setXColumn(), but for horizontal graphs like filled curves or barcharts it may call setYColumn() ) | |
void | setXColumn (int __value) |
the column that contains the x-component of the datapoints | |
void | setXColumn (size_t __value) |
the column that contains the x-component of the datapoints | |
void | setXYColumns (int xCol, int yCol) |
sets xColumn and yColumn at the same time | |
void | setXYColumns (QPair< int, int > xyColPair) |
sets xColumn and yColumn at the same time | |
void | setXYColumns (QPair< size_t, size_t > xyColPair) |
sets xColumn and yColumn at the same time | |
void | setXYColumns (size_t xCol, size_t yCol) |
sets xColumn and yColumn at the same time | |
void | setYColumn (int __value) |
the column that contains the y-component of the datapoints | |
void | setYColumn (size_t __value) |
the column that contains the y-component of the datapoints | |
Public Slots inherited from JKQTPPlotElement | |
void | setHighlighted (bool __value) |
sets whether the graph is drawn in a highlighted style in the plot | |
virtual void | setTitle (const QString &__value) |
sets the title of the plot (for display in key!). | |
void | setVisible (bool __value) |
sets whether the graph is visible in the plot | |
Public Member Functions | |
JKQTPXYAndVectorGraph (JKQTBasePlotter *parent=nullptr) | |
class constructor | |
virtual QString | formatHitTestDefaultLabel (double x, double y, int index=-1, const JKQTPDatastore *datastore=nullptr) const override |
tool-function for hitTest(), which formats a default label, taking into account the x- and y-position (both provided) and optionally the errors of these positions. | |
int | getAngleColumn () const |
the column that contains the rotation angle [in radian] | |
int | getDxColumn () const |
the column that contains the delta along the x-axis. | |
int | getDyColumn () const |
the column that contains the delta along the y-axis. | |
int | getLengthColumn () const |
the column that contains the vector length | |
VectorDataLayout | getVectorDataLayout () const |
indicates, which column pairs to use (dxColumn, dyColumn), (angleColumn, lengthColumn), ... | |
virtual bool | getXMinMax (double &minx, double &maxx, double &smallestGreaterZero) override |
get the maximum and minimum x-value of the graph | |
virtual bool | getYMinMax (double &miny, double &maxy, double &smallestGreaterZero) override |
get the maximum and minimum y-value of the graph | |
virtual double | hitTest (const QPointF &posSystem, QPointF *closestSpotSystem=nullptr, QString *label=nullptr, HitTestMode mode=HitTestXY) const override |
Implmentation of JKQTPPlotElement::hitTest(), which searches through all graph points defined by xColumn and yColumn and returns a general x/y-label, also taking into account possibly known errors to the graphs (if it is derived from JKQTPXGraphErrorData and/or JKQTPYGraphErrorData. | |
virtual bool | usesColumn (int column) const override |
returns true if the given column is used by the graph | |
Public Member Functions inherited from JKQTPXYGraph | |
JKQTPXYGraph (JKQTBasePlotter *parent=nullptr) | |
class constructor | |
DataSortOrder | getDataSortOrder () const |
if !=Unsorted , the data is sorted before plotting | |
virtual int | getKeyColumn () const |
returns the column used as "key" for the current graph (typically this call getXColumn(), but for horizontal graphs like filled curves or barcharts it may call getYColumn() ) | |
virtual int | getValueColumn () const |
returns the column used as "value" for the current graph (typically this call getXColumn(), but for horizontal graphs like filled curves or barcharts it may call getYColumn() ) | |
int | getXColumn () const |
the column that contains the x-component of the datapoints | |
int | getYColumn () const |
the column that contains the y-component of the datapoints | |
Public Member Functions inherited from JKQTPGraph | |
JKQTPGraph (JKQTBasePlotter *parent=nullptr) | |
class constructor | |
virtual | ~JKQTPGraph ()=default |
default wirtual destructor | |
Public Member Functions inherited from JKQTPPlotElement | |
JKQTPPlotElement (JKQTBasePlotter *parent=nullptr) | |
class constructor | |
virtual | ~JKQTPPlotElement ()=default |
default wirtual destructor | |
QPointF | backTransform (const QPointF &x) const |
tool routine that back-transforms a QPointF according to the parent's transformation rules (pixels --> plot coordinate) | |
QPointF | backTransform (double x, double y) const |
tool routine that back-transforms a QPointF according to the parent's transformation rules (pixels --> plot coordinate) | |
double | backtransformX (double x) const |
tool routine that backtransforms an x-coordinate (pixels --> plot coordinate) for this plot element, uses the axis referenced in xAxisRef | |
double | backtransformY (double y) const |
tool routine that backtransforms a y-coordinate (pixels --> plot coordinate) for this plot element, uses the axis referenced in yAxisRef | |
virtual void | draw (JKQTPEnhancedPainter &painter)=0 |
plots the graph to the plotter object specified as parent | |
virtual void | drawKeyMarker (JKQTPEnhancedPainter &painter, const QRectF &rect)=0 |
plots a key marker inside the specified rectangle rect | |
virtual void | drawOutside (JKQTPEnhancedPainter &painter, QRect leftSpace, QRect rightSpace, QRect topSpace, QRect bottomSpace) |
plots outside the actual plot field of view (e.g. color bars, scale bars, ...) | |
QImage | generateKeyMarker (QSize size=QSize(16, 16)) |
returns an image with a key marker inside | |
virtual QColor | getKeyLabelColor () const =0 |
returns the color to be used for the key label | |
virtual void | getOutsideSize (JKQTPEnhancedPainter &painter, int &leftSpace, int &rightSpace, int &topSpace, int &bottomSpace) |
if the graph plots outside the actual plot field of view (e.g. color bars, scale bars, ...) | |
JKQTBasePlotter * | getParent () |
returns the parent painter class | |
const JKQTBasePlotter * | getParent () const |
returns the parent painter class | |
QString | getTitle () const |
returns the the title of the plot | |
const JKQTPCoordinateAxis * | getXAxis () const |
returns the actual x-Axis-object from the parent plotter, referenced in xAxisRef | |
JKQTPCoordinateAxisRef | getXAxisRef () const |
indicates which coordinate axis to use for coordinate transforms in x-direction | |
const JKQTPCoordinateAxis * | getYAxis () const |
returns the actual y-Axis-object from the parent plotter, referenced in yAxisRef | |
JKQTPCoordinateAxisRef | getYAxisRef () const |
indicates which coordinate axis to use for coordinate transforms in y-direction | |
bool | isHighlighted () const |
returns whether the graph is shown in a highlighted style in the plot | |
bool | isVisible () const |
returns whether the graph is visible in the plot | |
void | setAxes (JKQTPCoordinateAxisRef ref) |
set the coordinate axes to use for this plot element | |
virtual void | setParent (JKQTBasePlotter *parent) |
sets the parent painter class | |
virtual void | setParent (JKQTPlotter *parent) |
sets the parent painter class | |
void | setXAxis (JKQTPCoordinateAxisRef ref) |
indicates which coordinate axis to use for coordinate transforms in x-direction | |
void | setYAxis (JKQTPCoordinateAxisRef ref) |
indicates which coordinate axis to use for coordinate transforms in y-direction | |
QPointF | transform (const QPointF &x) const |
tool routine that transforms a QPointF according to the parent's transformation rules (plot coordinate --> pixels) | |
QPolygonF | transform (const QPolygonF &x) const |
tool routine that transforms a QPolygonF according to the parent's transformation rules (plot coordinate --> pixels) | |
QPointF | transform (double x, double y) const |
tool routine that transforms a QPointF according to the parent's transformation rules (plot coordinate --> pixels) | |
QPainterPath | transformToLinePath (const QPolygonF &x) const |
tool routine that transforms a QPolygonF according to the parent's transformation rules and returns a (non-closed) path consisting of lines (plot coordinate --> pixels) | |
QVector< double > | transformX (const QVector< double > &x) const |
transform all x-coordinates in a vector x | |
double | transformX (double x) const |
tool routine that transforms an x-coordinate (plot coordinate --> pixels) for this plot element, uses the axis referenced in xAxisRef | |
QVector< double > | transformY (const QVector< double > &x) const |
transform all y-coordinates in a vector x | |
double | transformY (double y) const |
tool routine that transforms a y-coordinate (plot coordinate --> pixels) for this plot element, uses the axis referenced in yAxisRef | |
Protected Member Functions | |
virtual bool | getIndexRange (int &imin, int &imax) const override |
determines the range of row indexes available in the data columns of this graph | |
double | getVectorAngle (int i) const |
QPointF | getVectorDxDy (int i) const |
this function interprets vectorDataLayout together with (dxColumn, dyColumn) or (angleColumn, lengthColumn) or ... and returns the i -th vectors | |
double | getVectorMagnitude (int i) const |
Protected Member Functions inherited from JKQTPXYGraph | |
int | getDataIndex (int i) const |
returns the index of the i-th datapoint (where i is an index into the SORTED datapoints) | |
virtual void | intSortData () |
sorts data according to the specified criterion in sortData ... The result is stored as a index-map in sorted Indices | |
Protected Member Functions inherited from JKQTPGraph | |
virtual void | drawErrorsAfter (JKQTPEnhancedPainter &) |
this function is used to plot error inidcators after plotting the graphs. | |
virtual void | drawErrorsBefore (JKQTPEnhancedPainter &) |
this function is used to plot error inidcators before plotting the graphs. | |
bool | getDataMinMax (int column, double &minx, double &maxx, double &smallestGreaterZero) |
get the maximum and minimum value of the given column | |
Protected Member Functions inherited from JKQTPPlotElement | |
void | addHitTestData (const HitTestLocation &loc) |
clear the internal datastore for hitTest() | |
void | addHitTestData (const QPointF &pos_, const QString &label_) |
clear the internal datastore for hitTest() | |
void | addHitTestData (const QPointF &pos_, int index_, const QString &label_) |
clear the internal datastore for hitTest() | |
void | addHitTestData (const QPointF &pos_, int index_=-1, const JKQTPDatastore *datastore=nullptr) |
clear the internal datastore for hitTest(), this variant uses formatHitTestDefaultLabel() to auto-generate the label | |
void | addHitTestData (double x_, double y_, const QString &label_) |
add a new point on the graph to the internal datastore for hitTest() | |
void | addHitTestData (double x_, double y_, int index_, const QString &label_) |
clear the internal datastore for hitTest() | |
void | addHitTestData (double x_, double y_, int index_=-1, const JKQTPDatastore *datastore=nullptr) |
add a new point on the graph to the internal datastore for hitTest(), this variant uses formatHitTestDefaultLabel() to auto-generate the label | |
void | clearHitTestData () |
clear the internal datastore for hitTest() | |
void | reserveHitTestData (int points) |
reserve list entries for up to points graph points in the internal datastore for hitTest() | |
QString | xFloatToString (double v, int past_comma=-1) const |
converts a x-value v into a string, taking into account the type of x-axis | |
QString | yFloatToString (double v, int past_comma=-1) const |
converts a x-value v into a string, taking into account the type of x-axis | |
Static Protected Member Functions | |
static double | getVectorAngle (const QPointF &v) |
calculates the rotation angle (3 o'clock is 0) in radians of a vector v | |
static double | getVectorMagnitude (const QPointF &v) |
calculates the magnitude/length of a vector v | |
Properties | |
int | angleColumn |
the column that contains the rotation angle [in radian] | |
int | dxColumn |
the column that contains the delta along the x-axis. | |
int | dyColumn |
the column that contains the delta along the y-axis. | |
int | lengthColumn |
the column that contains the vector length | |
VectorDataLayout | vectorDataLayout |
indicates, which column pairs to use (dxColumn, dyColumn), (angleColumn, lengthColumn), ... | |
Properties inherited from JKQTPXYGraph | |
DataSortOrder | sortData |
if !=Unsorted , the data is sorted before plotting | |
int | xColumn |
the column that contains the x-component of the datapoints | |
int | yColumn |
the column that contains the y-component of the datapoints | |
Properties inherited from JKQTPPlotElement | |
bool | highlighted |
indicates whether the graph is shown in a "highlghted" in the plot | |
QString | title |
title of the plot (for display in key!). If no title is supplied, no key entry is drawn. | |
bool | visible |
indicates whether the graph is visible in the plot | |
JKQTPCoordinateAxisRef | xAxisRef |
indicates which coordinate axis to use for coordinate transforms in x-direction | |
JKQTPCoordinateAxisRef | yAxisRef |
indicates which coordinate axis to use for coordinate transforms in y-direction | |
Additional Inherited Members | |
Protected Attributes inherited from JKQTPXYGraph | |
QVector< int > | sortedIndices |
this array contains the order of indices, in which to access the data in the data columns | |
Protected Attributes inherited from JKQTPPlotElement | |
QVector< HitTestLocation > | m_hitTestData |
dataset with graph-points and associated data from the function hitTest() | |
JKQTBasePlotter * | parent |
the plotter object this object belongs to | |
int | parentPlotStyle |
internal storage for the used parent plot style | |
This virtual JKQTPGraph descendent extends JKQTPXYGraph with two additional columns that encode for a vector starting at (x,y), i.e. either two distances along the x- and y-axis ( ), or a rotation angle and a vector length .
values from this enum indicates how to interpret the data columns provided to this graph
JKQTPXYAndVectorGraph::JKQTPXYAndVectorGraph | ( | JKQTBasePlotter * | parent = nullptr | ) |
class constructor
|
overridevirtual |
tool-function for hitTest(), which formats a default label, taking into account the x- and y-position (both provided) and optionally the errors of these positions.
x | x-position of the datapoint in system coordinates |
y | y-position of the datapoint in system coordinates |
index | the index of the data point in the associated data column(s), or -1 (optional!) |
datastore | The datastore to read error data from (optional!) |
Reimplemented from JKQTPPlotElement.
int JKQTPXYAndVectorGraph::getAngleColumn | ( | ) | const |
the column that contains the rotation angle [in radian]
An angle of 0 means a right-pointing vector and angle is measured count-clockwise, so angle and length can be converted to via:
Note that these calculations are performed in the coordinate-axis-space, NOT in screen pixel space!
int JKQTPXYAndVectorGraph::getDxColumn | ( | ) | const |
the column that contains the delta along the x-axis.
int JKQTPXYAndVectorGraph::getDyColumn | ( | ) | const |
the column that contains the delta along the y-axis.
|
overrideprotectedvirtual |
determines the range of row indexes available in the data columns of this graph
[out] | imin | first usable row-index |
[out] | imax | last usable row-index |
true
on success and false
if the information is not available Reimplemented from JKQTPXYGraph.
int JKQTPXYAndVectorGraph::getLengthColumn | ( | ) | const |
the column that contains the vector length
An angle of 0 means a right-pointing vector and angle is measured count-clockwise, so angle and length can be converted to via:
Note that these calculations are performed in the coordinate-axis-space, NOT in screen pixel space!
|
inlinestaticprotected |
calculates the rotation angle (3 o'clock is 0) in radians of a vector v
|
inlineprotected |
VectorDataLayout JKQTPXYAndVectorGraph::getVectorDataLayout | ( | ) | const |
indicates, which column pairs to use (dxColumn, dyColumn), (angleColumn, lengthColumn), ...
|
protected |
this function interprets vectorDataLayout together with (dxColumn, dyColumn) or (angleColumn, lengthColumn) or ... and returns the i -th vectors
|
inlinestaticprotected |
calculates the magnitude/length of a vector v
|
inlineprotected |
|
overridevirtual |
get the maximum and minimum x-value of the graph
The result is given in the two parameters which are call-by-reference parameters!
[out] | minx | minimal x-value used in the graph |
[out] | maxx | maximal x-value used in the graph |
[out] | smallestGreaterZero | the smalles x-value in the graph, which is larger than 0 (this is used in auto-sizing for logarithmic axes) |
true
on success, i.e. if there were datapoints in the plot, or false
on failure (e.g. when the graph is empty) Reimplemented from JKQTPXYGraph.
|
overridevirtual |
get the maximum and minimum y-value of the graph
The result is given in the two parameters which are call-by-reference parameters!
[out] | miny | minimal y-value used in the graph |
[out] | maxy | maximal y-value used in the graph |
[out] | smallestGreaterZero | the smalles y-value in the graph, which is larger than 0 (this is used in auto-sizing for logarithmic axes) |
true
on success, i.e. if there were datapoints in the plot, or false
on failure (e.g. when the graph is empty) Reimplemented from JKQTPXYGraph.
|
overridevirtual |
Implmentation of JKQTPPlotElement::hitTest(), which searches through all graph points defined by xColumn and yColumn and returns a general x/y-label, also taking into account possibly known errors to the graphs (if it is derived from JKQTPXGraphErrorData and/or JKQTPYGraphErrorData.
Reimplemented from JKQTPXYGraph.
|
slot |
det angleColumn and lengthColumn column at the same time! ALso ensures that vectorDataLayout is set accordingly.
|
slot |
the column that contains the rotation angle [in radian]
An angle of 0 means a right-pointing vector and angle is measured count-clockwise, so angle and length can be converted to via:
Note that these calculations are performed in the coordinate-axis-space, NOT in screen pixel space!
|
slot |
the column that contains the delta along the x-axis.
|
slot |
|
slot |
the column that contains the delta along the y-axis.
|
slot |
the column that contains the vector length
An angle of 0 means a right-pointing vector and angle is measured count-clockwise, so angle and length can be converted to via:
Note that these calculations are performed in the coordinate-axis-space, NOT in screen pixel space!
|
overridevirtual |
returns true
if the given column is used by the graph
This virtual function indicates whether a given column is used by this graph. Override this function in your derived graphs to indicate to JKQTPlotter / JKQTBasePlotter , which columns from the internal JKQTPDatastore are actually used. This information can be used e.g. for graph-specific data-export.
Reimplemented from JKQTPXYGraph.
Reimplemented in JKQTPParametrizedVectorFieldGraph.
|
readwrite |
the column that contains the rotation angle [in radian]
An angle of 0 means a right-pointing vector and angle is measured count-clockwise, so angle and length can be converted to via:
Note that these calculations are performed in the coordinate-axis-space, NOT in screen pixel space!
|
readwrite |
the column that contains the delta along the x-axis.
|
readwrite |
the column that contains the delta along the y-axis.
|
readwrite |
the column that contains the vector length
An angle of 0 means a right-pointing vector and angle is measured count-clockwise, so angle and length can be converted to via:
Note that these calculations are performed in the coordinate-axis-space, NOT in screen pixel space!
|
read |
indicates, which column pairs to use (dxColumn, dyColumn), (angleColumn, lengthColumn), ...