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 //
31 //  W A R N I N G
32 //  -------------
33 //
34 // This file is not part of the QtDataVisualization API.  It exists purely as an
35 // implementation detail.  This header file may change from version to
36 // version without notice, or even be removed.
37 //
38 // We mean it.
39 
40 #ifndef QCUSTOM3DVOLUME_P_H
41 #define QCUSTOM3DVOLUME_P_H
42 
43 #include "qcustom3dvolume.h"
44 #include "qcustom3ditem_p.h"
45 
46 QT_BEGIN_NAMESPACE_DATAVISUALIZATION
47 
48 struct QCustomVolumeDirtyBitField {
49     bool textureDimensionsDirty : 1;
50     bool slicesDirty            : 1;
51     bool colorTableDirty        : 1;
52     bool textureDataDirty       : 1;
53     bool textureFormatDirty     : 1;
54     bool alphaDirty             : 1;
55     bool shaderDirty            : 1;
56 
QCustomVolumeDirtyBitFieldQCustomVolumeDirtyBitField57     QCustomVolumeDirtyBitField()
58         : textureDimensionsDirty(false),
59           slicesDirty(false),
60           colorTableDirty(false),
61           textureDataDirty(false),
62           textureFormatDirty(false),
63           alphaDirty(false),
64           shaderDirty(false)
65     {
66     }
67 };
68 
69 class QCustom3DVolumePrivate : public QCustom3DItemPrivate
70 {
71     Q_OBJECT
72 
73 public:
74     QCustom3DVolumePrivate(QCustom3DVolume *q);
75     QCustom3DVolumePrivate(QCustom3DVolume *q, const QVector3D &position, const QVector3D &scaling,
76                            const QQuaternion &rotation, int textureWidth,
77                            int textureHeight, int textureDepth, QVector<uchar> *textureData,
78                            QImage::Format textureFormat, const QVector<QRgb> &colorTable);
79     virtual ~QCustom3DVolumePrivate();
80 
81     void resetDirtyBits();
82     QImage renderSlice(Qt::Axis axis, int index);
83 
84     QCustom3DVolume *qptr();
85 
86 public:
87     int m_textureWidth;
88     int m_textureHeight;
89     int m_textureDepth;
90     int m_sliceIndexX;
91     int m_sliceIndexY;
92     int m_sliceIndexZ;
93 
94     QImage::Format m_textureFormat;
95     QVector<QRgb> m_colorTable;
96     QVector<uchar> *m_textureData;
97 
98     float m_alphaMultiplier;
99     bool m_preserveOpacity;
100     bool m_useHighDefShader;
101 
102     bool m_drawSlices;
103     bool m_drawSliceFrames;
104     QColor m_sliceFrameColor;
105     QVector3D m_sliceFrameWidths;
106     QVector3D m_sliceFrameGaps;
107     QVector3D m_sliceFrameThicknesses;
108 
109     QCustomVolumeDirtyBitField m_dirtyBitsVolume;
110 
111 private:
112     int multipliedAlphaValue(int alpha);
113 
114     friend class QCustom3DVolume;
115 };
116 
117 QT_END_NAMESPACE_DATAVISUALIZATION
118 
119 #endif
120