You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
188 lines
5.5 KiB
C
188 lines
5.5 KiB
C
3 weeks ago
|
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
|
||
|
* QwtPolar Widget Library
|
||
|
* Copyright (C) 2008 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_POLAR_GRID_H
|
||
|
#define QWT_POLAR_GRID_H
|
||
|
|
||
|
#include "qwt_polar_global.h"
|
||
|
#include "qwt_polar.h"
|
||
|
#include "qwt_polar_item.h"
|
||
|
#include "qwt_polar_plot.h"
|
||
|
|
||
|
class QPainter;
|
||
|
class QPen;
|
||
|
class QwtScaleMap;
|
||
|
class QwtScaleDiv;
|
||
|
class QwtRoundScaleDraw;
|
||
|
class QwtScaleDraw;
|
||
|
|
||
|
/*!
|
||
|
\brief An item which draws scales and grid lines on a polar plot.
|
||
|
|
||
|
The QwtPolarGrid class can be used to draw a coordinate grid.
|
||
|
A coordinate grid consists of major and minor gridlines.
|
||
|
The locations of the gridlines are determined by the azimuth and radial
|
||
|
scale divisions.
|
||
|
|
||
|
QwtPolarGrid is also responsible for drawing the axis representing the
|
||
|
scales. It is possible to display 4 radial and one azimuth axis.
|
||
|
|
||
|
Whenever the scale divisions of the plot widget changes the grid
|
||
|
is synchronized by updateScaleDiv().
|
||
|
|
||
|
\sa QwtPolarPlot, QwtPolar::Axis
|
||
|
*/
|
||
|
|
||
|
class QWT_POLAR_EXPORT QwtPolarGrid: public QwtPolarItem
|
||
|
{
|
||
|
public:
|
||
|
/*!
|
||
|
Mysterious flags trying to avoid conflicts, when painting the
|
||
|
scales and grid lines.
|
||
|
|
||
|
The default setting enables all flags.
|
||
|
|
||
|
\sa setDisplayFlag(), testDisplayFlag()
|
||
|
*/
|
||
|
enum DisplayFlag
|
||
|
{
|
||
|
/*!
|
||
|
Try to avoid situations, where the label of the origin is
|
||
|
painted over another axis.
|
||
|
*/
|
||
|
SmartOriginLabel = 1,
|
||
|
|
||
|
/*!
|
||
|
Often the outermost tick of the radial scale is close to the
|
||
|
canvas border. With HideMaxRadiusLabel enabled it is not painted.
|
||
|
*/
|
||
|
HideMaxRadiusLabel = 2,
|
||
|
|
||
|
/*!
|
||
|
The tick labels of the radial scales might be hard to read, when
|
||
|
they are painted on top of the radial grid lines ( or on top
|
||
|
of a curve/spectrogram ). When ClipAxisBackground the bounding rect
|
||
|
of each label is added to the clip region.
|
||
|
*/
|
||
|
ClipAxisBackground = 4,
|
||
|
|
||
|
/*!
|
||
|
Don't paint the backbone of the radial axes, when they are very close
|
||
|
to a line of the azimuth grid.
|
||
|
*/
|
||
|
SmartScaleDraw = 8,
|
||
|
|
||
|
/*!
|
||
|
All grid lines are clipped against the plot area before being painted.
|
||
|
When the plot is zoomed in this will have an significant impact
|
||
|
on the performance of the painting code.
|
||
|
*/
|
||
|
ClipGridLines = 16
|
||
|
};
|
||
|
|
||
|
//! Display flags
|
||
|
typedef QFlags<DisplayFlag> DisplayFlags;
|
||
|
|
||
|
/*!
|
||
|
\brief Grid attributes
|
||
|
\sa setGridAttributes(), testGridAttributes()
|
||
|
*/
|
||
|
enum GridAttribute
|
||
|
{
|
||
|
/*!
|
||
|
When AutoScaling is enabled, the radial axes will be adjusted
|
||
|
to the interval, that is currently visible on the canvas plot.
|
||
|
*/
|
||
|
AutoScaling = 0x01
|
||
|
};
|
||
|
|
||
|
//! Grid attributes
|
||
|
typedef QFlags<GridAttribute> GridAttributes;
|
||
|
|
||
|
explicit QwtPolarGrid();
|
||
|
virtual ~QwtPolarGrid();
|
||
|
|
||
|
virtual int rtti() const;
|
||
|
|
||
|
void setDisplayFlag( DisplayFlag, bool on = true );
|
||
|
bool testDisplayFlag( DisplayFlag ) const;
|
||
|
|
||
|
void setGridAttribute( GridAttribute, bool on = true );
|
||
|
bool testGridAttribute( GridAttribute ) const;
|
||
|
|
||
|
void showGrid( int scaleId, bool show = true );
|
||
|
bool isGridVisible( int scaleId ) const;
|
||
|
|
||
|
void showMinorGrid( int scaleId, bool show = true );
|
||
|
bool isMinorGridVisible( int scaleId ) const;
|
||
|
|
||
|
void showAxis( int axisId, bool show = true );
|
||
|
bool isAxisVisible( int axisId ) const;
|
||
|
|
||
|
void setPen( const QPen &p );
|
||
|
void setFont( const QFont & );
|
||
|
|
||
|
void setMajorGridPen( const QPen &p );
|
||
|
void setMajorGridPen( int scaleId, const QPen &p );
|
||
|
QPen majorGridPen( int scaleId ) const;
|
||
|
|
||
|
void setMinorGridPen( const QPen &p );
|
||
|
void setMinorGridPen( int scaleId, const QPen &p );
|
||
|
QPen minorGridPen( int scaleId ) const;
|
||
|
|
||
|
void setAxisPen( int axisId, const QPen &p );
|
||
|
QPen axisPen( int axisId ) const;
|
||
|
|
||
|
void setAxisFont( int axisId, const QFont &p );
|
||
|
QFont axisFont( int axisId ) const;
|
||
|
|
||
|
void setScaleDraw( int axisId, QwtScaleDraw * );
|
||
|
const QwtScaleDraw *scaleDraw( int axisId ) const;
|
||
|
QwtScaleDraw *scaleDraw( int axisId );
|
||
|
|
||
|
void setAzimuthScaleDraw( QwtRoundScaleDraw * );
|
||
|
const QwtRoundScaleDraw *azimuthScaleDraw() const;
|
||
|
QwtRoundScaleDraw *azimuthScaleDraw();
|
||
|
|
||
|
virtual void draw( QPainter *p,
|
||
|
const QwtScaleMap &azimuthMap, const QwtScaleMap &radialMap,
|
||
|
const QPointF &pole, double radius,
|
||
|
const QRectF &rect ) const;
|
||
|
|
||
|
virtual void updateScaleDiv( const QwtScaleDiv &azimuthMap,
|
||
|
const QwtScaleDiv &radialMap, const QwtInterval & );
|
||
|
|
||
|
virtual int marginHint() const;
|
||
|
|
||
|
protected:
|
||
|
void drawRays( QPainter *, const QRectF &,
|
||
|
const QPointF &pole, double radius,
|
||
|
const QwtScaleMap &azimuthMap, const QList<double> & ) const;
|
||
|
void drawCircles( QPainter *, const QRectF &,
|
||
|
const QPointF &pole, const QwtScaleMap &radialMap,
|
||
|
const QList<double> & ) const;
|
||
|
|
||
|
void drawAxis( QPainter *, int axisId ) const;
|
||
|
|
||
|
private:
|
||
|
void updateScaleDraws(
|
||
|
const QwtScaleMap &azimuthMap, const QwtScaleMap &radialMap,
|
||
|
const QPointF &pole, const double radius ) const;
|
||
|
|
||
|
private:
|
||
|
class GridData;
|
||
|
class AxisData;
|
||
|
class PrivateData;
|
||
|
PrivateData *d_data;
|
||
|
};
|
||
|
|
||
|
Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPolarGrid::DisplayFlags )
|
||
|
Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPolarGrid::GridAttributes )
|
||
|
|
||
|
#endif
|