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

source code of qtgraphs/src/graphs3d/data/qcustom3dvolume.h