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 Data Visualization 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 #ifndef QABSTRACT3DSERIES_H
31 #define QABSTRACT3DSERIES_H
32 
33 #include <QtDataVisualization/q3dtheme.h>
34 #include <QtCore/QObject>
35 #include <QtCore/QScopedPointer>
36 #include <QtCore/QString>
37 #include <QtGui/QLinearGradient>
38 #include <QtGui/QQuaternion>
39 
40 QT_BEGIN_NAMESPACE_DATAVISUALIZATION
41 
42 class QAbstract3DSeriesPrivate;
43 
44 class QT_DATAVISUALIZATION_EXPORT QAbstract3DSeries : public QObject
45 {
46     Q_OBJECT
47     Q_ENUMS(SeriesType)
48     Q_ENUMS(Mesh)
49     Q_PROPERTY(SeriesType type READ type CONSTANT)
50     Q_PROPERTY(QString itemLabelFormat READ itemLabelFormat WRITE setItemLabelFormat NOTIFY itemLabelFormatChanged)
51     Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibilityChanged)
52     Q_PROPERTY(Mesh mesh READ mesh WRITE setMesh NOTIFY meshChanged)
53     Q_PROPERTY(bool meshSmooth READ isMeshSmooth WRITE setMeshSmooth NOTIFY meshSmoothChanged)
54     Q_PROPERTY(QQuaternion meshRotation READ meshRotation WRITE setMeshRotation NOTIFY meshRotationChanged)
55     Q_PROPERTY(QString userDefinedMesh READ userDefinedMesh WRITE setUserDefinedMesh NOTIFY userDefinedMeshChanged)
56     Q_PROPERTY(QtDataVisualization::Q3DTheme::ColorStyle colorStyle READ colorStyle WRITE setColorStyle NOTIFY colorStyleChanged)
57     Q_PROPERTY(QColor baseColor READ baseColor WRITE setBaseColor NOTIFY baseColorChanged)
58     Q_PROPERTY(QLinearGradient baseGradient READ baseGradient WRITE setBaseGradient NOTIFY baseGradientChanged)
59     Q_PROPERTY(QColor singleHighlightColor READ singleHighlightColor WRITE setSingleHighlightColor NOTIFY singleHighlightColorChanged)
60     Q_PROPERTY(QLinearGradient singleHighlightGradient READ singleHighlightGradient WRITE setSingleHighlightGradient NOTIFY singleHighlightGradientChanged)
61     Q_PROPERTY(QColor multiHighlightColor READ multiHighlightColor WRITE setMultiHighlightColor NOTIFY multiHighlightColorChanged)
62     Q_PROPERTY(QLinearGradient multiHighlightGradient READ multiHighlightGradient WRITE setMultiHighlightGradient NOTIFY multiHighlightGradientChanged)
63     Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
64     Q_PROPERTY(QString itemLabel READ itemLabel NOTIFY itemLabelChanged REVISION 1)
65     Q_PROPERTY(bool itemLabelVisible READ isItemLabelVisible WRITE setItemLabelVisible NOTIFY itemLabelVisibilityChanged REVISION 1)
66 
67 public:
68     enum SeriesType {
69         SeriesTypeNone = 0,
70         SeriesTypeBar = 1,
71         SeriesTypeScatter = 2,
72         SeriesTypeSurface = 4
73     };
74 
75     enum Mesh {
76         MeshUserDefined = 0,
77         MeshBar,
78         MeshCube,
79         MeshPyramid,
80         MeshCone,
81         MeshCylinder,
82         MeshBevelBar,
83         MeshBevelCube,
84         MeshSphere,
85         MeshMinimal,
86         MeshArrow,
87         MeshPoint
88     };
89 
90 protected:
91     explicit QAbstract3DSeries(QAbstract3DSeriesPrivate *d, QObject *parent = nullptr);
92 
93 public:
94     virtual ~QAbstract3DSeries();
95 
96     SeriesType type() const;
97 
98     void setItemLabelFormat(const QString &format);
99     QString itemLabelFormat() const;
100 
101     void setVisible(bool visible);
102     bool isVisible() const;
103 
104     void setMesh(Mesh mesh);
105     Mesh mesh() const;
106 
107     void setMeshSmooth(bool enable);
108     bool isMeshSmooth() const;
109 
110     void setMeshRotation(const QQuaternion &rotation);
111     QQuaternion meshRotation() const;
112     Q_INVOKABLE void setMeshAxisAndAngle(const QVector3D &axis, float angle);
113 
114     void setUserDefinedMesh(const QString &fileName);
115     QString userDefinedMesh() const;
116 
117     void setColorStyle(Q3DTheme::ColorStyle style);
118     Q3DTheme::ColorStyle colorStyle() const;
119     void setBaseColor(const QColor &color);
120     QColor baseColor() const;
121     void setBaseGradient(const QLinearGradient &gradient);
122     QLinearGradient baseGradient() const;
123     void setSingleHighlightColor(const QColor &color);
124     QColor singleHighlightColor() const;
125     void setSingleHighlightGradient(const QLinearGradient &gradient);
126     QLinearGradient singleHighlightGradient() const;
127     void setMultiHighlightColor(const QColor &color);
128     QColor multiHighlightColor() const;
129     void setMultiHighlightGradient(const QLinearGradient &gradient);
130     QLinearGradient multiHighlightGradient() const;
131 
132     void setName(const QString &name);
133     QString name() const;
134 
135     QString itemLabel() const;
136     void setItemLabelVisible(bool visible);
137     bool isItemLabelVisible() const;
138 
139 Q_SIGNALS:
140     void itemLabelFormatChanged(const QString &format);
141     void visibilityChanged(bool visible);
142     void meshChanged(QAbstract3DSeries::Mesh mesh);
143     void meshSmoothChanged(bool enabled);
144     void meshRotationChanged(const QQuaternion &rotation);
145     void userDefinedMeshChanged(const QString &fileName);
146     void colorStyleChanged(Q3DTheme::ColorStyle style);
147     void baseColorChanged(const QColor &color);
148     void baseGradientChanged(const QLinearGradient &gradient);
149     void singleHighlightColorChanged(const QColor &color);
150     void singleHighlightGradientChanged(const QLinearGradient &gradient);
151     void multiHighlightColorChanged(const QColor &color);
152     void multiHighlightGradientChanged(const QLinearGradient &gradient);
153     void nameChanged(const QString &name);
154     Q_REVISION(1) void itemLabelChanged(const QString &label);
155     Q_REVISION(1) void itemLabelVisibilityChanged(bool visible);
156 
157 protected:
158     QScopedPointer<QAbstract3DSeriesPrivate> d_ptr;
159 
160 private:
161     Q_DISABLE_COPY(QAbstract3DSeries)
162 
163     friend class Abstract3DController;
164     friend class Bars3DController;
165     friend class Surface3DController;
166     friend class Surface3DRenderer;
167     friend class Scatter3DRenderer;
168     friend class Scatter3DController;
169     friend class QBar3DSeries;
170     friend class SeriesRenderCache;
171     friend class Abstract3DRenderer;
172 };
173 
174 QT_END_NAMESPACE_DATAVISUALIZATION
175 
176 #endif
177