/****************************************************************************** * Qwt Widget Library * Copyright (C) 1997 Josef Wilgen * Copyright (C) 2002 Uwe Rathmann * * This library is free software; you can redistribute it and/or * modify it under the terms of the Qwt License, Version 1.0 *****************************************************************************/ #ifndef QWT_PLOT_VECTOR_FIELD_H #define QWT_PLOT_VECTOR_FIELD_H #include "qwt_global.h" #include "qwt_plot_seriesitem.h" class QwtVectorFieldSymbol; class QwtColorMap; class QPen; class QBrush; /*! \brief A plot item, that represents a vector field A vector field is a representation of a points with a given magnitude and direction as arrows. While the direction affects the direction of the arrow, the magnitude might be represented as a color or by the length of the arrow. \sa QwtVectorFieldSymbol, QwtVectorFieldSample */ class QWT_EXPORT QwtPlotVectorField : public QwtPlotSeriesItem , public QwtSeriesStore< QwtVectorFieldSample > { public: /*! Depending on the origin the indicator symbol ( usually an arrow ) will be to the position of the corresponding sample. */ enum IndicatorOrigin { //! symbol points to the sample position OriginHead, //! The arrow starts at the sample position OriginTail, //! The arrow is centered at the sample position OriginCenter }; /*! Attributes to modify the rendering \sa setPaintAttribute(), testPaintAttribute() */ enum PaintAttribute { /* FilterVectors calculates an average sample from all samples that lie in the same cell of a grid that is determined by setting the rasterSize(). \sa setRasterSize() */ FilterVectors = 0x01 }; Q_DECLARE_FLAGS( PaintAttributes, PaintAttribute ) /*! Depending on the MagnitudeMode the magnitude component will have an impact on the attributes of the symbol/arrow. \sa setMagnitudeMode() */ enum MagnitudeMode { /*! The magnitude will be mapped to a color using a color map \sa magnitudeRange(), colorMap() */ MagnitudeAsColor = 0x01, /*! The magnitude will have an impact on the length of the arrow/symbol \sa arrowLength(), magnitudeScaleFactor() */ MagnitudeAsLength = 0x02 }; Q_DECLARE_FLAGS( MagnitudeModes, MagnitudeMode ) explicit QwtPlotVectorField( const QString& title = QString() ); explicit QwtPlotVectorField( const QwtText& title ); virtual ~QwtPlotVectorField(); void setPaintAttribute( PaintAttribute, bool on = true ); bool testPaintAttribute( PaintAttribute ) const; void setMagnitudeMode( MagnitudeMode, bool on = true ); bool testMagnitudeMode( MagnitudeMode ) const; void setSymbol( QwtVectorFieldSymbol* ); const QwtVectorFieldSymbol* symbol() const; void setPen( const QPen& ); QPen pen() const; void setBrush( const QBrush& ); QBrush brush() const; void setRasterSize( const QSizeF& ); QSizeF rasterSize() const; void setIndicatorOrigin( IndicatorOrigin ); IndicatorOrigin indicatorOrigin() const; void setSamples( const QVector< QwtVectorFieldSample >& ); void setSamples( QwtVectorFieldData* ); void setColorMap( QwtColorMap* ); const QwtColorMap* colorMap() const; void setMagnitudeRange( const QwtInterval& ); QwtInterval magnitudeRange() const; void setMinArrowLength( double ); double minArrowLength() const; void setMaxArrowLength( double ); double maxArrowLength() const; virtual double arrowLength( double magnitude ) const; virtual QRectF boundingRect() const QWT_OVERRIDE; virtual void drawSeries( QPainter*, const QwtScaleMap& xMap, const QwtScaleMap& yMap, const QRectF& canvasRect, int from, int to ) const QWT_OVERRIDE; virtual int rtti() const QWT_OVERRIDE; virtual QwtGraphic legendIcon( int index, const QSizeF& ) const QWT_OVERRIDE; void setMagnitudeScaleFactor( double factor ); double magnitudeScaleFactor() const; protected: virtual void drawSymbols( QPainter*, const QwtScaleMap& xMap, const QwtScaleMap& yMap, const QRectF& canvasRect, int from, int to ) const; virtual void drawSymbol( QPainter*, double x, double y, double vx, double vy ) const; virtual void dataChanged() QWT_OVERRIDE; private: void init(); class PrivateData; PrivateData* m_data; }; Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotVectorField::PaintAttributes ) Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPlotVectorField::MagnitudeModes ) #endif