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