1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#ifndef QTDATAVIS3D_QCUSTOM3DVOLUME_H
5#define QTDATAVIS3D_QCUSTOM3DVOLUME_H
6
7#include <QtDataVisualization/qdatavisualizationglobal.h>
8#include <QtDataVisualization/QCustom3DItem>
9#include <QtGui/QColor>
10#include <QtGui/QImage>
11
12QT_BEGIN_NAMESPACE
13
14class QQuaternion;
15
16class QCustom3DVolumePrivate;
17
18class Q_DATAVISUALIZATION_EXPORT QCustom3DVolume : public QCustom3DItem
19{
20 Q_OBJECT
21 Q_PROPERTY(int textureWidth READ textureWidth WRITE setTextureWidth NOTIFY textureWidthChanged)
22 Q_PROPERTY(int textureHeight READ textureHeight WRITE setTextureHeight NOTIFY textureHeightChanged)
23 Q_PROPERTY(int textureDepth READ textureDepth WRITE setTextureDepth NOTIFY textureDepthChanged)
24 Q_PROPERTY(int sliceIndexX READ sliceIndexX WRITE setSliceIndexX NOTIFY sliceIndexXChanged)
25 Q_PROPERTY(int sliceIndexY READ sliceIndexY WRITE setSliceIndexY NOTIFY sliceIndexYChanged)
26 Q_PROPERTY(int sliceIndexZ READ sliceIndexZ WRITE setSliceIndexZ NOTIFY sliceIndexZChanged)
27 Q_PROPERTY(QList<QRgb> colorTable READ colorTable WRITE setColorTable NOTIFY colorTableChanged)
28 Q_PROPERTY(QList<uchar> *textureData READ textureData WRITE setTextureData NOTIFY
29 textureDataChanged)
30 Q_PROPERTY(float alphaMultiplier READ alphaMultiplier WRITE setAlphaMultiplier NOTIFY alphaMultiplierChanged)
31 Q_PROPERTY(bool preserveOpacity READ preserveOpacity WRITE setPreserveOpacity NOTIFY preserveOpacityChanged)
32 Q_PROPERTY(bool useHighDefShader READ useHighDefShader WRITE setUseHighDefShader NOTIFY useHighDefShaderChanged)
33 Q_PROPERTY(bool drawSlices READ drawSlices WRITE setDrawSlices NOTIFY drawSlicesChanged)
34 Q_PROPERTY(bool drawSliceFrames READ drawSliceFrames WRITE setDrawSliceFrames NOTIFY drawSliceFramesChanged)
35 Q_PROPERTY(QColor sliceFrameColor READ sliceFrameColor WRITE setSliceFrameColor NOTIFY sliceFrameColorChanged)
36 Q_PROPERTY(QVector3D sliceFrameWidths READ sliceFrameWidths WRITE setSliceFrameWidths NOTIFY sliceFrameWidthsChanged)
37 Q_PROPERTY(QVector3D sliceFrameGaps READ sliceFrameGaps WRITE setSliceFrameGaps NOTIFY sliceFrameGapsChanged)
38 Q_PROPERTY(QVector3D sliceFrameThicknesses READ sliceFrameThicknesses WRITE setSliceFrameThicknesses NOTIFY sliceFrameThicknessesChanged)
39
40public:
41
42 explicit QCustom3DVolume(QObject *parent = nullptr);
43 explicit QCustom3DVolume(const QVector3D &position, const QVector3D &scaling,
44 const QQuaternion &rotation, int textureWidth, int textureHeight,
45 int textureDepth, QList<uchar> *textureData,
46 QImage::Format textureFormat, const QList<QRgb> &colorTable,
47 QObject *parent = nullptr);
48 virtual ~QCustom3DVolume();
49
50 void setTextureWidth(int value);
51 int textureWidth() const;
52 void setTextureHeight(int value);
53 int textureHeight() const;
54 void setTextureDepth(int value);
55 int textureDepth() const;
56 void setTextureDimensions(int width, int height, int depth);
57 int textureDataWidth() const;
58
59 void setSliceIndexX(int value);
60 int sliceIndexX() const;
61 void setSliceIndexY(int value);
62 int sliceIndexY() const;
63 void setSliceIndexZ(int value);
64 int sliceIndexZ() const;
65 void setSliceIndices(int x, int y, int z);
66
67 void setColorTable(const QList<QRgb> &colors);
68 QList<QRgb> colorTable() const;
69
70 void setTextureData(QList<uchar> *data);
71 QList<uchar> *createTextureData(const QList<QImage *> &images);
72 QList<uchar> *textureData() const;
73 void setSubTextureData(Qt::Axis axis, int index, const uchar *data);
74 void setSubTextureData(Qt::Axis axis, int index, const QImage &image);
75
76 void setTextureFormat(QImage::Format format);
77 QImage::Format textureFormat() const;
78
79 void setAlphaMultiplier(float mult);
80 float alphaMultiplier() const;
81 void setPreserveOpacity(bool enable);
82 bool preserveOpacity() const;
83
84 void setUseHighDefShader(bool enable);
85 bool useHighDefShader() const;
86
87 void setDrawSlices(bool enable);
88 bool drawSlices() const;
89 void setDrawSliceFrames(bool enable);
90 bool drawSliceFrames() const;
91
92 void setSliceFrameColor(const QColor &color);
93 QColor sliceFrameColor() const;
94 void setSliceFrameWidths(const QVector3D &values);
95 QVector3D sliceFrameWidths() const;
96 void setSliceFrameGaps(const QVector3D &values);
97 QVector3D sliceFrameGaps() const;
98 void setSliceFrameThicknesses(const QVector3D &values);
99 QVector3D sliceFrameThicknesses() const;
100
101 QImage renderSlice(Qt::Axis axis, int index);
102
103Q_SIGNALS:
104 void textureWidthChanged(int value);
105 void textureHeightChanged(int value);
106 void textureDepthChanged(int value);
107 void sliceIndexXChanged(int value);
108 void sliceIndexYChanged(int value);
109 void sliceIndexZChanged(int value);
110 void colorTableChanged();
111 void textureDataChanged(QList<uchar> *data);
112 void textureFormatChanged(QImage::Format format);
113 void alphaMultiplierChanged(float mult);
114 void preserveOpacityChanged(bool enabled);
115 void useHighDefShaderChanged(bool enabled);
116 void drawSlicesChanged(bool enabled);
117 void drawSliceFramesChanged(bool enabled);
118 void sliceFrameColorChanged(const QColor &color);
119 void sliceFrameWidthsChanged(const QVector3D &values);
120 void sliceFrameGapsChanged(const QVector3D &values);
121 void sliceFrameThicknessesChanged(const QVector3D &values);
122
123protected:
124 QCustom3DVolumePrivate *dptr();
125 const QCustom3DVolumePrivate *dptrc() const;
126
127private:
128 Q_DISABLE_COPY(QCustom3DVolume)
129
130 friend class Abstract3DRenderer;
131};
132
133QT_END_NAMESPACE
134
135#endif
136

source code of qtdatavis3d/src/datavisualization/data/qcustom3dvolume.h