| 1 | // Copyright (C) 2017 The Qt Company Ltd. |
| 2 | // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only |
| 3 | |
| 4 | #include <QtCharts/QPolarChart> |
| 5 | #include <QtCharts/QAbstractAxis> |
| 6 | |
| 7 | QT_BEGIN_NAMESPACE |
| 8 | |
| 9 | /*! |
| 10 | \enum QPolarChart::PolarOrientation |
| 11 | |
| 12 | This enum type specifies the polar orientation of an axis. |
| 13 | |
| 14 | \value PolarOrientationRadial |
| 15 | A radial axis, where the values are placed along the radius of the |
| 16 | chart, starting at the pole. |
| 17 | \value PolarOrientationAngular |
| 18 | An angular axis, where the values are placed around the chart. |
| 19 | */ |
| 20 | |
| 21 | /*! |
| 22 | \class QPolarChart |
| 23 | \inmodule QtCharts |
| 24 | \brief The QPolarChart presents data in polar charts. |
| 25 | |
| 26 | Polar charts present data in a circular graph, where the placement of data |
| 27 | is based on the angle and distance from the center of the graph, the \e pole. |
| 28 | |
| 29 | \image examples_polarchart.png |
| 30 | |
| 31 | A polar chart is a specialization of QChart that supports line, spline, area, |
| 32 | and scatter series, and all axis types supported by them. Each axis can be used |
| 33 | either as a radial or an angular axis. |
| 34 | |
| 35 | The first and last tick mark on an angular QValueAxis are co-located at a 0/360 degree angle. |
| 36 | |
| 37 | If the angular distance between two consecutive points in a series is more than 180 degrees, |
| 38 | any direct line connecting the two points becomes meaningless, and will not be drawn. Instead, |
| 39 | a line will be drawn to and from the center of the chart. Therefore, the axis ranges must be |
| 40 | chosen accordingly when displaying line, spline, or area series. |
| 41 | |
| 42 | Polar charts draw all axes of the same orientation in the same position, so using multiple |
| 43 | axes of the same orientation can be confusing, unless the extra axes are only used to customize the |
| 44 | grid. For example, you can display a highlighted range with a secondary shaded QCategoryAxis |
| 45 | or provide unlabeled subticks with a secondary QValueAxis thas has hidden labels. |
| 46 | |
| 47 | \sa QChart |
| 48 | */ |
| 49 | |
| 50 | /*! |
| 51 | Constructs a polar chart as a child of \a parent. |
| 52 | The properties specified by \a wFlags are passed to the QChart constructor. |
| 53 | */ |
| 54 | QPolarChart::QPolarChart(QGraphicsItem *parent, Qt::WindowFlags wFlags) |
| 55 | : QChart(QChart::ChartTypePolar, parent, wFlags) |
| 56 | { |
| 57 | } |
| 58 | |
| 59 | /*! |
| 60 | Deletes the polar chart object and its children, such as the series and axis objects added to it. |
| 61 | */ |
| 62 | QPolarChart::~QPolarChart() |
| 63 | { |
| 64 | } |
| 65 | |
| 66 | /*! |
| 67 | Returns the axes added for the series \a series with the polar orientation |
| 68 | \a polarOrientation. If no series is provided, any axis with the |
| 69 | specified polar orientation is returned. |
| 70 | |
| 71 | \sa addAxis() |
| 72 | */ |
| 73 | QList<QAbstractAxis *> QPolarChart::axes(PolarOrientations polarOrientation, QAbstractSeries *series) const |
| 74 | { |
| 75 | Qt::Orientations orientation; |
| 76 | if (polarOrientation.testFlag(flag: PolarOrientationAngular)) |
| 77 | orientation |= Qt::Horizontal; |
| 78 | if (polarOrientation.testFlag(flag: PolarOrientationRadial)) |
| 79 | orientation |= Qt::Vertical; |
| 80 | |
| 81 | return QChart::axes(orientation, series); |
| 82 | } |
| 83 | |
| 84 | /*! |
| 85 | This convenience method adds the axis \a axis to the polar chart with the polar |
| 86 | orientation \a polarOrientation. |
| 87 | The chart takes the ownership of the axis. |
| 88 | |
| 89 | \note Axes can be added to a polar chart also with QChart::addAxis(). |
| 90 | The specified alignment determines the polar orientation: horizontal alignments indicate |
| 91 | an angular axis and vertical alignments indicate a radial axis. |
| 92 | |
| 93 | \sa QChart::removeAxis(), QChart::createDefaultAxes(), QAbstractSeries::attachAxis(), QChart::addAxis() |
| 94 | */ |
| 95 | void QPolarChart::addAxis(QAbstractAxis *axis, PolarOrientation polarOrientation) |
| 96 | { |
| 97 | if (!axis || axis->type() == QAbstractAxis::AxisTypeBarCategory) { |
| 98 | qWarning(msg: "QAbstractAxis::AxisTypeBarCategory is not a supported axis type for polar charts." ); |
| 99 | } else { |
| 100 | Qt::Alignment alignment = Qt::AlignLeft; |
| 101 | if (polarOrientation == PolarOrientationAngular) |
| 102 | alignment = Qt::AlignBottom; |
| 103 | QChart::addAxis(axis, alignment); |
| 104 | } |
| 105 | } |
| 106 | |
| 107 | /*! |
| 108 | The angular axes of a polar chart report horizontal orientation and the radial axes report |
| 109 | vertical orientation. |
| 110 | This function is a convenience function for converting the orientation of the axis \a axis to |
| 111 | the corresponding polar orientation. If the \a axis is null or not added to a polar chart, |
| 112 | the return value is meaningless. |
| 113 | */ |
| 114 | QPolarChart::PolarOrientation QPolarChart::axisPolarOrientation(QAbstractAxis *axis) |
| 115 | { |
| 116 | if (axis && axis->orientation() == Qt::Horizontal) |
| 117 | return PolarOrientationAngular; |
| 118 | else |
| 119 | return PolarOrientationRadial; |
| 120 | } |
| 121 | |
| 122 | QT_END_NAMESPACE |
| 123 | |
| 124 | #include "moc_qpolarchart.cpp" |
| 125 | |