23 static inline bool isClose(
double value1,
double value2 )
25 return qAbs( value1 - value2 ) < DBL_EPSILON;
55 , isMinorVisible(
false )
100 axis.isVisible =
true;
109 axis.isVisible =
false;
118 axis.isVisible =
true;
127 axis.isVisible =
false;
136 axis.isVisible =
true;
241 if ( axisData.pen != pen )
260 if ( grid.isVisible != show )
262 grid.isVisible =
show;
296 if ( grid.isMinorVisible != show )
298 grid.isMinorVisible =
show;
330 if ( axisData.isVisible != show )
332 axisData.isVisible =
show;
359 bool isChanged =
false;
364 if ( grid.majorPen != pen || grid.minorPen != pen )
374 if ( axis.pen != pen )
392 bool isChanged =
false;
396 if ( axis.font != font )
414 bool isChanged =
false;
419 if ( grid.majorPen != pen )
442 if ( grid.majorPen != pen )
460 return grid.majorPen;
471 bool isChanged =
false;
476 if ( grid.minorPen != pen )
499 if ( grid.minorPen != pen )
516 return grid.minorPen;
545 if ( axisData.font != font )
547 axisData.font = font;
576 const QPointF& pole,
double radius,
577 const QRectF& canvasRect )
const 585 QRegion clipRegion( canvasRect.toRect() );
596 for (
int i = 0; i < int( ticks.size() ); i++ )
604 const int margin = 2;
605 labelRect.adjust( -margin, -margin, margin, margin );
607 if ( labelRect.isValid() )
608 clipRegion -= QRegion( labelRect );
613 painter->setClipRegion( clipRegion );
619 if ( radialGrid.isVisible && radialGrid.isMinorVisible )
621 painter->setPen( radialGrid.minorPen );
628 if ( radialGrid.isVisible )
630 painter->setPen( radialGrid.majorPen );
638 const GridData& azimuthGrid =
641 if ( azimuthGrid.isVisible && azimuthGrid.isMinorVisible )
643 painter->setPen( azimuthGrid.minorPen );
645 drawRays( painter, canvasRect, pole, radius, azimuthMap,
647 drawRays( painter, canvasRect, pole, radius, azimuthMap,
650 if ( azimuthGrid.isVisible )
652 painter->setPen( azimuthGrid.majorPen );
654 drawRays( painter, canvasRect, pole, radius, azimuthMap,
662 if ( axis.isVisible )
682 QPainter* painter,
const QRectF& canvasRect,
683 const QPointF& pole,
double radius,
686 for (
int i = 0; i < int( values.size() ); i++ )
688 double azimuth = azimuthMap.
transform( values[i] );
689 azimuth = ::fmod( azimuth, 2 *
M_PI );
691 bool skipLine =
false;
699 if ( axis.isVisible && axis.scaleDraw->hasComponent( bone ) )
705 if ( axis.isVisible && axis.scaleDraw->hasComponent( bone ) )
711 if ( axis.isVisible && axis.scaleDraw->hasComponent( bone ) )
717 if ( axis.isVisible && axis.scaleDraw->hasComponent( bone ) )
723 const QPointF pos =
qwtPolar2Pos( pole, radius, azimuth );
730 QPolygonF polygon( 2 );
731 polygon[0] = pole.toPoint();
732 polygon[1] = pos.toPoint();
752 QPainter* painter,
const QRectF& canvasRect,
756 for (
int i = 0; i < int( values.size() ); i++ )
758 const double val = values[i];
760 const GridData& gridData =
763 bool skipLine =
false;
767 if ( axis.isVisible &&
770 if (
isClose( val, gridData.scaleDiv.upperBound() ) )
775 if (
isClose( val, gridData.scaleDiv.lowerBound() ) )
780 const double radius = radialMap.
transform( val );
782 QRectF outerRect( 0, 0, 2 * radius, 2 * radius );
783 outerRect.moveCenter( pole );
796 for (
int j = 0; j < angles.size(); j++ )
809 double span = to - from;
813 painter->drawArc( outerRect,
814 qRound( from * 16 ), qRound( span * 16 ) );
839 painter->setPen( axis.pen );
840 painter->setFont( axis.font );
843 pal.setColor( QPalette::WindowText, axis.pen.color() );
844 pal.setColor( QPalette::Text, axis.pen.color() );
846 axis.scaleDraw->draw( painter, pal );
861 const QPointF& pole,
double radius )
const 863 const QPoint p = pole.toPoint();
870 const int l = max - min;
881 scaleDraw->
setRadius( qRound( radius ) );
884 double from = ::fmod( 90.0 -
qwtDegrees( azimuthMap.
p1() ), 360.0 );
905 scaleDraw->
move( p.x() - min, p.y() );
911 scaleDraw->
move( p.x() + min, p.y() );
917 scaleDraw->
move( p.x(), p.y() - max );
923 scaleDraw->
move( p.x(), p.y() + max );
968 if ( radialGrid.scaleDiv != radialScaleDiv )
969 radialGrid.scaleDiv = radialScaleDiv;
973 if ( azimuthGrid.scaleDiv != azimuthScaleDiv )
975 azimuthGrid.scaleDiv = azimuthScaleDiv;
978 bool hasOrigin =
false;
982 if ( axis.isVisible && axis.scaleDraw )
986 axis.scaleDraw->setScaleDiv( azimuthGrid.scaleDiv );
989 axis.scaleDraw->enableComponent(
1001 bool skipOrigin = hasOrigin;
1016 if ( ticks.size() > 0 && ticks.first() == sd.
lowerBound() )
1019 ticks.removeFirst();
1027 if ( ticks.size() > 0 && ticks.last() == sd.
upperBound() )
1032 axis.scaleDraw->setScaleDiv( sd );
1036 axis.scaleDraw->enableComponent(
1052 if ( axis.isVisible )
1054 const int extent = axis.scaleDraw->extent( axis.font );
1105 if ( axisData.scaleDraw != scaleDraw )
1107 delete axisData.scaleDraw;
1142 if ( axisData.scaleDraw != scaleDraw )
1144 delete axisData.scaleDraw;
A abstract base class for drawing scales.
int scaleMaxMinor(int scaleId) const
double lowerBound() const
QwtPolarGrid::GridAttributes attributes
void showAxis(int axisId, bool show=true)
A plotting widget, displaying a polar coordinate system.
AxisData axisData[QwtPolar::AxesCount]
virtual int marginHint() const QWT_OVERRIDE
void setAlignment(Alignment)
void setLength(double length)
void setAzimuthScaleDraw(QwtRoundScaleDraw *)
Set a scale draw for the azimuth scale.
QList< double > ticks(int tickType) const
void setPen(const QPen &p)
QFont axisFont(int axisId) const
QRect boundingLabelRect(const QFont &, double value) const
Find the bounding rectangle for the label.
A class representing an interval.
void showGrid(int scaleId, bool show=true)
QPoint qwtPolar2Pos(const QPoint &pole, double radius, double angle)
virtual int rtti() const QWT_OVERRIDE
const QwtScaleDraw * scaleDraw(int axisId) const
bool contains(double value) const
void setTicks(int tickType, const QList< double > &)
double qwtDegrees(double degrees)
Translate radians into degrees.
QPen majorGridPen(int scaleId) const
bool testDisplayFlag(DisplayFlag) const
virtual void draw(QPainter *p, const QwtScaleMap &azimuthMap, const QwtScaleMap &radialMap, const QPointF &pole, double radius, const QRectF &rect) const QWT_OVERRIDE
void setMajorGridPen(const QPen &p)
A class representing a scale division.
QPen minorGridPen(int scaleId) const
double transform(double s) const
QwtPolarPlot * plot() const
void setAxisPen(int axisId, const QPen &p)
void updateScaleDraws(const QwtScaleMap &azimuthMap, const QwtScaleMap &radialMap, const QPointF &pole, const double radius) const
const QwtTransform * transformation() const
Get the transformation.
QwtScaleEngine * scaleEngine(int scaleId)
void moveCenter(double x, double y)
Move the center of the scale draw, leaving the radius unchanged.
Base class for items on a polar plot.
void setFont(const QFont &)
QwtPolarGrid::DisplayFlags displayFlags
GridData gridData[QwtPolar::ScaleCount]
void setGridAttribute(GridAttribute, bool on=true)
Specify an attribute for the grid.
void drawAxis(QPainter *, int axisId) const
bool hasComponent(ScaleComponent) const
const QwtScaleDiv & scaleDiv() const
bool isGridVisible(int scaleId) const
void drawCircles(QPainter *, const QRectF &, const QPointF &pole, const QwtScaleMap &radialMap, const QList< double > &) const
void setAxisFont(int axisId, const QFont &p)
void setZ(double z)
Set the z value.
bool testGridAttribute(GridAttribute) const
void setDisplayFlag(DisplayFlag, bool on=true)
A class representing a text.
const QwtRoundScaleDraw * azimuthScaleDraw() const
QwtPolarGrid()
Constructor.
Backbone = the line where the ticks are located.
static void drawEllipse(QPainter *, const QRectF &)
Wrapper for QPainter::drawEllipse()
void setAngleRange(double angle1, double angle2)
Adjust the baseline circle segment for round scales.
static bool isClose(double value1, double value2)
Number of available axis.
void showMinorGrid(int scaleId, bool show=true)
A class for drawing round scales.
void show()
Show the item.
static void drawPolyline(QPainter *, const QPolygonF &)
Wrapper for QPainter::drawPolyline()
void drawRays(QPainter *, const QRectF &, const QPointF &pole, double radius, const QwtScaleMap &azimuthMap, const QList< double > &) const
bool isMinorGridVisible(int scaleId) const
int scaleMaxMajor(int scaleId) const
QWT_EXPORT void clipPolygonF(const QRectF &, QPolygonF &, bool closePolygon=false)
virtual void updateScaleDiv(const QwtScaleDiv &azimuthMap, const QwtScaleDiv &radialMap, const QwtInterval &) QWT_OVERRIDE
Update the item to changes of the axes scale division.
void setTransformation(QwtTransform *)
virtual ~QwtPolarGrid()
Destructor.
A class for drawing scales.
GridAttribute
Grid attributes.
void setRadius(double radius)
double upperBound() const
virtual QwtScaleDiv divideScale(double x1, double x2, int maxMajorSteps, int maxMinorSteps, double stepSize=0.0) const =0
Calculate a scale division.
void setScaleDraw(int axisId, QwtScaleDraw *)
Set a scale draw.
virtual void itemChanged()
QWT_EXPORT QVector< QwtInterval > clipCircle(const QRectF &, const QPointF &, double radius)
void setMinorGridPen(const QPen &p)
bool isAxisVisible(int axisId) const
QPen axisPen(int axisId) const
Base class for scale engines.
void move(double x, double y)
void setRenderHint(RenderHint, bool on=true)