2020-08-26 16:36:07 +08:00
/*
Copyright ( c ) 2008 - 2020 Jan W . Krieger ( < jan @ jkrieger . de > )
This software is free software : you can redistribute it and / or modify
it under the terms of the GNU Lesser General Public License ( LGPL ) as published by
the Free Software Foundation , either version 2.1 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU Lesser General Public License ( LGPL ) for more details .
You should have received a copy of the GNU Lesser General Public License ( LGPL )
along with this program . If not , see < http : //www.gnu.org/licenses/>.
*/
# include <QString>
# include <QPainter>
# include <QPair>
# include "jkqtplotter/graphs/jkqtpgeobase.h"
# include "jkqtplotter/jkqtpgraphsbasestylingmixins.h"
# include "jkqtplotter/jkqtptools.h"
# include "jkqtplotter/jkqtplotter_imexport.h"
# include "jkqtmathtext/jkqtmathtext.h"
# ifndef jkqtpgeolines_H_INCLUDED
# define jkqtpgeolines_H_INCLUDED
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief This JKQTPPlotObject 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
*
*
* \ image html plot_geoline . png
*
* \ note This class support JKQTPPlotObject : : 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 .
*
* You can also activate line - end decorators ( aka arrows ) for this poly - line , by using code like this :
* \ code
* line - > setHeadDecoratorStyle ( JKQTPFilledDoubleArrow ) ;
* line - > setTailDecoratorStyle ( JKQTPCircleDecorator ) ;
* \ endcode
*
* This results in arrows drawn at the start ( aka x1 / y1 , = tail ) and end ( aka x2 / y2 , = head ) of the line .
*
*
* \ note The convenience class JKQTPGeoArrow activates line - end decorations ( aka arows ) by default and allows to select them in the constructor .
*
* \ see JKQTPGeoArrow , \ ref JKQTPlotterGeometricGraphs and \ ref JKQTPlotterGeometricArrows
*
2020-08-26 16:36:07 +08:00
*/
class JKQTPLOTTER_LIB_EXPORT JKQTPGeoLine : public JKQTPGeoBaseDecoratedLine {
Q_OBJECT
public :
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief class constructor
*
* \ param parent the parent plotter object
* \ param x1 x - coordinate of first point of line
* \ param y1 y - coordinate of first point of line
* \ param x2 x - coordinate of second point of line
* \ param y2 y - coordinate of second point of line
* \ param color color of line
* \ param lineWidth width of line
* \ param style line style
* \ param parent the parent plotter object
2020-08-26 16:36:07 +08:00
*/
JKQTPGeoLine ( JKQTBasePlotter * parent , double x1 , double y1 , double x2 , double y2 , QColor color , double lineWidth = 1 , Qt : : PenStyle style = Qt : : SolidLine ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief class constructor
*
* \ param parent the parent plotter object
* \ param x1 x - coordinate of first point of line
* \ param y1 y - coordinate of first point of line
* \ param x2 x - coordinate of second point of line
* \ param y2 y - coordinate of second point of line
* \ param color color of line
* \ param lineWidth width of line
* \ param style line style
* \ param parent the parent plotter object
2020-08-26 16:36:07 +08:00
*/
JKQTPGeoLine ( JKQTPlotter * parent , double x1 , double y1 , double x2 , double y2 , QColor color , double lineWidth = 1 , Qt : : PenStyle style = Qt : : SolidLine ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief class constructor
*
* \ param parent the parent plotter object
* \ param x1 x - coordinate of first point of line
* \ param y1 y - coordinate of first point of line
* \ param x2 x - coordinate of second point of line
* \ param y2 y - coordinate of second point of line
*
*/
JKQTPGeoLine ( JKQTBasePlotter * parent , double x1 , double y1 , double x2 , double y2 ) ;
/** \brief class constructor
*
* \ param parent the parent plotter object
* \ param x1 x - coordinate of first point of line
* \ param y1 y - coordinate of first point of line
* \ param x2 x - coordinate of second point of line
* \ param y2 y - coordinate of second point of line
*/
JKQTPGeoLine ( JKQTPlotter * parent , double x1 , double y1 , double x2 , double y2 ) ;
2020-08-26 16:36:07 +08:00
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief class constructor
*
* \ param parent the parent plotter object
* \ param p1 first point of line ( tail )
* \ param p2 second point of line ( head )
* \ param color color of line
* \ param lineWidth width of line
* \ param style line style
* \ param parent the parent plotter object
2020-08-26 16:36:07 +08:00
*/
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
JKQTPGeoLine ( JKQTBasePlotter * parent , const QPointF & p1 , const QPointF & p2 , QColor color , double lineWidth = 1 , Qt : : PenStyle style = Qt : : SolidLine ) ;
/** \brief class constructor
*
* \ param parent the parent plotter object
* \ param p1 first point of line ( tail )
* \ param p2 second point of line ( head )
* \ param color color of line
* \ param lineWidth width of line
* \ param style line style
* \ param parent the parent plotter object
*/
JKQTPGeoLine ( JKQTPlotter * parent , const QPointF & p1 , const QPointF & p2 , QColor color , double lineWidth = 1 , Qt : : PenStyle style = Qt : : SolidLine ) ;
/** \brief class constructor
*
* \ param parent the parent plotter object
* \ param p1 first point of line ( tail )
* \ param p2 second point of line ( head )
*
*/
JKQTPGeoLine ( JKQTBasePlotter * parent , const QPointF & p1 , const QPointF & p2 ) ;
/** \brief class constructor
*
* \ param parent the parent plotter object
* \ param p1 first point of line ( tail )
* \ param p2 second point of line ( head )
*/
JKQTPGeoLine ( JKQTPlotter * parent , const QPointF & p1 , const QPointF & p2 ) ;
2020-08-26 16:36:07 +08:00
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief class constructor
*
* \ param parent the parent plotter object
* \ param line the line
* \ param color color of line
* \ param lineWidth width of line
* \ param style line style
* \ param parent the parent plotter object
2020-08-26 16:36:07 +08:00
*/
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
JKQTPGeoLine ( JKQTBasePlotter * parent , const QLineF & line , QColor color , double lineWidth = 1 , Qt : : PenStyle style = Qt : : SolidLine ) ;
/** \brief class constructor
*
* \ param parent the parent plotter object
* \ param line the line
* \ param color color of line
* \ param lineWidth width of line
* \ param style line style
* \ param parent the parent plotter object
*/
JKQTPGeoLine ( JKQTPlotter * parent , const QLineF & line , QColor color , double lineWidth = 1 , Qt : : PenStyle style = Qt : : SolidLine ) ;
/** \brief class constructor
*
* \ param parent the parent plotter object
* \ param line the line
*
*/
JKQTPGeoLine ( JKQTBasePlotter * parent , const QLineF & line ) ;
/** \brief class constructor
*
* \ param parent the parent plotter object
* \ param line the line
*/
JKQTPGeoLine ( JKQTPlotter * parent , const QLineF & line ) ;
2020-08-26 16:36:07 +08:00
/** \copydoc JKQTPPlotObject::getXMinMax() */
virtual bool getXMinMax ( double & minx , double & maxx , double & smallestGreaterZero ) override ;
/** \copydoc JKQTPPlotObject::getYMinMax() */
virtual bool getYMinMax ( double & miny , double & maxy , double & smallestGreaterZero ) override ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief plots the graph to the plotter object specified as parent
*
* \ note This function support JKQTPPlotObject : : DrawMode : : DrawAsMathematicalCurve . If set ,
* and non - linear axes are chosen , the line will possibly be represented as a curve ,
* instead of a straight line .
*/
2020-08-26 16:36:07 +08:00
virtual void draw ( JKQTPEnhancedPainter & painter ) override ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc x1 */
2020-08-26 16:36:07 +08:00
void setX1 ( double __value ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc x1 */
2020-08-26 16:36:07 +08:00
double getX1 ( ) const ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc y1 */
2020-08-26 16:36:07 +08:00
void setY1 ( double __value ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc y1 */
2020-08-26 16:36:07 +08:00
double getY1 ( ) const ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc x2 */
2020-08-26 16:36:07 +08:00
void setX2 ( double __value ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc x2 */
2020-08-26 16:36:07 +08:00
double getX2 ( ) const ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc y2 */
2020-08-26 16:36:07 +08:00
void setY2 ( double __value ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc y2 */
2020-08-26 16:36:07 +08:00
double getY2 ( ) const ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief return line-start/tail (x1,y1) as QPointF */
QPointF getP1 ( ) const ;
/** \brief set line-start/tail (x1,y1) as QPointF */
void setP1 ( const QPointF & p ) ;
/** \brief return line-end/head (x2,y2) as QPointF */
QPointF getP2 ( ) const ;
/** \brief set line-end/head (x2,y2) as QPointF */
void setP2 ( const QPointF & p ) ;
/** \brief return the line as a QLineF object */
QLineF getLine ( ) const ;
/** \brief define the line as a QLineF object */
void setLine ( const QLineF & line ) ;
2020-08-26 16:36:07 +08:00
protected :
/** \brief x-coordinate of first point of line */
double x1 ;
/** \brief y-coordinate of first point of line */
double y1 ;
/** \brief x-coordinate of second point of line */
double x2 ;
/** \brief y-coordinate of second point of line */
double y2 ;
} ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief This convenience specialisation of JKQTPGeoLine is used to draw a line with decorations (e.g. arrows)
* \ ingroup jkqtplotter_geoplots
*
* This class does not add any functionality on top of JKQTPGeoLine , just activates line - end markers by default !
*
* \ image html JKQTPGeoLine_HeadTail . png
*
* \ image html plot_geoarrows . png
*
* \ see JKQTPLineDecoratorStyle , JKQTPGeoLine , \ ref JKQTPlotterGeometricArrows and \ ref JKQTPlotterGeometricGraphs
*
*/
2020-08-26 16:36:07 +08:00
class JKQTPLOTTER_LIB_EXPORT JKQTPGeoArrow : public JKQTPGeoLine {
Q_OBJECT
public :
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief class constructor
*
* \ param parent the parent plotter object
* \ param x1 x - coordinate of first point of line
* \ param y1 y - coordinate of first point of line
* \ param x2 x - coordinate of second point of line
* \ param y2 y - coordinate of second point of line
* \ param color color of line
* \ param lineWidth width of line
* \ param style line style
* \ param parent the parent plotter object
2020-08-26 16:36:07 +08:00
*/
JKQTPGeoArrow ( JKQTBasePlotter * parent , double x1 , double y1 , double x2 , double y2 , QColor color , JKQTPLineDecoratorStyle headStyle = JKQTPDefaultLineDecorator , JKQTPLineDecoratorStyle tailStyle = JKQTPNoDecorator , double lineWidth = 1.0 , Qt : : PenStyle style = Qt : : SolidLine ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief class constructor
*
* \ param parent the parent plotter object
* \ param x1 x - coordinate of first point of line
* \ param y1 y - coordinate of first point of line
* \ param x2 x - coordinate of second point of line
* \ param y2 y - coordinate of second point of line
* \ param color color of line
* \ param lineWidth width of line
* \ param style line style
* \ param parent the parent plotter object
2020-08-26 16:36:07 +08:00
*/
JKQTPGeoArrow ( JKQTPlotter * parent , double x1 , double y1 , double x2 , double y2 , QColor color , JKQTPLineDecoratorStyle headStyle = JKQTPDefaultLineDecorator , JKQTPLineDecoratorStyle tailStyle = JKQTPNoDecorator , double lineWidth = 1.0 , Qt : : PenStyle style = Qt : : SolidLine ) ;
} ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief This JKQTPPlotObject 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
* until the end of the plotting range .
*
* \ image html plot_geoinfiniteline . png
*
*
* \ note This class support JKQTPPlotObject : : 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 .
*
* 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 .
*
* \ see \ ref JKQTPlotterGeometricGraphs and \ ref JKQTPlotterGeometricArrows
*
2020-08-26 16:36:07 +08:00
*/
class JKQTPLOTTER_LIB_EXPORT JKQTPGeoInfiniteLine : public JKQTPGeoBaseDecoratedHeadLine {
Q_OBJECT
public :
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief class constructor
*
* \ param parent the parent plotter object
* \ param x x - coordinate of start point of line
* \ param y y - coordinate of start point of line
* \ param dx x - direction of the line
* \ param dy y - direction of the line
* \ param color color of line
* \ param lineWidth width of line
* \ param style line style
2020-08-26 16:36:07 +08:00
*/
JKQTPGeoInfiniteLine ( JKQTBasePlotter * parent , double x , double y , double dx , double dy , QColor color = QColor ( " black " ) , double lineWidth = 1 , Qt : : PenStyle style = Qt : : SolidLine ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief class constructor
*
* \ param parent the parent plotter object
* \ param x x - coordinate of start point of line
* \ param y y - coordinate of start point of line
* \ param dx x - direction of the line
* \ param dy y - direction of the line
* \ param color color of line
* \ param lineWidth width of line
* \ param style line style
2020-08-26 16:36:07 +08:00
*/
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() */
virtual bool getXMinMax ( double & minx , double & maxx , double & smallestGreaterZero ) override ;
/** \copydoc JKQTPPlotObject::getYMinMax() */
virtual bool getYMinMax ( double & miny , double & maxy , double & smallestGreaterZero ) override ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief plots the graph to the plotter object specified as parent
*
* \ note This function support JKQTPPlotObject : : DrawMode : : DrawAsMathematicalCurve . If set ,
* and non - linear axes are chosen , the line will possibly be represented as a curve ,
* instead of a straight line .
*/
2020-08-26 16:36:07 +08:00
virtual void draw ( JKQTPEnhancedPainter & painter ) override ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc x */
2020-08-26 16:36:07 +08:00
void setX ( double __value ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc x */
2020-08-26 16:36:07 +08:00
double getX ( ) const ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc y */
2020-08-26 16:36:07 +08:00
void setY ( double __value ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc y */
2020-08-26 16:36:07 +08:00
double getY ( ) const ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc dx */
2020-08-26 16:36:07 +08:00
void setDx ( double __value ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc dx */
2020-08-26 16:36:07 +08:00
double getDx ( ) const ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc dy */
2020-08-26 16:36:07 +08:00
void setDy ( double __value ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc dy */
2020-08-26 16:36:07 +08:00
double getDy ( ) const ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc two_sided */
2020-08-26 16:36:07 +08:00
void setTwoSided ( bool __value ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc two_sided */
2020-08-26 16:36:07 +08:00
bool getTwoSided ( ) const ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief return point (x,y) on the line as QPointF */
QPointF getP ( ) const ;
/** \brief set point (x,y) on the line as QPointF */
void setP ( const QPointF & p ) ;
2020-08-26 16:36:07 +08:00
protected :
/** \brief x-coordinate of a point on the line */
double x ;
/** \brief y-coordinate of a point on the line */
double y ;
/** \brief x-component of the slope of the line */
double dx ;
/** \brief y-component of the slope of the line */
double dy ;
/** \brief indicates whether the line ends at the given point \f$ (x,y) \f$ (false, default),
* or is infinite in both directions ( true ) */
bool two_sided ;
} ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief This JKQTPPlotObject is used to draw a poly line
* \ ingroup jkqtplotter_geoplots
*
* \ image html plot_geolines . png
*
* \ note This class support JKQTPPlotObject : : 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
* 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 :
* \ code
* polyLine - > setHeadDecoratorStyle ( JKQTPFilledDoubleArrow ) ;
* polyLine - > setTailDecoratorStyle ( JKQTPCircleDecorator ) ;
* \ endcode
*
* This results in arrows drawn at the start ( = tail ) and end ( = head ) of the poly - line :
*
* \ image html geo_arrow_polylines . png
*
* \ see \ ref JKQTPlotterGeometricGraphs and \ ref JKQTPlotterGeometricArrows
*
2020-08-26 16:36:07 +08:00
*/
class JKQTPLOTTER_LIB_EXPORT JKQTPGeoPolyLines : public JKQTPGeoBaseDecoratedLine {
Q_OBJECT
public :
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief class constructor
*
* \ param parent the parent plotter object
* \ param points points on the polygon
* \ param color color of line
* \ param lineWidth width of line
* \ param style line style
2020-08-26 16:36:07 +08:00
*/
JKQTPGeoPolyLines ( JKQTBasePlotter * parent , const QVector < QPointF > & points , QColor color = QColor ( " black " ) , double lineWidth = 1 , Qt : : PenStyle style = Qt : : SolidLine ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief class constructor
*
* \ param parent the parent plotter object
* \ param points points on the polygon
* \ param color color of line
* \ param lineWidth width of line
* \ param style line style
2020-08-26 16:36:07 +08:00
*/
JKQTPGeoPolyLines ( JKQTPlotter * parent , const QVector < QPointF > & points , QColor color = QColor ( " black " ) , double lineWidth = 1 , Qt : : PenStyle style = Qt : : SolidLine ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief class constructor
*
* \ param parent the parent plotter object
* \ param color color of line
* \ param lineWidth width of line
* \ param style line style
2020-08-26 16:36:07 +08:00
*/
JKQTPGeoPolyLines ( JKQTBasePlotter * parent , QColor color = QColor ( " black " ) , double lineWidth = 1 , Qt : : PenStyle style = Qt : : SolidLine ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief class constructor
*
* \ param parent the parent plotter object
* \ param color color of line
* \ param lineWidth width of line
* \ param style line style
2020-08-26 16:36:07 +08:00
*/
JKQTPGeoPolyLines ( JKQTPlotter * parent , QColor color = QColor ( " black " ) , double lineWidth = 1 , Qt : : PenStyle style = Qt : : SolidLine ) ;
/** \copydoc JKQTPPlotObject::getXMinMax() */
virtual bool getXMinMax ( double & minx , double & maxx , double & smallestGreaterZero ) override ;
/** \copydoc JKQTPPlotObject::getYMinMax() */
virtual bool getYMinMax ( double & miny , double & maxy , double & smallestGreaterZero ) override ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief plots the graph to the plotter object specified as parent
*
* \ note This function support JKQTPPlotObject : : 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
* lines , independent of the linearity or non - linearity of the coordinate axes .
*/
2020-08-26 16:36:07 +08:00
virtual void draw ( JKQTPEnhancedPainter & painter ) override ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc points */
2020-08-26 16:36:07 +08:00
void setPoints ( const QVector < QPointF > & __value ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc points */
2020-08-26 16:36:07 +08:00
QVector < QPointF > getPoints ( ) const ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief append a point to the polygon \see points */
2020-08-26 16:36:07 +08:00
void appendPoint ( const QPointF & p ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief append a point to the polygon \see points */
2020-08-26 16:36:07 +08:00
void appendPoint ( const double x , const double y ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief returns the number of points \see points */
int getPointCount ( ) const ;
/** \brief returns the i-th of point \see points */
const QPointF & getPoint ( int i ) const ;
/** \brief returns the i-th of point \see points */
QPointF & getPoint ( int i ) ;
/** \brief overwrites the i-th point \see points */
void setPoint ( int i , const QPointF & point ) ;
/** \brief deletes the i-the point \see points */
void removePoint ( int i ) ;
/** \brief returns an iterator to the first point \see points */
QVector < QPointF > : : iterator pointsBegin ( ) ;
/** \brief returns an iterator after the last point \see points */
QVector < QPointF > : : iterator pointsEnd ( ) ;
/** \brief returns a constant iterator to the first point \see points */
QVector < QPointF > : : const_iterator pointsCBegin ( ) const ;
/** \brief returns a constant iterator after the last point \see points */
QVector < QPointF > : : const_iterator pointsCEnd ( ) const ;
2020-08-26 16:36:07 +08:00
protected :
/** \brief list with all points on the poly-line */
QVector < QPointF > points ;
} ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief This JKQTPPlotObject is used to draw an arc
* \ ingroup jkqtplotter_geoplots
*
*
* A pie on linear and log - log axes ( start angle : 10 deg and end - angle 110 deg ) :
*
* \ image html plot_geopie . png
*
* \ note This class support the JKQTPPlotObject : : 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 !
*
* \ see \ ref JKQTPlotterGeometricGraphs , JKQTPGeoChord , JKQTPGeoPie , JKQTPGeoEllipse
2020-08-26 16:36:07 +08:00
*/
class JKQTPLOTTER_LIB_EXPORT JKQTPGeoArc : public JKQTPGeoBaseLine {
Q_OBJECT
public :
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief class constructor
* \ param parent the parent plotter object
* \ param x x - coordinate of center of ellipse
* \ param y y - coordinate of center of ellipse
* \ param width width of ellipse ( 2 * half axis )
* \ param height of ellipse ( 2 * half axis )
* \ param angleStart if we only draw an arc , this is the starting angle in degrees
* \ param angleStop if we only draw an arc , this is the ending angle in degrees
* \ param color color of line
* \ param lineWidth width of line
* \ param style line style
2020-08-26 16:36:07 +08:00
*/
JKQTPGeoArc ( JKQTBasePlotter * 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 ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief class constructor
* \ param parent the parent plotter object
* \ param x x - coordinate of center of ellipse
* \ param y y - coordinate of center of ellipse
* \ param width width of ellipse ( 2 * half axis )
* \ param height of ellipse ( 2 * half axis )
* \ param angleStart if we only draw an arc , this is the starting angle in degrees
* \ param angleStop if we only draw an arc , this is the ending angle in degrees
* \ param color color of line
* \ param lineWidth width of line
* \ param style line style
2020-08-26 16:36:07 +08:00
*/
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() */
virtual bool getXMinMax ( double & minx , double & maxx , double & smallestGreaterZero ) override ;
/** \copydoc JKQTPPlotObject::getYMinMax() */
virtual bool getYMinMax ( double & miny , double & maxy , double & smallestGreaterZero ) override ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief plots the graph to the plotter object specified as parent
*
* \ note This function support the JKQTPPlotObject : : 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 !
*/
2020-08-26 16:36:07 +08:00
virtual void draw ( JKQTPEnhancedPainter & painter ) override ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc angleStart */
2020-08-26 16:36:07 +08:00
void setAngleStart ( double __value ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc angleStart */
2020-08-26 16:36:07 +08:00
double getAngleStart ( ) const ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc angleStop */
2020-08-26 16:36:07 +08:00
void setAngleStop ( double __value ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc angleStop */
2020-08-26 16:36:07 +08:00
double getAngleStop ( ) const ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc x */
2020-08-26 16:36:07 +08:00
void setX ( double __value ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc x */
2020-08-26 16:36:07 +08:00
double getX ( ) const ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc y */
2020-08-26 16:36:07 +08:00
void setY ( double __value ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc y */
2020-08-26 16:36:07 +08:00
double getY ( ) const ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief returns the center point of the arc */
QPointF getCenter ( ) const ;
/** \brief sets the center point of the arc */
void setCenter ( const QPointF & center ) ;
/** \copydoc width */
2020-08-26 16:36:07 +08:00
void setWidth ( double __value ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc width */
2020-08-26 16:36:07 +08:00
double getWidth ( ) const ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc height */
2020-08-26 16:36:07 +08:00
void setHeight ( double __value ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc height */
2020-08-26 16:36:07 +08:00
double getHeight ( ) const ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \brief returns the size (width and height) of the arc */
QSizeF getSize ( ) const ;
/** \brief sets the size (width and height) of the arc */
void setSize ( const QSizeF & size ) ;
/** \copydoc angle */
2020-08-26 16:36:07 +08:00
void setAngle ( double __value ) ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
/** \copydoc angle */
2020-08-26 16:36:07 +08:00
double getAngle ( ) const ;
protected :
/** \brief x-coordinate of a center of the rectangle */
double x ;
/** \brief y-coordinate of a center of the rectangle */
double y ;
/** \brief width of a center of the rectangle */
double width ;
/** \brief height of a center of the rectangle */
double height ;
/** \brief rotation angle of rectangle [degrees] around (x,y) */
double angle ;
/** \brief if we only draw an arc, this is the starting angle in degrees */
double angleStart ;
/** \brief if we only draw an arc, this is the ending angle in degrees */
double angleStop ;
- improved: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
2020-09-04 05:08:52 +08:00
2020-08-26 16:36:07 +08:00
/** \brief closing mode for arcs: secand or pie */
/** \brief returns the transformation matrix used for this rectangle */
QTransform getTransform ( ) ;
/** \brief returns a QPolygonF which represents the rectangle after rotation, but still in the world coordinate system, not in the screen/widget system */
QPolygonF getPolygon ( ) ;
} ;
# endif // jkqtpgeolines_H_INCLUDED