renamed JKQTPPlotObject->JKQTPGeometricPlotElement and added new base class JKQTPPlotAnnotationElement

This commit is contained in:
jkriege2 2020-09-21 13:15:57 +02:00
parent f4767072a4
commit f368855076
27 changed files with 313 additions and 215 deletions

View File

@ -58,7 +58,7 @@ This software is licensed under the term of the [GNU Lesser General Public Licen
- extensive library of image plots (inclusing different color-scale modes, RGBA-plots, overlays/masks)
- contour plots
- geometric forms/annotations
- can be easily extended by deriving a new graph from JKQTPPlotElement or JKQTPPlotObject
- can be easily extended by deriving a new graph from JKQTPPlotElement, JKQTPPlotAnnotationElement, JKQTPGeometricPlotElement, JKQTPGraph
- optional: OpenCV, CImg interfaces
- CMake-based build system
- extensive set of [Examples/Tutorials](./examples/README.md)

View File

@ -1,64 +0,0 @@
digraph
{
// LATEX_PDF_SIZE
bgcolor="transparent";
edge [fontname="FreeSans",fontsize="12",labelfontname="FreeSans",labelfontsize="12"];
node [fontname="FreeSans",fontsize="12",shape=record];
rankdir="LR";
{
rank=same;
JKQTPPlotElement [URL="\link JKQTPPlotElement"];
noteJKQTPPlotElement [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\nelements drawn\nonto a plot"];
JKQTPPlotElement -> noteJKQTPPlotElement [style=dashed,arrowhead=none];
}
{
rank=same;
JKQTPGraph [URL="\link JKQTPPlotElement"];
noteJKQTPGraph [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\nactual graphs"];
JKQTPGraph -> noteJKQTPGraph [style=dashed,arrowhead=none];
JKQTPPlotObject [URL="\link JKQTPPlotObject"];
noteJKQTPPlotObject [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\nnon-graph elements,\ne.g. geometric elements"];
JKQTPPlotObject -> noteJKQTPPlotObject [style=dashed,arrowhead=none];
}
{
rank=same;
JKQTPXYGraph [URL="\link JKQTPXYGraph"]
noteJKQTPXYGraph [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\ngraphs based on\n (x,y) data pairs"];
JKQTPXYGraph -> noteJKQTPXYGraph [style=dashed,arrowhead=none];
JKQTPSingleColumnGraph [URL="\link JKQTPSingleColumnGraph"]
noteJKQTPSingleColumnGraph [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\ngraphs based on only\n a single column of data"];
JKQTPSingleColumnGraph -> noteJKQTPSingleColumnGraph [style=dashed,arrowhead=none];
JKQTPImageBase [URL="\link JKQTPImageBase"]
noteJKQTPImageBase [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\ngraphsthat represent \n2D images/matrices"];
JKQTPImageBase -> noteJKQTPImageBase [style=dashed,arrowhead=none];
JKQTPGeoBaseLine [URL="\link JKQTPGeoBaseLine"];
noteJKQTPGeoBaseLine [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\ngeometric elements\nthat need line properties\n (color, width, ...)"];
JKQTPGeoBaseLine -> noteJKQTPGeoBaseLine [style=dashed,arrowhead=none];
}
{
rank=same;
JKQTPMathImageBase [URL="\link JKQTPMathImageBase"]
noteJKQTPMathImageBase [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\ngeometric elements\nthat need area fill properties\n (fillcolor, pattern, ...)"];
JKQTPMathImageBase -> noteJKQTPMathImageBase [style=dashed,arrowhead=none];
JKQTPGeoBaseFilled [URL="\link JKQTPGeoBaseFilled"];
noteJKQTPGeoBaseFilled [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\ngeometric elements\nthat need area fill properties\n (fillcolor, pattern, ...)"];
JKQTPGeoBaseFilled -> noteJKQTPGeoBaseFilled [style=dashed,arrowhead=none];
}
JKQTPGraph -> JKQTPXYGraph
JKQTPGraph -> JKQTPSingleColumnGraph
JKQTPGraph -> JKQTPImageBase -> JKQTPMathImageBase
JKQTPPlotElement -> JKQTPGraph
JKQTPPlotElement -> JKQTPPlotObject
JKQTPPlotObject -> JKQTPGeoBaseLine -> JKQTPGeoBaseFilled
}

View File

@ -0,0 +1,125 @@
digraph
{
// LATEX_PDF_SIZE
bgcolor="transparent";
edge [fontname="FreeSans",fontsize="12",labelfontname="FreeSans",labelfontsize="12"];
node [fontname="FreeSans",fontsize="12",shape=record];
rankdir="LR";
{
rank=same;
JKQTPPlotElement [URL="\link JKQTPPlotElement"];
noteJKQTPPlotElement [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\nelements drawn\nonto a plot"];
JKQTPPlotElement -> noteJKQTPPlotElement [style=dashed,arrowhead=none];
}
{
rank=same;
JKQTPGraph [URL="\link JKQTPPlotElement"];
noteJKQTPGraph [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\nactual graphs"];
JKQTPGraph -> noteJKQTPGraph [style=dashed,arrowhead=none];
JKQTPGeometricPlotElement [URL="\link JKQTPGeometricPlotElement"];
noteJKQTPGeometricPlotElement [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\nnon-graph elements,\ne.g. geometric elements"];
JKQTPGeometricPlotElement -> noteJKQTPGeometricPlotElement [style=dashed,arrowhead=none];
JKQTPPlotAnnotationElement [URL="\link JKQTPPlotAnnotationElement"];
noteJKQTPPlotAnnotationElement [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\ngraph annotation elements,\ne.g. text, symbols, ranges ..."];
JKQTPPlotAnnotationElement -> noteJKQTPPlotAnnotationElement [style=dashed,arrowhead=none];
}
{
rank=same;
JKQTPXYGraph [URL="\link JKQTPXYGraph"]
noteJKQTPXYGraph [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\ngraphs based on\n (x,y) data pairs"];
JKQTPXYGraph -> noteJKQTPXYGraph [style=dashed,arrowhead=none];
JKQTPSingleColumnGraph [URL="\link JKQTPSingleColumnGraph"]
noteJKQTPSingleColumnGraph [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\ngraphs based on only\n a single column of data"];
JKQTPSingleColumnGraph -> noteJKQTPSingleColumnGraph [style=dashed,arrowhead=none];
JKQTPImageBase [URL="\link JKQTPImageBase"]
noteJKQTPImageBase [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\ngraphs that represent \n2D images/matrices"];
JKQTPImageBase -> noteJKQTPImageBase [style=dashed,arrowhead=none];
}
{
rank=same;
JKQTPXYYGraph [URL="\link JKQTPXYYGraph"]
noteJKQTPXYYGraph [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\ngraphs based on\n (x, y1, y2) data tripels"];
JKQTPXYYGraph -> noteJKQTPXYYGraph [style=dashed,arrowhead=none];
JKQTPXXYGraph [URL="\link JKQTPXXYGraph"]
noteJKQTPXXYGraph [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\ngraphs based on\n (x1, x2, y) data tripels"];
JKQTPXXYGraph -> noteJKQTPXXYGraph [style=dashed,arrowhead=none];
JKQTPXYBaselineGraph [URL="\link JKQTPXYBaselineGraph"]
noteJJKQTPXYBaselineGraph [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\ngraphs based on\n (x,y) data pairs and a baseline"];
JKQTPXYBaselineGraph -> noteJJKQTPXYBaselineGraph [style=dashed,arrowhead=none];
JKQTPEvaluatedFunctionGraphBase [URL="\link JKQTPEvaluatedFunctionGraphBase"]
noteJKQTPEvaluatedFunctionGraphBase [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\ngraphs that represent \ndynamically evaluated functions"];
JKQTPEvaluatedFunctionGraphBase -> noteJKQTPEvaluatedFunctionGraphBase [style=dashed,arrowhead=none];
JKQTPMathImageBase [URL="\link JKQTPMathImageBase"]
noteJKQTPMathImageBase [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\ndata-based images"];
JKQTPMathImageBase -> noteJKQTPMathImageBase [style=dashed,arrowhead=none];
}
{
rank=same;
JKQTPBarGraphBase [URL="\link JKQTPBarGraphBase"]
noteJKQTPBarGraphBase [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\nbarcharts"];
JKQTPBarGraphBase -> noteJKQTPBarGraphBase [style=dashed,arrowhead=none];
JKQTPFilledCurveGraphBase [URL="\link JKQTPFilledCurveGraphBase"]
noteJKQTPFilledCurveGraphBase [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\nfilled graphs"];
JKQTPFilledCurveGraphBase -> noteJKQTPFilledCurveGraphBase [style=dashed,arrowhead=none];
JKQTPImpulsesGraphBase [URL="\link JKQTPImpulsesGraphBase"]
noteJKQTPImpulsesGraphBase [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\nimpulse graphs"];
JKQTPImpulsesGraphBase -> noteJKQTPImpulsesGraphBase [style=dashed,arrowhead=none];
JKQTPSpecialLineGraphBase [URL="\link JKQTPSpecialLineGraphBase"]
noteJKQTPSpecialLineGraphBase [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\nspecial line graphs"];
JKQTPSpecialLineGraphBase -> noteJKQTPSpecialLineGraphBase [style=dashed,arrowhead=none];
JKQTPBoxplotGraphBase [URL="\link JKQTPBoxplotGraphBase"]
noteJKQTPBoxplotGraphBase [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\ngraphs that represent \na set of boxplots"];
JKQTPBoxplotGraphBase -> noteJKQTPBoxplotGraphBase [style=dashed,arrowhead=none];
JKQTPRangeBase [URL="\link JKQTPRangeBase"];
noteJKQTPRangeBase [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\nrange annotations"];
JKQTPRangeBase -> noteJKQTPRangeBase [style=dashed,arrowhead=none];
JKQTPBoxplotElementBase [URL="\link JKQTPBoxplotElementBase"]
noteJKQTPBoxplotElementBase [shape="note", color="lightyellow",style=filled,fontsize=8,label="base class for all\ngraphs that represent \na single boxplot"];
JKQTPBoxplotElementBase -> noteJKQTPBoxplotElementBase [style=dashed,arrowhead=none];
}
JKQTPPlotElement -> JKQTPGraph
JKQTPPlotElement -> JKQTPGeometricPlotElement
JKQTPPlotElement -> JKQTPPlotAnnotationElement
JKQTPPlotElement -> JKQTPRangeBase
JKQTPPlotElement -> JKQTPBoxplotElementBase
JKQTPGraph -> JKQTPXYGraph
JKQTPGraph -> JKQTPSingleColumnGraph
JKQTPGraph -> JKQTPImageBase -> JKQTPMathImageBase
JKQTPGraph -> JKQTPEvaluatedFunctionGraphBase
JKQTPGraph -> JKQTPBoxplotGraphBase
JKQTPXYGraph -> JKQTPXYYGraph
JKQTPXYGraph -> JKQTPXXYGraph
JKQTPXYGraph -> JKQTPXYBaselineGraph
JKQTPXYBaselineGraph -> JKQTPBarGraphBase
JKQTPXYBaselineGraph -> JKQTPFilledCurveGraphBase
JKQTPXYBaselineGraph -> JKQTPImpulsesGraphBase
JKQTPXYBaselineGraph -> JKQTPSpecialLineGraphBase
}

View File

@ -74,7 +74,7 @@ All test-projects are Qt-projects that use qmake to build. You can load them int
<tr><th> Screenshot <th> Description <th> Notes
<tr><td> \image html geometric_small.png
<td> \subpage JKQTPlotterGeometricGraphs
<td> `JKQTPPlotObject`, `JKQTPGeoArc`, `JKQTPGeoLine`, `JKQTPGeoRectangle`, ...
<td> `JKQTPGeometricPlotElement`, `JKQTPGeoArc`, `JKQTPGeoLine`, `JKQTPGeoRectangle`, ...
<tr><td> \image html geo_arrows_small.png
<td> \subpage JKQTPlotterGeometricArrows
<td> `JKQTPGeoArrow`, ...

View File

@ -248,7 +248,7 @@ These are used to e.g. add color-scales to the side of the graph:
Usually if writing a new graph, one would not directly
derive from JKQTPPlotElement, but from a cass in it's hirarchy of children. These children already provide certain facilities for certain types of graphs.
\dotfile jkqtplotter_graphhirarchy.dot
\dotfile jkqtplotter_graphhirarchy.gv
\subsection jkqtplotter_graphsgroup_classstructure_mixins Mix-In Classes for Graphs

View File

@ -42,7 +42,7 @@
- \ref jkqtplotter_imagelots_elements "extensive library of image plots" (inclusing different color-scale modes, RGBA-plots, overlays/masks)
- \ref jkqtplotter_imagelots_contour "contour plots"
- \ref jkqtplotter_geoplots "geometric forms/annotations"
- can be easily extended by deriving a new graph from JKQTPPlotElement or JKQTPPlotObject
- can be easily extended by deriving a new graph from JKQTPPlotElement or JKQTPGeometricPlotElement
- <b>OPTIONAL: Interfaces to external libraries</b>
- \ref jkqtpinterfaceopencv "OpenCV interface"
- \ref jkqtpinterfacecimg "CImg interface"

View File

@ -20,6 +20,7 @@ Changes, compared to \ref page_whatsnew_V2019_11 "v2019.11" include:
<li> fixed issue <a href="https://github.com/jkriege2/JKQtPlotter/pull/41">#41: Build error when JKQtPlotter_BUILD_INCLUDE_XITS_FONTS set to OFF </a>, thanks to <a href="https://github.com/smistad">user:smistad</a></li>
<li> fixed issue <a href="https://github.com/jkriege2/JKQtPlotter/pull/37">#37: CMake installs things into $PREFIX/doc/*.txt </a>, thanks to <a href="https://github.com/certik">user:certik</a></li>
<li> fixed issue <a href="https://github.com/jkriege2/JKQtPlotter/pull/45">#45: Build error on mac jkqtfastplotter.cpp:342:28: Variable has incomplete type 'QPainterPath'</a>, thanks to <a href="https://github.com/abdedixit">user:abdedixit</a></li>
<li>renamed/breaking change: renamed JKQTPPlotObject->JKQTPGeometricPlotElement and added new base class JKQTPPlotAnnotationElement</li>
<li>renamed/breaking change: renamed JKQTPColorPaletteStyleAndToolsMixin::setPalette() -> JKQTPColorPaletteStyleAndToolsMixin::setColorPalette()</li>
<li>removed/breaking change: removed the usage of some deprecated functions and objects (e.g. QMatrix)</li>
<li>removed/breaking change: removed the overlay elements (derived from JKQTPOverlayElement), which were not very well set up and are more confusing than useful.</li>

View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -43,7 +43,7 @@ This software is licensed under the term of the [GNU Lesser General Public Licen
- extensive library of image plots (inclusing different color-scale modes, RGBA-plots, overlays/masks)
- contour plots
- geometric forms/annotations
- can be easily extended by deriving a new graph from JKQTPPlotElement or JKQTPPlotObject
- can be easily extended by deriving a new graph from JKQTPPlotElement or JKQTPGeometricPlotElement
- optional: OpenCV, CImg interfaces
- CMake-based build system
- extensive set of Examples/Tutorials: [https://jkriege2.github.io/JKQtPlotter/example\_tutorial\_projects.html](https://jkriege2.github.io/JKQtPlotter/example_tutorial_projects.html)

View File

@ -124,16 +124,16 @@ int main(int argc, char* argv[])
cmb->setCurrentIndex(0);
QObject::connect(cmb, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [&](int index) {
for (size_t i=0; i<plot->getPlotter()->getGraphCount(); i++) {
JKQTPPlotObject* obj=dynamic_cast<JKQTPPlotObject*>(plot->getPlotter()->getGraph(i));
JKQTPGeometricPlotElement* obj=dynamic_cast<JKQTPGeometricPlotElement*>(plot->getPlotter()->getGraph(i));
if (obj) {
obj->setDrawMode((index==0)?JKQTPPlotObject::DrawAsGraphicElement:JKQTPPlotObject::DrawAsMathematicalCurve);
obj->setDrawMode((index==0)?JKQTPGeometricPlotElement::DrawAsGraphicElement:JKQTPGeometricPlotElement::DrawAsMathematicalCurve);
}
}
plot->redrawPlot();
for (size_t i=0; i<plotlog->getPlotter()->getGraphCount(); i++) {
JKQTPPlotObject* obj=dynamic_cast<JKQTPPlotObject*>(plotlog->getPlotter()->getGraph(i));
JKQTPGeometricPlotElement* obj=dynamic_cast<JKQTPGeometricPlotElement*>(plotlog->getPlotter()->getGraph(i));
if (obj) {
obj->setDrawMode((index==0)?JKQTPPlotObject::DrawAsGraphicElement:JKQTPPlotObject::DrawAsMathematicalCurve);
obj->setDrawMode((index==0)?JKQTPGeometricPlotElement::DrawAsGraphicElement:JKQTPGeometricPlotElement::DrawAsMathematicalCurve);
}
}
plotlog->redrawPlot();

View File

@ -113,22 +113,22 @@ The example also adds some control-widgets that allow to change the properties o
cmb->setCurrentIndex(0);
QObject::connect(cmb, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [plot](int index) {
for (size_t i=0; i<plot->getPlotter()->getGraphCount(); i++) {
JKQTPPlotObject* obj=dynamic_cast<JKQTPPlotObject*>(plot->getPlotter()->getGraph(i));
JKQTPGeometricPlotElement* obj=dynamic_cast<JKQTPGeometricPlotElement*>(plot->getPlotter()->getGraph(i));
if (obj) {
obj->setDrawMode((index==0)?JKQTPPlotObject::DrawAsGraphicElement:JKQTPPlotObject::DrawAsMathematicalCurve);
obj->setDrawMode((index==0)?JKQTPGeometricPlotElement::DrawAsGraphicElement:JKQTPGeometricPlotElement::DrawAsMathematicalCurve);
}
}
plot->redrawPlot();
});
```
Now you can play with these controls and see how the different shapes get distorted when these properties change, in dependence of whether the DrawMode is `JKQTPPlotObject::DrawAsMathematicalCurve` or `JKQTPPlotObject::DrawAsGraphicElement`.
Now you can play with these controls and see how the different shapes get distorted when these properties change, in dependence of whether the DrawMode is `JKQTPGeometricPlotElement::DrawAsMathematicalCurve` or `JKQTPGeometricPlotElement::DrawAsGraphicElement`.
Here is an example on log-log axes and DrawMode = `JKQTPPlotObject::DrawAsGraphicElement`:
Here is an example on log-log axes and DrawMode = `JKQTPGeometricPlotElement::DrawAsGraphicElement`:
![geometric](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/geometric_loglog_DrawAsGraphicElement.png)
Here is an example on log-log axes and DrawMode = `JKQTPPlotObject::DrawAsMathematicalCurve`: Observe how straight lines are bent to the appropriate curve!
Here is an example on log-log axes and DrawMode = `JKQTPGeometricPlotElement::DrawAsMathematicalCurve`: Observe how straight lines are bent to the appropriate curve!
![geometric](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/geometric_loglog_DrawAsMathematicalCurve.png)

View File

@ -46,9 +46,9 @@ int main(int argc, char* argv[])
cmb->setCurrentIndex(0);
QObject::connect(cmb, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [plot](int index) {
for (size_t i=0; i<plot->getPlotter()->getGraphCount(); i++) {
JKQTPPlotObject* obj=dynamic_cast<JKQTPPlotObject*>(plot->getPlotter()->getGraph(i));
JKQTPGeometricPlotElement* obj=dynamic_cast<JKQTPGeometricPlotElement*>(plot->getPlotter()->getGraph(i));
if (obj) {
obj->setDrawMode((index==0)?JKQTPPlotObject::DrawAsGraphicElement:JKQTPPlotObject::DrawAsMathematicalCurve);
obj->setDrawMode((index==0)?JKQTPGeometricPlotElement::DrawAsGraphicElement:JKQTPGeometricPlotElement::DrawAsMathematicalCurve);
}
}
plot->redrawPlot();

View File

@ -730,7 +730,7 @@ void JKQTPBoxplotHorizontalGraph::draw(JKQTPEnhancedPainter& painter) {
JKQTPBoxplotVerticalElement::JKQTPBoxplotVerticalElement(JKQTBasePlotter* parent):
JKQTPPlotObject(DrawAsGraphicElement, parent)
JKQTPGeometricPlotElement(DrawAsGraphicElement, parent)
{
pos=JKQTP_NAN;
median=JKQTP_NAN;

View File

@ -309,7 +309,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPBoxplotHorizontalGraph: public JKQTPBoxplotVer
\see jkqtpstatVAddBoxplot(), \ref JKQTPlotterBasicJKQTPDatastoreStatistics, \ref JKQTPlotterBoxplotsGraphs, \ref JKQTPlotterBoxplotStyling, jkqtpstatAddVBoxplotAndOutliers()
*/
class JKQTPLOTTER_LIB_EXPORT JKQTPBoxplotVerticalElement: public JKQTPPlotObject, public JKQTPGraphBoxplotStyleMixin {
class JKQTPLOTTER_LIB_EXPORT JKQTPBoxplotVerticalElement: public JKQTPGeometricPlotElement, public JKQTPGraphBoxplotStyleMixin {
Q_OBJECT
public:
/** \brief class constructor */

View File

@ -43,7 +43,7 @@ JKQTPGeoText::JKQTPGeoText(JKQTPlotter* parent, double x, double y, const QStrin
}
JKQTPGeoText::JKQTPGeoText(JKQTBasePlotter *parent, double x_, double y_, const QString& text_):
JKQTPPlotObject(DrawAsGraphicElement, parent), JKQTPGraphTextStyleMixin(parent), x(x_),y(y_),text(text_)
JKQTPPlotAnnotationElement(parent), JKQTPGraphTextStyleMixin(parent), x(x_),y(y_),text(text_)
{
}
@ -131,7 +131,7 @@ QColor JKQTPGeoText::getKeyLabelColor() const {
JKQTPGeoSymbol::JKQTPGeoSymbol(JKQTBasePlotter *parent, double x, double y, JKQTPGraphSymbols symbol, double symbolSize, QColor color, QColor fillColor):
JKQTPPlotObject(DrawAsGraphicElement, parent)
JKQTPPlotAnnotationElement(parent)
{
this->x=x;
this->y=y;

View File

@ -33,13 +33,13 @@
/*! \brief This virtual JKQTPGraph descendent may be used to display a single symbol (marker).
/*! \brief This virtual JKQTPPlotAnnotationElement descendent may be used to display a single symbol (marker).
\ingroup jkqtplotter_annotations
\see \ref JKQTPlotterGeometricGraphs
*/
class JKQTPLOTTER_LIB_EXPORT JKQTPGeoSymbol: public JKQTPPlotObject, public JKQTPGraphSymbolStyleMixin {
class JKQTPLOTTER_LIB_EXPORT JKQTPGeoSymbol: public JKQTPPlotAnnotationElement, public JKQTPGraphSymbolStyleMixin {
Q_OBJECT
public:
/*! \brief class contructor
@ -65,21 +65,14 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoSymbol: public JKQTPPlotObject, public JKQT
*/
JKQTPGeoSymbol(JKQTPlotter* parent, double x, double y, JKQTPGraphSymbols symbol=JKQTPCross, double symbolSize=10, QColor color=QColor("black"), QColor fillColor=QColor("grey"));
/*! set the symbol color and symbol fill color */
virtual void setColor(QColor c);
/*! \copydoc x */
void setX(double __value);
/*! \copydoc x */
double getX() const;
/*! \copydoc y */
void setY(double __value);
/*! \copydoc y */
double getY() const;
/** \copydoc JKQTPGraph::getXMinMax() */
/** \copydoc JKQTPPlotAnnotationElement::getXMinMax() */
virtual bool getXMinMax(double& minx, double& maxx, double& smallestGreaterZero) override;
/** \copydoc JKQTPGraph::getYMinMax() */
/** \copydoc JKQTPPlotAnnotationElement::getYMinMax() */
virtual bool getYMinMax(double& miny, double& maxy, double& smallestGreaterZero) override;
/** \brief plots the graph to the plotter object specified as parent */
@ -89,7 +82,15 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoSymbol: public JKQTPPlotObject, public JKQT
virtual void drawKeyMarker(JKQTPEnhancedPainter& painter, QRectF& rect) override;
/** \brief returns the color to be used for the key label */
virtual QColor getKeyLabelColor() const override;
public slots:
/*! set the symbol color and symbol fill color */
virtual void setColor(QColor c);
/*! \copydoc x */
void setX(double __value);
/*! \copydoc y */
void setY(double __value);
protected:
/** \brief x-position (in plot coordinates) of the symbol (symbol center) */
double x;
@ -99,13 +100,13 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoSymbol: public JKQTPPlotObject, public JKQT
};
/*! \brief This JKQTPPlotObject is used to display text. It uses the JKQTMathText
/*! \brief This JKQTPPlotAnnotationElement is used to display text. It uses the JKQTMathText
class in order to display LaTeX formulas.
\ingroup jkqtplotter_annotations
\see \ref JKQTPlotterGeometricGraphs
*/
class JKQTPLOTTER_LIB_EXPORT JKQTPGeoText: public JKQTPPlotObject, public JKQTPGraphTextStyleMixin {
class JKQTPLOTTER_LIB_EXPORT JKQTPGeoText: public JKQTPPlotAnnotationElement, public JKQTPGraphTextStyleMixin {
Q_OBJECT
public:
/*! \brief class contructor
@ -145,25 +146,17 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoText: public JKQTPPlotObject, public JKQTPG
*/
JKQTPGeoText(JKQTPlotter* parent, double x, double y, const QString& text);
/*! \copydoc text */
void setText(const QString & __value);
/*! \copydoc text */
QString getText() const;
/*! \copydoc x */
void setX(double __value);
/*! \copydoc x */
double getX() const;
/*! \copydoc y */
void setY(double __value);
/*! \copydoc y */
double getY() const;
/** \brief set line and fill color */
virtual void setColor(QColor c) ;
/** \copydoc JKQTPPlotObject::getXMinMax() */
/** \copydoc JKQTPPlotAnnotationElement::getXMinMax() */
virtual bool getXMinMax(double& minx, double& maxx, double& smallestGreaterZero) override;
/** \copydoc JKQTPPlotObject::getYMinMax() */
/** \copydoc JKQTPPlotAnnotationElement::getYMinMax() */
virtual bool getYMinMax(double& miny, double& maxy, double& smallestGreaterZero) override;
/** \brief plots the graph to the plotter object specified as parent */
@ -173,6 +166,16 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoText: public JKQTPPlotObject, public JKQTPG
virtual void drawKeyMarker(JKQTPEnhancedPainter& painter, QRectF& rect) override;
/** \brief returns the color to be used for the key label */
virtual QColor getKeyLabelColor() const override;
public slots:
/** \brief set line and fill color */
virtual void setColor(QColor c) ;
/*! \copydoc text */
void setText(const QString & __value);
/*! \copydoc x */
void setX(double __value);
/*! \copydoc y */
void setY(double __value);
protected:
/** \brief x-position (in plot coordinates) of the text (left/baseline) */

View File

@ -28,7 +28,7 @@
#define SmallestGreaterZeroCompare_xvsgz() if ((xvsgz>10.0*DBL_MIN)&&((smallestGreaterZero<10.0*DBL_MIN) || (xvsgz<smallestGreaterZero))) smallestGreaterZero=xvsgz;
JKQTPGeoBaseLine::JKQTPGeoBaseLine(QColor color, double lineWidth, Qt::PenStyle style, JKQTBasePlotter* parent, DrawMode drawMode):
JKQTPPlotObject(drawMode, parent)
JKQTPGeometricPlotElement(drawMode, parent)
{
setLineColor(color);
setLineWidth(lineWidth);
@ -36,7 +36,7 @@ JKQTPGeoBaseLine::JKQTPGeoBaseLine(QColor color, double lineWidth, Qt::PenStyle
}
JKQTPGeoBaseLine::JKQTPGeoBaseLine(JKQTBasePlotter *parent, DrawMode drawMode):
JKQTPPlotObject(drawMode, parent)
JKQTPGeometricPlotElement(drawMode, parent)
{
}
@ -124,7 +124,7 @@ void JKQTPGeoBaseFilled::drawKeyMarker(JKQTPEnhancedPainter& painter, QRectF& re
JKQTPGeoBaseDecoratedHeadLine::JKQTPGeoBaseDecoratedHeadLine(QColor color, double lineWidth, JKQTPLineDecoratorStyle headStyle, Qt::PenStyle style, JKQTBasePlotter *parent, DrawMode drawMode):
JKQTPPlotObject(drawMode, parent)
JKQTPGeometricPlotElement(drawMode, parent)
{
setLineColor(color);
setLineWidth(lineWidth);
@ -133,7 +133,7 @@ JKQTPGeoBaseDecoratedHeadLine::JKQTPGeoBaseDecoratedHeadLine(QColor color, doubl
}
JKQTPGeoBaseDecoratedHeadLine::JKQTPGeoBaseDecoratedHeadLine(JKQTBasePlotter *parent, DrawMode drawMode):
JKQTPPlotObject(drawMode, parent)
JKQTPGeometricPlotElement(drawMode, parent)
{
}
@ -165,7 +165,7 @@ QColor JKQTPGeoBaseDecoratedHeadLine::getKeyLabelColor() const
JKQTPGeoBaseDecoratedLine::JKQTPGeoBaseDecoratedLine(QColor color, double lineWidth, JKQTPLineDecoratorStyle headStyle, JKQTPLineDecoratorStyle tailStyle, Qt::PenStyle style, JKQTBasePlotter *parent, DrawMode drawMode):
JKQTPPlotObject(drawMode, parent)
JKQTPGeometricPlotElement(drawMode, parent)
{
setLineColor(color);
setLineWidth(lineWidth);
@ -175,7 +175,7 @@ JKQTPGeoBaseDecoratedLine::JKQTPGeoBaseDecoratedLine(QColor color, double lineWi
}
JKQTPGeoBaseDecoratedLine::JKQTPGeoBaseDecoratedLine(JKQTBasePlotter *parent, DrawMode drawMode):
JKQTPPlotObject(drawMode, parent)
JKQTPGeometricPlotElement(drawMode, parent)
{
}

View File

@ -31,12 +31,12 @@
#define jkqtpgeobase_H_INCLUDED
/*! \brief This JKQTPPlotObject is used as base class for geometric drawing
/*! \brief This JKQTPGeometricPlotElement is used as base class for geometric drawing
elements that only consist of lines (i.e. no filling of any kind is done)
\ingroup jkqtplotter_geoplots
*/
class JKQTPLOTTER_LIB_EXPORT JKQTPGeoBaseLine: public JKQTPPlotObject, public JKQTPGraphLineStyleMixin {
class JKQTPLOTTER_LIB_EXPORT JKQTPGeoBaseLine: public JKQTPGeometricPlotElement, public JKQTPGraphLineStyleMixin {
Q_OBJECT
public:
/*! \brief class contructor
@ -73,12 +73,12 @@ protected:
/*! \brief This JKQTPPlotObject is used as base class for geometric drawing
/*! \brief This JKQTPGeometricPlotElement is used as base class for geometric drawing
elements that consist of lines with one decorated end (i.e. no filling of any kind is done)
\ingroup jkqtplotter_geoplots
*/
class JKQTPLOTTER_LIB_EXPORT JKQTPGeoBaseDecoratedHeadLine: public JKQTPPlotObject, public JKQTPGraphDecoratedHeadLineStyleMixin {
class JKQTPLOTTER_LIB_EXPORT JKQTPGeoBaseDecoratedHeadLine: public JKQTPGeometricPlotElement, public JKQTPGraphDecoratedHeadLineStyleMixin {
Q_OBJECT
public:
/*! \brief class contructor
@ -116,12 +116,12 @@ protected:
/*! \brief This JKQTPPlotObject is used as base class for geometric drawing
/*! \brief This JKQTPGeometricPlotElement is used as base class for geometric drawing
elements that consist of lines with decorated ends (i.e. no filling of any kind is done)
\ingroup jkqtplotter_geoplots
*/
class JKQTPLOTTER_LIB_EXPORT JKQTPGeoBaseDecoratedLine: public JKQTPPlotObject, public JKQTPGraphDecoratedLineStyleMixin {
class JKQTPLOTTER_LIB_EXPORT JKQTPGeoBaseDecoratedLine: public JKQTPGeometricPlotElement, public JKQTPGraphDecoratedLineStyleMixin {
Q_OBJECT
public:
/*! \brief class contructor
@ -154,7 +154,7 @@ protected:
};
/*! \brief This JKQTPPlotObject is used as base class for geometric drawing
/*! \brief This JKQTPGeometricPlotElement is used as base class for geometric drawing
elements that only consist of lines (i.e. no filling of any kind is done)
\ingroup jkqtplotter_geoplots

View File

@ -160,7 +160,7 @@ void JKQTPGeoLine::draw(JKQTPEnhancedPainter& painter) {
// for non-linear axes, a line might not be drawn as a line, so we need to segment the line (i.e. linear function in coordinate space)
// and transform each node to draw the corresponding non-linear curve in pixel-space!
auto fTransform=std::bind([](const JKQTPPlotObject* plot, const QPointF& p) { return plot->transform(p); }, this, std::placeholders::_1);
auto fTransform=std::bind([](const JKQTPGeometricPlotElement* plot, const QPointF& p) { return plot->transform(p); }, this, std::placeholders::_1);
QVector<QPointF> points=JKQTPSplitLineIntoPoints(line, fTransform);
points=JKQTPSimplyfyLineSegemnts(points);
if (points.size()>1) {
@ -447,7 +447,7 @@ void JKQTPGeoInfiniteLine::draw(JKQTPEnhancedPainter& painter) {
} else {
// for non-linear axes, a line might not be drawn as a line, so we need to segment the line (i.e. linear function in coordinate space)
// and transform each node to draw the corresponding non-linear curve in pixel-space!
auto fTransform=std::bind([](const JKQTPPlotObject* plot, const QPointF& p) { return plot->transform(p); }, this, std::placeholders::_1);
auto fTransform=std::bind([](const JKQTPGeometricPlotElement* plot, const QPointF& p) { return plot->transform(p); }, this, std::placeholders::_1);
QVector<QPointF> points=JKQTPSplitLineIntoPoints(QLineF(x1,y1,x2,y2), fTransform);
points=JKQTPSimplyfyLineSegemnts(points);
if (points.size()>1) {
@ -630,7 +630,7 @@ void JKQTPGeoPolyLines::draw(JKQTPEnhancedPainter& painter) {
} else {
// for non-linear axes, a line might not be drawn as a line, so we need to segment the line (i.e. linear function in coordinate space)
// and transform each node to draw the corresponding non-linear curve in pixel-space!
auto fTransform=std::bind([](const JKQTPPlotObject* plot, const QPointF& p) { return plot->transform(p); }, this, std::placeholders::_1);
auto fTransform=std::bind([](const JKQTPGeometricPlotElement* plot, const QPointF& p) { return plot->transform(p); }, this, std::placeholders::_1);
QVector<QPointF> points_poly=JKQTPSplitPolylineIntoPoints(points, fTransform);
points_poly=JKQTPSimplyfyLineSegemnts(points_poly);
if (points_poly.size()>1) {
@ -747,7 +747,7 @@ JKQTPGeoArc::JKQTPGeoArc(JKQTPlotter* parent, double x, double y, double width,
void JKQTPGeoArc::draw(JKQTPEnhancedPainter& painter) {
auto fTransform=std::bind([](const JKQTPPlotObject* plot, const QPointF& p) { return plot->transform(p); }, this, std::placeholders::_1);
auto fTransform=std::bind([](const JKQTPGeometricPlotElement* plot, const QPointF& p) { return plot->transform(p); }, this, std::placeholders::_1);
const QPolygonF rect=JKQTPSplitEllipseIntoPoints(fTransform, x,y,width/2.0, height/2.0,angleStart,angleStop, angle);
painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();});

View File

@ -32,7 +32,7 @@
/** \brief This JKQTPPlotObject is used to draw a line, optionally line-end decorations (aka arrows) are pssible, but switched off by default.
/** \brief This JKQTPGeometricPlotElement is used to draw a line, optionally line-end decorations (aka arrows) are pssible, but switched off by default.
* \ingroup jkqtplotter_geoplots
*
* \image html JKQTPGeoLine_HeadTail.png
@ -40,10 +40,10 @@
*
* \image html plot_geoline.png
*
* \note This class support JKQTPPlotObject::DrawMode::DrawAsMathematicalCurve. If set,
* \note This class support JKQTPGeometricPlotElement::DrawMode::DrawAsMathematicalCurve. If set,
* and non-linear axes are chosen, the line is drawn as a curves, instead of straight
* a straight line. In the mode
* JKQTPPlotObject::DrawMode::DrawAsGraphicElement the line is drawn as a straight line.
* JKQTPGeometricPlotElement::DrawMode::DrawAsGraphicElement the line is drawn as a straight line.
*
* You can also activate line-end decorators (aka arrows) for this poly-line, by using code like this:
* \code
@ -188,14 +188,14 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoLine: public JKQTPGeoBaseDecoratedLine {
/** \copydoc JKQTPPlotObject::getXMinMax() */
/** \copydoc JKQTPGeometricPlotElement::getXMinMax() */
virtual bool getXMinMax(double& minx, double& maxx, double& smallestGreaterZero) override;
/** \copydoc JKQTPPlotObject::getYMinMax() */
/** \copydoc JKQTPGeometricPlotElement::getYMinMax() */
virtual bool getYMinMax(double& miny, double& maxy, double& smallestGreaterZero) override;
/** \brief plots the graph to the plotter object specified as parent
*
* \note This function support JKQTPPlotObject::DrawMode::DrawAsMathematicalCurve. If set,
* \note This function support JKQTPGeometricPlotElement::DrawMode::DrawAsMathematicalCurve. If set,
* and non-linear axes are chosen, the line will possibly be represented as a curve,
* instead of a straight line.
*/
@ -291,7 +291,7 @@ public:
/** \brief This JKQTPPlotObject is used to draw an infinite line
/** \brief This JKQTPGeometricPlotElement is used to draw an infinite line
* \ingroup jkqtplotter_geoplots
*
* an infinite line has a starting point and then goes on in a given direction
@ -300,10 +300,10 @@ public:
* \image html plot_geoinfiniteline.png
*
*
* \note This class support JKQTPPlotObject::DrawMode::DrawAsMathematicalCurve. If set,
* \note This class support JKQTPGeometricPlotElement::DrawMode::DrawAsMathematicalCurve. If set,
* and non-linear axes are chosen, the line is drawn as a curves, instead of straight
* a straight line. In the mode
* JKQTPPlotObject::DrawMode::DrawAsGraphicElement the line is drawn as a straight line.
* JKQTPGeometricPlotElement::DrawMode::DrawAsGraphicElement the line is drawn as a straight line.
*
* You can add a decorator to the head of the line (i.e. the given start point (x,y) ) iff this line is one-sided, i.e. two_sided \c ==false .
*
@ -339,14 +339,14 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoInfiniteLine: public JKQTPGeoBaseDecoratedH
JKQTPGeoInfiniteLine(JKQTPlotter* parent, double x, double y, double dx, double dy, QColor color=QColor("black"), double lineWidth=1, Qt::PenStyle style=Qt::SolidLine);
/** \copydoc JKQTPPlotObject::getXMinMax() */
/** \copydoc JKQTPGeometricPlotElement::getXMinMax() */
virtual bool getXMinMax(double& minx, double& maxx, double& smallestGreaterZero) override;
/** \copydoc JKQTPPlotObject::getYMinMax() */
/** \copydoc JKQTPGeometricPlotElement::getYMinMax() */
virtual bool getYMinMax(double& miny, double& maxy, double& smallestGreaterZero) override;
/** \brief plots the graph to the plotter object specified as parent
*
* \note This function support JKQTPPlotObject::DrawMode::DrawAsMathematicalCurve. If set,
* \note This function support JKQTPGeometricPlotElement::DrawMode::DrawAsMathematicalCurve. If set,
* and non-linear axes are chosen, the line will possibly be represented as a curve,
* instead of a straight line.
*/
@ -391,15 +391,15 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoInfiniteLine: public JKQTPGeoBaseDecoratedH
};
/** \brief This JKQTPPlotObject is used to draw a poly line
/** \brief This JKQTPGeometricPlotElement is used to draw a poly line
* \ingroup jkqtplotter_geoplots
*
* \image html plot_geolines.png
*
* \note This class support JKQTPPlotObject::DrawMode::DrawAsMathematicalCurve. If set,
* \note This class support JKQTPGeometricPlotElement::DrawMode::DrawAsMathematicalCurve. If set,
* and non-linear axes are chosen, the points of the poly-line will be possibly
* connected by curves, instead of straight lines. In the mode
* JKQTPPlotObject::DrawMode::DrawAsGraphicElement the points are connected by straight
* JKQTPGeometricPlotElement::DrawMode::DrawAsGraphicElement the points are connected by straight
* lines, independent of the linearity or non-linearity of the coordinate axes.
*
* You can also activate line-end decorators (aka arrows) for this poly-line, by using code like this:
@ -454,17 +454,17 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoPolyLines: public JKQTPGeoBaseDecoratedLine
JKQTPGeoPolyLines(JKQTPlotter* parent, QColor color=QColor("black"), double lineWidth=1, Qt::PenStyle style=Qt::SolidLine);
/** \copydoc JKQTPPlotObject::getXMinMax() */
/** \copydoc JKQTPGeometricPlotElement::getXMinMax() */
virtual bool getXMinMax(double& minx, double& maxx, double& smallestGreaterZero) override;
/** \copydoc JKQTPPlotObject::getYMinMax() */
/** \copydoc JKQTPGeometricPlotElement::getYMinMax() */
virtual bool getYMinMax(double& miny, double& maxy, double& smallestGreaterZero) override;
/** \brief plots the graph to the plotter object specified as parent
*
* \note This function support JKQTPPlotObject::DrawMode::DrawAsMathematicalCurve. If set,
* \note This function support JKQTPGeometricPlotElement::DrawMode::DrawAsMathematicalCurve. If set,
* and non-linear axes are chosen, the points of the poly-line will be possibly
* connected by curves, instead of straight lines. In the mode
* JKQTPPlotObject::DrawMode::DrawAsGraphicElement the points are connected by straight
* JKQTPGeometricPlotElement::DrawMode::DrawAsGraphicElement the points are connected by straight
* lines, independent of the linearity or non-linearity of the coordinate axes.
*/
virtual void draw(JKQTPEnhancedPainter& painter) override;
@ -504,7 +504,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoPolyLines: public JKQTPGeoBaseDecoratedLine
};
/** \brief This JKQTPPlotObject is used to draw an arc
/** \brief This JKQTPGeometricPlotElement is used to draw an arc
* \ingroup jkqtplotter_geoplots
*
*
@ -512,7 +512,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoPolyLines: public JKQTPGeoBaseDecoratedLine
*
* \image html plot_geopie.png
*
* \note This class support the JKQTPPlotObject::DrawMode::DrawAsMathematicalCurve only.
* \note This class support the JKQTPGeometricPlotElement::DrawMode::DrawAsMathematicalCurve only.
* This means that arcs are always treated as mathematical curves, as no meaningful
* parametrization for arcs on non-linear axes could be found!
*
@ -552,15 +552,15 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoArc: public JKQTPGeoBaseLine {
*/
JKQTPGeoArc(JKQTPlotter* parent, double x, double y, double width, double height, double angleStart, double angleStop, QColor color=QColor("black"), double lineWidth=1, Qt::PenStyle style=Qt::SolidLine);
/** \copydoc JKQTPPlotObject::getXMinMax() */
/** \copydoc JKQTPGeometricPlotElement::getXMinMax() */
virtual bool getXMinMax(double& minx, double& maxx, double& smallestGreaterZero) override;
/** \copydoc JKQTPPlotObject::getYMinMax() */
/** \copydoc JKQTPGeometricPlotElement::getYMinMax() */
virtual bool getYMinMax(double& miny, double& maxy, double& smallestGreaterZero) override;
/** \brief plots the graph to the plotter object specified as parent
*
* \note This function support the JKQTPPlotObject::DrawMode::DrawAsMathematicalCurve only.
* \note This function support the JKQTPGeometricPlotElement::DrawMode::DrawAsMathematicalCurve only.
* This means that arcs are always treated as mathematical curves, as no meaningful
* parametrization for arcs on non-linear axes could be found!
*/

View File

@ -77,25 +77,25 @@ JKQTPGeoRectangle::JKQTPGeoRectangle(JKQTPlotter *parent, QPointF bottomleft, QP
{
}
JKQTPGeoRectangle::JKQTPGeoRectangle(JKQTBasePlotter *parent, const QPointF &center, const QSizeF &size, double angle, QColor color, double lineWidth, Qt::PenStyle style, QColor fillColor, Qt::BrushStyle fillStyle, JKQTPPlotObject::DrawMode drawMode):
JKQTPGeoRectangle::JKQTPGeoRectangle(JKQTBasePlotter *parent, const QPointF &center, const QSizeF &size, double angle, QColor color, double lineWidth, Qt::PenStyle style, QColor fillColor, Qt::BrushStyle fillStyle, JKQTPGeometricPlotElement::DrawMode drawMode):
JKQTPGeoRectangle(parent, center.x(), center.y(), size.width(), size.height(), angle, color, lineWidth, style, fillColor, fillStyle, drawMode)
{
}
JKQTPGeoRectangle::JKQTPGeoRectangle(JKQTPlotter *parent, const QPointF &center, const QSizeF &size, double angle, QColor color, double lineWidth, Qt::PenStyle style, QColor fillColor, Qt::BrushStyle fillStyle, JKQTPPlotObject::DrawMode drawMode):
JKQTPGeoRectangle::JKQTPGeoRectangle(JKQTPlotter *parent, const QPointF &center, const QSizeF &size, double angle, QColor color, double lineWidth, Qt::PenStyle style, QColor fillColor, Qt::BrushStyle fillStyle, JKQTPGeometricPlotElement::DrawMode drawMode):
JKQTPGeoRectangle(parent->getPlotter(), center, size, angle, color, lineWidth, style, fillColor, fillStyle, drawMode)
{
}
JKQTPGeoRectangle::JKQTPGeoRectangle(JKQTBasePlotter *parent, const QPointF &center, const QSizeF &size, QColor color, double lineWidth, Qt::PenStyle style, QColor fillColor, Qt::BrushStyle fillStyle, JKQTPPlotObject::DrawMode drawMode):
JKQTPGeoRectangle::JKQTPGeoRectangle(JKQTBasePlotter *parent, const QPointF &center, const QSizeF &size, QColor color, double lineWidth, Qt::PenStyle style, QColor fillColor, Qt::BrushStyle fillStyle, JKQTPGeometricPlotElement::DrawMode drawMode):
JKQTPGeoRectangle(parent, center.x(), center.y(), size.width(), size.height(), color, lineWidth, style, fillColor, fillStyle, drawMode)
{
}
JKQTPGeoRectangle::JKQTPGeoRectangle(JKQTPlotter *parent, const QPointF &center, const QSizeF &size, QColor color, double lineWidth, Qt::PenStyle style, QColor fillColor, Qt::BrushStyle fillStyle, JKQTPPlotObject::DrawMode drawMode):
JKQTPGeoRectangle::JKQTPGeoRectangle(JKQTPlotter *parent, const QPointF &center, const QSizeF &size, QColor color, double lineWidth, Qt::PenStyle style, QColor fillColor, Qt::BrushStyle fillStyle, JKQTPGeometricPlotElement::DrawMode drawMode):
JKQTPGeoRectangle(parent->getPlotter(), center, size, color, lineWidth, style, fillColor, fillStyle, drawMode)
{
@ -152,7 +152,7 @@ void JKQTPGeoRectangle::draw(JKQTPEnhancedPainter& painter) {
if ((getDrawMode()==DrawAsGraphicElement) || (getParent()->getXAxis()->isLinearAxis() && getParent()->getYAxis()->isLinearAxis())) {
rect=transform(poly);
} else {
auto fTransform=std::bind([](const JKQTPPlotObject* plot, const QPointF& p) { return plot->transform(p); }, this, std::placeholders::_1);
auto fTransform=std::bind([](const JKQTPGeometricPlotElement* plot, const QPointF& p) { return plot->transform(p); }, this, std::placeholders::_1);
rect=JKQTPSplitPolylineIntoPoints(poly, fTransform);
}
for (const auto& p:poly) {
@ -331,7 +331,7 @@ void JKQTPGeoPolygon::draw(JKQTPEnhancedPainter& painter) {
} else {
// for non-linear axes, a line might not be drawn as a line, so we need to segment the line (i.e. linear function in coordinate space)
// and transform each node to draw the corresponding non-linear curve in pixel-space!
auto fTransform=std::bind([](const JKQTPPlotObject* plot, const QPointF& p) { return plot->transform(p); }, this, std::placeholders::_1);
auto fTransform=std::bind([](const JKQTPGeometricPlotElement* plot, const QPointF& p) { return plot->transform(p); }, this, std::placeholders::_1);
QVector<QPointF> polyp=points;
if (polyp.first()!=polyp.last()) polyp.push_back(polyp.first());
QPolygonF path=JKQTPSplitPolylineIntoPoints(polyp, fTransform);
@ -462,7 +462,7 @@ void JKQTPGeoEllipse::drawInternal(JKQTPEnhancedPainter& painter, double angleSt
painter.setBrush(getFillBrush(painter, parent));
auto fTransform=std::bind([](const JKQTPPlotObject* plot, const QPointF& p) { return plot->transform(p); }, this, std::placeholders::_1);
auto fTransform=std::bind([](const JKQTPGeometricPlotElement* plot, const QPointF& p) { return plot->transform(p); }, this, std::placeholders::_1);
QPolygonF rect;
if(mode==InternalDrawMode::Ellipse) {
rect=JKQTPSplitEllipseIntoPoints(fTransform, x,y,width/2.0, height/2.0,0,360, angle);

View File

@ -33,15 +33,15 @@
/** \brief This JKQTPPlotObject is used to draw a rectangle
/** \brief This JKQTPGeometricPlotElement is used to draw a rectangle
* \ingroup jkqtplotter_geoplots
*
* \image html plot_georectangle.png
*
* \note This class support JKQTPPlotObject::DrawMode::DrawAsMathematicalCurve. If set,
* \note This class support JKQTPGeometricPlotElement::DrawMode::DrawAsMathematicalCurve. If set,
* and non-linear axes are chosen, the corner points of the rectangle will be possibly
* connected by curves, instead of straight lines. In the mode
* JKQTPPlotObject::DrawMode::DrawAsGraphicElement the corners are connected by straight
* JKQTPGeometricPlotElement::DrawMode::DrawAsGraphicElement the corners are connected by straight
* lines, independent of the linearity or non-linearity of the coordinate axes.
*
* \see \ref JKQTPlotterGeometricGraphs
@ -184,14 +184,14 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoRectangle: public JKQTPGeoBaseFilled {
/** \copydoc JKQTPPlotObject::getXMinMax() */
/** \copydoc JKQTPGeometricPlotElement::getXMinMax() */
virtual bool getXMinMax(double& minx, double& maxx, double& smallestGreaterZero) override;
/** \copydoc JKQTPPlotObject::getYMinMax() */
/** \copydoc JKQTPGeometricPlotElement::getYMinMax() */
virtual bool getYMinMax(double& miny, double& maxy, double& smallestGreaterZero) override;
/** \brief plots the graph to the plotter object specified as parent
*
* \note This function support JKQTPPlotObject::DrawMode::DrawAsMathematicalCurve. If set,
* \note This function support JKQTPGeometricPlotElement::DrawMode::DrawAsMathematicalCurve. If set,
* and non-linear axes are chosen, the corner points of the rectangle will be possibly
* connected by curves, instead of straight lines.
*/
@ -256,12 +256,12 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoRectangle: public JKQTPGeoBaseFilled {
};
/** \brief This JKQTPPlotObject is used to draw a polygon
/** \brief This JKQTPGeometricPlotElement is used to draw a polygon
* \ingroup jkqtplotter_geoplots
*
* \image html plot_geopolygon.png
*
* \note This function support JKQTPPlotObject::DrawMode::DrawAsMathematicalCurve. If set,
* \note This function support JKQTPGeometricPlotElement::DrawMode::DrawAsMathematicalCurve. If set,
* and non-linear axes are chosen, the points of the polygon will be possibly
* connected by curves, instead of straight lines.
*
@ -316,14 +316,14 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoPolygon: public JKQTPGeoBaseFilled {
JKQTPGeoPolygon(JKQTPlotter* parent, QColor color=QColor("black"), double lineWidth=1, Qt::PenStyle style=Qt::SolidLine, QColor fillColor=QColor("transparent"), Qt::BrushStyle fillStyle=Qt::SolidPattern, DrawMode drawMode=DrawAsGraphicElement);
/** \copydoc JKQTPPlotObject::getXMinMax() */
/** \copydoc JKQTPGeometricPlotElement::getXMinMax() */
virtual bool getXMinMax(double& minx, double& maxx, double& smallestGreaterZero) override;
/** \copydoc JKQTPPlotObject::getYMinMax() */
/** \copydoc JKQTPGeometricPlotElement::getYMinMax() */
virtual bool getYMinMax(double& miny, double& maxy, double& smallestGreaterZero) override;
/** \brief plots the graph to the plotter object specified as parent
*
* \note This function support JKQTPPlotObject::DrawMode::DrawAsMathematicalCurve. If set,
* \note This function support JKQTPGeometricPlotElement::DrawMode::DrawAsMathematicalCurve. If set,
* and non-linear axes are chosen, the points of the polygon will be possibly
* connected by curves, instead of straight lines.
*/
@ -364,17 +364,17 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoPolygon: public JKQTPGeoBaseFilled {
QVector<QPointF> points;
};
/** \brief This JKQTPPlotObject is used to draw an ellipse
/** \brief This JKQTPGeometricPlotElement is used to draw an ellipse
* \ingroup jkqtplotter_geoplots
*
* \image html plot_geoellipse.png
*
* \image html plot_geoellipse_rotated.png
*
* \note This function support the JKQTPPlotObject::DrawMode::DrawAsMathematicalCurve only.
* \note This function support the JKQTPGeometricPlotElement::DrawMode::DrawAsMathematicalCurve only.
* This means that ellipses are always treated as mathematical curves, as no meaningful
* parametrization for ellipses on non-linear axes could be found! In the mode
* JKQTPPlotObject::DrawMode::DrawAsGraphicElement the points are connected by straight
* JKQTPGeometricPlotElement::DrawMode::DrawAsGraphicElement the points are connected by straight
* lines, independent of the linearity or non-linearity of the coordinate axes.
*
* \see <a href="http://www.codeguru.com/cpp/g-m/gdi/article.php/c131">http://www.codeguru.com/cpp/g-m/gdi/article.php/c131</a> and
@ -472,7 +472,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoEllipse: public JKQTPGeoRectangle {
/** \brief plots the graph to the plotter object specified as parent
*
* \note This function support the JKQTPPlotObject::DrawMode::DrawAsMathematicalCurve only.
* \note This function support the JKQTPGeometricPlotElement::DrawMode::DrawAsMathematicalCurve only.
* This means that ellipses are always treated as mathematical curves, as no meaningful
* parametrization for ellipses on non-linear axes could be found!*/
virtual void draw(JKQTPEnhancedPainter& painter) override;
@ -493,7 +493,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoEllipse: public JKQTPGeoRectangle {
/** \brief This JKQTPPlotObject is used to draw a pie
/** \brief This JKQTPGeometricPlotElement is used to draw a pie
* \ingroup jkqtplotter_geoplots
*
*
@ -512,7 +512,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoEllipse: public JKQTPGeoRectangle {
* plot->addGraph(new JKQTPGeoText(plot, 3.5+0.55*cos(110.0/180.0*JKQTPSTATISTICS_PI),0.5+0.55*sin(110.0/180.0*JKQTPSTATISTICS_PI), "110\\degree", 10, QColor("grey")));
* \endcode
*
* \note This function support the JKQTPPlotObject::DrawMode::DrawAsMathematicalCurve only.
* \note This function support the JKQTPGeometricPlotElement::DrawMode::DrawAsMathematicalCurve only.
* This means that pies are always treated as mathematical curves, as no meaningful
* parametrization for pies on non-linear axes could be found!
*
@ -555,15 +555,15 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoPie: public JKQTPGeoEllipse {
JKQTPGeoPie(JKQTPlotter* parent, double x, double y, double width, double height, double angleStart, double angleStop, QColor color=QColor("black"), double lineWidth=1, Qt::PenStyle style=Qt::SolidLine, QColor fillColor=QColor("transparent"), Qt::BrushStyle fillStyle=Qt::SolidPattern, DrawMode drawMode=DrawAsGraphicElement);
/** \copydoc JKQTPPlotObject::getXMinMax() */
/** \copydoc JKQTPGeometricPlotElement::getXMinMax() */
virtual bool getXMinMax(double& minx, double& maxx, double& smallestGreaterZero) override;
/** \copydoc JKQTPPlotObject::getYMinMax() */
/** \copydoc JKQTPGeometricPlotElement::getYMinMax() */
virtual bool getYMinMax(double& miny, double& maxy, double& smallestGreaterZero) override;
/** \brief plots the graph to the plotter object specified as parent
*
* \note This function support the JKQTPPlotObject::DrawMode::DrawAsMathematicalCurve only.
* \note This function support the JKQTPGeometricPlotElement::DrawMode::DrawAsMathematicalCurve only.
* This means that pies are always treated as mathematical curves, as no meaningful
* parametrization for pies on non-linear axes could be found!*/
virtual void draw(JKQTPEnhancedPainter& painter) override;
@ -586,14 +586,14 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoPie: public JKQTPGeoEllipse {
/** \brief This JKQTPPlotObject is used to draw a chord
/** \brief This JKQTPGeometricPlotElement is used to draw a chord
* \ingroup jkqtplotter_geoplots
*
* A chord on linear and log-log axes (start angle: 10deg and end-angle 110deg):
*
* \image html plot_geochord.png
*
* \note This function support the JKQTPPlotObject::DrawMode::DrawAsMathematicalCurve only.
* \note This function support the JKQTPGeometricPlotElement::DrawMode::DrawAsMathematicalCurve only.
* This means that chords are always treated as mathematical curves, as no meaningful
* parametrization for chords on non-linear axes could be found!
*
@ -635,14 +635,14 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGeoChord: public JKQTPGeoPie {
*/
JKQTPGeoChord(JKQTPlotter* parent, double x, double y, double width, double height, double angleStart, double angleStop, QColor color=QColor("black"), double lineWidth=1, Qt::PenStyle style=Qt::SolidLine, QColor fillColor=QColor("transparent"), Qt::BrushStyle fillStyle=Qt::SolidPattern, DrawMode drawMode=DrawAsGraphicElement);
/** \copydoc JKQTPPlotObject::getXMinMax() */
/** \copydoc JKQTPGeometricPlotElement::getXMinMax() */
virtual bool getXMinMax(double& minx, double& maxx, double& smallestGreaterZero) override;
/** \copydoc JKQTPPlotObject::getYMinMax() */
/** \copydoc JKQTPGeometricPlotElement::getYMinMax() */
virtual bool getYMinMax(double& miny, double& maxy, double& smallestGreaterZero) override;
/** \brief plots the graph to the plotter object specified as parent
*
* \note This function support the JKQTPPlotObject::DrawMode::DrawAsMathematicalCurve only.
* \note This function support the JKQTPGeometricPlotElement::DrawMode::DrawAsMathematicalCurve only.
* This means that chords are always treated as mathematical curves, as no meaningful
* parametrization for chords on non-linear axes could be found!
*/

View File

@ -40,7 +40,7 @@
JKQTPViolinplotVerticalElement::JKQTPViolinplotVerticalElement(JKQTBasePlotter* parent):
JKQTPPlotObject(DrawAsGraphicElement, parent)
JKQTPGeometricPlotElement(DrawAsGraphicElement, parent)
{
pos=JKQTP_NAN;
median=JKQTP_NAN;

View File

@ -60,7 +60,7 @@
\see \ref JKQTPlotterViolinplotGraphs
*/
class JKQTPLOTTER_LIB_EXPORT JKQTPViolinplotVerticalElement: public JKQTPPlotObject, public JKQTPGraphViolinplotStyleMixin {
class JKQTPLOTTER_LIB_EXPORT JKQTPViolinplotVerticalElement: public JKQTPGeometricPlotElement, public JKQTPGraphViolinplotStyleMixin {
Q_OBJECT
public:
/** \brief class constructor */

View File

@ -666,24 +666,24 @@ bool JKQTPXYGraph::getIndexRange(int& imin, int& imax) const
JKQTPPlotObject::JKQTPPlotObject(DrawMode drawMode, JKQTBasePlotter *parent):
JKQTPGeometricPlotElement::JKQTPGeometricPlotElement(DrawMode drawMode, JKQTBasePlotter *parent):
JKQTPPlotElement(parent), m_drawMode(drawMode)
{
}
void JKQTPPlotObject::setDrawMode(JKQTPPlotObject::DrawMode mode)
void JKQTPGeometricPlotElement::setDrawMode(JKQTPGeometricPlotElement::DrawMode mode)
{
m_drawMode=mode;
}
JKQTPPlotObject::DrawMode JKQTPPlotObject::getDrawMode() const
JKQTPGeometricPlotElement::DrawMode JKQTPGeometricPlotElement::getDrawMode() const
{
return m_drawMode;
}
JKQTPPlotObject::~JKQTPPlotObject()
JKQTPGeometricPlotElement::~JKQTPGeometricPlotElement()
= default;
@ -988,3 +988,13 @@ void JKQTPXYBaselineGraph::setBaseline(double __value)
{
m_baseline=__value;
}
JKQTPPlotAnnotationElement::JKQTPPlotAnnotationElement(JKQTBasePlotter *parent)
{
}
JKQTPPlotAnnotationElement::~JKQTPPlotAnnotationElement()
{
}

View File

@ -436,68 +436,91 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPGraph: public JKQTPPlotElement {
/** \brief this is the virtual base class of all JKQTPPlotElement's in a JKQTPlotter plot that
* represent geometric forms or annotations.
* represent geometric forms.
* \ingroup jkqtplotter_basegraphs
*
* \see \ref jkqtplotter_graphsgroup_classstructure, \ref JKQTPlotterGeometricGraphs
*
* \section JKQTPPlotObject_coordinates Coordinate Systems
* JKQTPPlotObject's have extended coordinate transform capabilities, because in addition to using
* \section JKQTPGeometricPlotElement_coordinates Coordinate Systems
* JKQTPGeometricPlotElement's have extended coordinate transform capabilities, because in addition to using
* the plot coordinates, you can also choose to use different other coordinate systems.
*
* \section JKQTPPlotObject_DrawMode Draw Modes
* \section JKQTPGeometricPlotElement_DrawMode Draw Modes
*
* \copydetails m_drawMode
*/
class JKQTPLOTTER_LIB_EXPORT JKQTPPlotObject: public JKQTPPlotElement {
Q_OBJECT
public:
class JKQTPLOTTER_LIB_EXPORT JKQTPGeometricPlotElement: public JKQTPPlotElement {
Q_OBJECT
public:
/** \brief indicates how to draw the geometric object */
enum DrawMode {
DrawAsGraphicElement, /*!< \brief draw lines as lines (i.e. graphic elements) \image html JKQTPPlotObject_DrawAsGraphicElement.png */
DrawAsMathematicalCurve /*!< \brief draw lines as the mathematically correct curve \image html JKQTPPlotObject_DrawAsMathematicalCurve.png */
};
Q_ENUM(DrawMode)
/** \brief indicates how to draw the geometric object */
enum DrawMode {
DrawAsGraphicElement, /*!< \brief draw lines as lines (i.e. graphic elements) \image html JKQTPGeometricPlotElement_DrawAsGraphicElement.png */
DrawAsMathematicalCurve /*!< \brief draw lines as the mathematically correct curve \image html JKQTPGeometricPlotElement_DrawAsMathematicalCurve.png */
};
Q_ENUM(DrawMode)
/** \brief class constructor */
explicit JKQTPPlotObject(DrawMode drawMode=DrawAsGraphicElement, JKQTBasePlotter* parent=nullptr);
/** \brief class constructor */
explicit JKQTPGeometricPlotElement(DrawMode drawMode=DrawAsGraphicElement, JKQTBasePlotter* parent=nullptr);
/** \brief default wirtual destructor */
virtual ~JKQTPPlotObject() ;
/** \copybrief m_drawMode
/** \brief default wirtual destructor */
virtual ~JKQTPGeometricPlotElement() ;
/** \copybrief m_drawMode
*
* \return the currently set DrawMode
* \see m_drawMode, DrawMode
*/
DrawMode getDrawMode() const;
DrawMode getDrawMode() const;
Q_PROPERTY(DrawMode drawMode READ getDrawMode WRITE setDrawMode)
public slots:
/** \copybrief m_drawMode
Q_PROPERTY(DrawMode drawMode READ getDrawMode WRITE setDrawMode)
public slots:
/** \copybrief m_drawMode
*
* \param mode the DrawMode to use from now on
* \see m_drawMode, DrawMode
*/
void setDrawMode(DrawMode mode);
protected:
/** \brief indicated whether to draw lines as graphic elements (even on non-linear coordinate systems),
void setDrawMode(DrawMode mode);
protected:
/** \brief indicated whether to draw lines as graphic elements (even on non-linear coordinate systems),
* or as mathematically correct curves
*
* It is possible to define in which ways the forms shall be treated/drawn into non-linear
* coordinate systems (e.g. semi-log or log-log plots). Imagine drawing a line from (x1,y1) to (x2,y2)
* In a linear coordinate system, this is always a line, but in a non-linear system, the line might
* have to be represented by a curve instead. Depending on how you want to use the JKQTPPlotObject you
* have to be represented by a curve instead. Depending on how you want to use the JKQTPGeometricPlotElement you
* can choose to still draw it as a line connecting the points (x1,y1) and (x2,y2), or as the -
* mathematically correct - curve connecting these two points:
*
* \image html JKQTPPlotObject_DrawAsMathematicalCurve.png
* \image html JKQTPGeometricPlotElement_DrawAsMathematicalCurve.png
*
* \image html JKQTPPlotObject_DrawAsGraphicElement.png
* \image html JKQTPGeometricPlotElement_DrawAsGraphicElement.png
*
* \see DrawMode, setDrawMode(), getDrawMode()
*/
DrawMode m_drawMode;
DrawMode m_drawMode;
};
/** \brief this is the virtual base class of all JKQTPPlotElement's in a JKQTPlotter plot that
* represent annotations of a plot. It differs from JKQTPGeometricPlotElement by not providing a
* selection of drawModes, as annotations are always drawn as graphic elements.
* \ingroup jkqtplotter_basegraphs
*
*/
class JKQTPLOTTER_LIB_EXPORT JKQTPPlotAnnotationElement: public JKQTPPlotElement {
Q_OBJECT
public:
/** \brief class constructor */
explicit JKQTPPlotAnnotationElement(JKQTBasePlotter* parent=nullptr);
/** \brief default wirtual destructor */
virtual ~JKQTPPlotAnnotationElement() ;
public slots:
protected:
};