1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the Qt Charts module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:GPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU
19** General Public License version 3 or (at your option) any later version
20** approved by the KDE Free Qt Foundation. The licenses are as published by
21** the Free Software Foundation and appearing in the file LICENSE.GPL3
22** included in the packaging of this file. Please review the following
23** information to ensure the GNU General Public License requirements will
24** be met: https://www.gnu.org/licenses/gpl-3.0.html.
25**
26** $QT_END_LICENSE$
27**
28****************************************************************************/
29
30#include <private/polardomain_p.h>
31#include <private/qabstractaxis_p.h>
32#include <QtCore/QtMath>
33
34QT_CHARTS_BEGIN_NAMESPACE
35
36PolarDomain::PolarDomain(QObject *parent)
37 : AbstractDomain(parent)
38{
39}
40
41PolarDomain::~PolarDomain()
42{
43}
44
45void PolarDomain::setSize(const QSizeF &size)
46{
47 Q_ASSERT(size.width() == size.height());
48 m_radius = size.height() / 2.0;
49 m_center = QPointF(m_radius, m_radius);
50 AbstractDomain::setSize(size);
51}
52
53QPointF PolarDomain::calculateGeometryPoint(const QPointF &point, bool &ok) const
54{
55 qreal r = 0.0;
56 qreal a = toAngularCoordinate(value: point.x(), ok);
57 if (ok)
58 r = toRadialCoordinate(value: point.y(), ok);
59 if (ok) {
60 return m_center + polarCoordinateToPoint(angularCoordinate: a, radialCoordinate: r);
61 } else {
62 qWarning() << "Logarithm of negative value is undefined. Empty layout returned.";
63 return QPointF();
64 }
65}
66
67QVector<QPointF> PolarDomain::calculateGeometryPoints(const QVector<QPointF> &vector) const
68{
69 QVector<QPointF> result;
70 result.resize(size: vector.count());
71 bool ok;
72 qreal r = 0.0;
73 qreal a = 0.0;
74
75 for (int i = 0; i < vector.count(); ++i) {
76 a = toAngularCoordinate(value: vector[i].x(), ok);
77 if (ok)
78 r = toRadialCoordinate(value: vector[i].y(), ok);
79 if (ok) {
80 result[i] = m_center + polarCoordinateToPoint(angularCoordinate: a, radialCoordinate: r);
81 } else {
82 qWarning() << "Logarithm of negative value is undefined. Empty layout returned.";
83 return QVector<QPointF>();
84 }
85 }
86
87 return result;
88}
89
90QPointF PolarDomain::polarCoordinateToPoint(qreal angularCoordinate, qreal radialCoordinate) const
91{
92 qreal dx = qSin(v: qDegreesToRadians(degrees: angularCoordinate)) * radialCoordinate;
93 qreal dy = qCos(v: qDegreesToRadians(degrees: angularCoordinate)) * radialCoordinate;
94
95 return QPointF(dx, -dy);
96}
97
98QT_CHARTS_END_NAMESPACE
99
100#include "moc_polardomain_p.cpp"
101

source code of qtcharts/src/charts/domain/polardomain.cpp