Класс QCustom3DVolume
Класс QCustom3DVolume добавляет объект, визуализируемый по объёму, в график. Подробнее...
| Заголовок: | #include <QCustom3DVolume> |
| С момента: | QtDataVisualization 1.2 |
| Инициализируется: | Custom3DVolume |
| Наследуется от: | QCustom3DItem |
Этот класс был представлен в QtDataVisualization 1.2.
Свойства
|
|
Открытые функции
| QCustom3DVolume(const QVector3D &position, const QVector3D &scaling, const QQuaternion &rotation, int textureWidth, int textureHeight, int textureDepth, QVector<uchar> *textureData, QImage::Format textureFormat, const QVector<QRgb> &colorTable, QObject *parent = nullptr) | |
| QCustom3DVolume(QObject *parent = nullptr) | |
| virtual | ~QCustom3DVolume() |
| float | alphaMultiplier() const |
| QVector<QRgb> | colorTable() const |
| QVector<uchar> * | createTextureData(const QVector<QImage *> &images) |
| bool | drawSliceFrames() const |
| bool | drawSlices() const |
| bool | preserveOpacity() const |
| QImage | renderSlice(Qt::Axis axis, int index) |
| void | setAlphaMultiplier(float mult) |
| void | setColorTable(const QVector<QRgb> &colors) |
| void | setDrawSliceFrames(bool enable) |
| void | setDrawSlices(bool enable) |
| void | setPreserveOpacity(bool enable) |
| void | setSliceFrameColor(const QColor &color) |
| void | setSliceFrameGaps(const QVector3D &values) |
| void | setSliceFrameThicknesses(const QVector3D &values) |
| void | setSliceFrameWidths(const QVector3D &values) |
| void | setSliceIndexX(int value) |
| void | setSliceIndexY(int value) |
| void | setSliceIndexZ(int value) |
| void | setSliceIndices(int x, int y, int z) |
| void | setSubTextureData(Qt::Axis axis, int index, const uchar *data) |
| void | setSubTextureData(Qt::Axis axis, int index, const QImage &image) |
| void | setTextureData(QVector<uchar> *data) |
| void | setTextureDepth(int value) |
| void | setTextureDimensions(int width, int height, int depth) |
| void | setTextureFormat(QImage::Format format) |
| void | setTextureHeight(int value) |
| void | setTextureWidth(int value) |
| void | setUseHighDefShader(bool enable) |
| QColor | sliceFrameColor() const |
| QVector3D | sliceFrameGaps() const |
| QVector3D | sliceFrameThicknesses() const |
| QVector3D | sliceFrameWidths() const |
| int | sliceIndexX() const |
| int | sliceIndexY() const |
| int | sliceIndexZ() const |
| QVector<uchar> * | textureData() const |
| int | textureDataWidth() const |
| int | textureDepth() const |
| QImage::Format | textureFormat() const |
| int | textureHeight() const |
| int | textureWidth() const |
| bool | useHighDefShader() const |
Сигналы
| void | alphaMultiplierChanged(float mult) |
| void | colorTableChanged() |
| void | drawSliceFramesChanged(bool enabled) |
| void | drawSlicesChanged(bool enabled) |
| void | preserveOpacityChanged(bool enabled) |
| void | sliceFrameColorChanged(const QColor &color) |
| void | sliceFrameGapsChanged(const QVector3D &values) |
| void | sliceFrameThicknessesChanged(const QVector3D &values) |
| void | sliceFrameWidthsChanged(const QVector3D &values) |
| void | sliceIndexXChanged(int value) |
| void | sliceIndexYChanged(int value) |
| void | sliceIndexZChanged(int value) |
| void | textureDataChanged(QVector<uchar> *data) |
| void | textureDepthChanged(int value) |
| void | textureFormatChanged(QImage::Format format) |
| void | textureHeightChanged(int value) |
| void | textureWidthChanged(int value) |
| void | useHighDefShaderChanged(bool enabled) |
Подробное описание
Объект, отображающий объём, представляет собой прямоугольный параллелепипед с 3D текстурой. Поддерживаются три плоскости среза, расположенные вдоль основных осей объёма.
Отображение объёмных объектов очень ресурсоёмко, особенно если объём в значительной степени прозрачен, так как содержимое объёма просчитывается методом трассировки лучей. Производительность практически линейно зависит от количества пикселей, занимаемых объёмом на экране, поэтому уменьшение области отображения или ограничение масштаба графика — простые способы повышения производительности. Аналогично, размеры текстуры объёма сильно влияют на производительность. Если частота кадров важнее, чем точное отображение содержимого объёма, отключите высококачественный шейдер, установив свойство useHighDefShader в false.
Примечание: Объёмные объекты поддерживаются только с ортогональной проекцией.
Примечание: Объёмные объекты используют 3D-текстуры, которые не поддерживаются в средах OpenGL ES2.
См. также QAbstract3DGraph::addCustomItem(), QAbstract3DGraph::orthoProjection, и useHighDefShader.
Документация свойств
alphaMultiplier : float
Это свойство содержит значение, на которое умножается альфа-значение каждого текселя текстуры объёма во время отрисовки.
Это свойство может быть использовано для введения равномерной прозрачности объёма. Если preserveOpacity равно true, то только тексели с некоторой исходной прозрачностью будут затронуты, а полностью непрозрачные тексели не будут. Значение не должно быть отрицательным. По умолчанию 1.0f.
Функции доступа:
| float | alphaMultiplier() const |
| void | setAlphaMultiplier(float mult) |
Сигнал уведомления:
| void | alphaMultiplierChanged(float mult) |
См. также preserveOpacity и textureData.
colorTable : QVector<QRgb>
Это свойство содержит массив, содержащий цвета для индексированных форматов текстур.
Если формат текстуры не индексированный, этот массив не используется и может быть пустым.
По умолчанию 0.
Функции доступа:
| QVector<QRgb> | colorTable() const |
| void | setColorTable(const QVector<QRgb> &colors) |
Сигнал уведомления:
| void | colorTableChanged() |
См. также textureData, setTextureFormat(), и QImage::colorTable().
drawSliceFrames : bool
Это свойство определяет, будут ли отрисовываться рамки срезов вокруг объёма.
Если значение этого свойства true, то рамки срезов, указанные свойствами индекса среза, будут отрисованы вокруг объёма. Если значение false, то рамки срезов не будут отрисованы.
Отрисовка рамок срезов не зависит от отрисовки самих срезов, поэтому вы можете отобразить весь объём и при этом отрисовать рамки срезов вокруг него. Это полезно при использовании renderSlice() для отображения срезов вне самого графика.
По умолчанию false.
Функции доступа:
| bool | drawSliceFrames() const |
| void | setDrawSliceFrames(bool enable) |
Сигнал уведомления:
| void | drawSliceFramesChanged(bool enabled) |
См. также sliceIndexX, sliceIndexY, sliceIndexZ, drawSlices и renderSlice().
drawSlices : bool
Это свойство определяет, будут ли отрисованы указанные срезы вместо всего объёма.
Если значение этого свойства true, то срезы, указанные свойствами индекса среза, будут отрисованы вместо всего объёма. Если значение false, то всегда будет отрисовываться весь объём. По умолчанию false.
Примечание: Срезы всегда отрисовываются вдоль осей элемента, поэтому если элемент повернут, то и срезы тоже будут повернуты.
Функции доступа:
| bool | drawSlices() const |
| void | setDrawSlices(bool enable) |
Сигнал уведомления:
| void | drawSlicesChanged(bool enabled) |
См. также sliceIndexX, sliceIndexY и sliceIndexZ.
preserveOpacity : bool
Это свойство определяет, применяется ли множитель альфа к всем текселям.
Если значение этого свойства true, то alphaMultiplier применяется только к текселям, которые уже имеют некоторую прозрачность. Если значение false, то множитель применяется к альфа-значению всех текселей. По умолчанию true.
Функции доступа:
| bool | preserveOpacity() const |
| void | setPreserveOpacity(bool enable) |
Сигнал уведомления:
| void | preserveOpacityChanged(bool enabled) |
См. также alphaMultiplier.
sliceFrameColor : QColor
Это свойство содержит цвет рамки среза.
Прозрачный цвет рамки среза не поддерживается.
По умолчанию чёрный.
Функции доступа:
| QColor | sliceFrameColor() const |
| void | setSliceFrameColor(const QColor &color) |
Сигнал уведомления:
| void | sliceFrameColorChanged(const QColor &color) |
См. также drawSliceFrames.
sliceFrameGaps : QVector3D
Это свойство содержит размер воздушного зазора между самим объёмом и рамкой в каждой размерности.
Зазор может быть разным в разных размерностях. Значения являются долями толщины объёма в той же размерности. Значения не могут быть отрицательными.
По умолчанию QVector3D(0.01, 0.01, 0.01).
Функции доступа:
| QVector3D | sliceFrameGaps() const |
| void | setSliceFrameGaps(const QVector3D &values) |
Сигнал уведомления:
| void | sliceFrameGapsChanged(const QVector3D &values) |
См. также drawSliceFrames.
sliceFrameThicknesses : QVector3D
Это свойство содержит толщину рамок срезов для каждой размерности.
Значения являются долями толщины объёма в той же размерности. Значения не могут быть отрицательными.
По умолчанию QVector3D(0.01, 0.01, 0.01).
Функции доступа:
| QVector3D | sliceFrameThicknesses() const |
| void | setSliceFrameThicknesses(const QVector3D &values) |
Сигнал уведомления:
| void | sliceFrameThicknessesChanged(const QVector3D &values) |
См. также drawSliceFrames.
sliceFrameWidths : QVector3D
Это свойство содержит ширину рамки среза.
Ширина может быть разной в разных размерностях, например, вы можете исключить отрисовку рамок с определённых сторон объёма, установив значение для этой размерности в ноль. Значения являются долями толщины объёма в той же размерности. Значения не могут быть отрицательными.
По умолчанию QVector3D(0.01, 0.01, 0.01).
Функции доступа:
| QVector3D | sliceFrameWidths() const |
| void | setSliceFrameWidths(const QVector3D &values) |
Сигнал уведомления:
| void | sliceFrameWidthsChanged(const QVector3D &values) |
См. также drawSliceFrames.
sliceIndexX : int
Это свойство содержит индекс по оси X в данных текстуры, указывающий, какой вертикальный срез следует отобразить.
Установка любого измерения в отрицательное значение указывает на то, что срез или рамка среза для этого измерения не рисуются. Если все измерения отрицательны, срезы или рамки срезов не рисуются, и объем рисуется нормально.
Значение по умолчанию: -1.
Функции доступа:
| int | sliceIndexX() const |
| void | setSliceIndexX(int value) |
Сигнал уведомления:
| void | sliceIndexXChanged(int value) |
См. также textureData, drawSlices, и drawSliceFrames.
sliceIndexY : int
Это свойство содержит индекс по оси Y в данных текстуры, указывающий, какой горизонтальный срез следует отобразить.
Установка любого измерения в отрицательное значение указывает на то, что срез или рамка среза для этого измерения не рисуются. Если все измерения отрицательны, срезы или рамки срезов не рисуются, и объем рисуется нормально.
Значение по умолчанию: -1.
Функции доступа:
| int | sliceIndexY() const |
| void | setSliceIndexY(int value) |
Сигнал уведомления:
| void | sliceIndexYChanged(int value) |
См. также textureData, drawSlices, и drawSliceFrames.
sliceIndexZ : int
Это свойство содержит индекс по оси Z в данных текстуры, указывающий, какой вертикальный срез следует отобразить.
Установка любого измерения в отрицательное значение указывает на то, что срез или рамка среза для этого измерения не рисуются. Если все измерения отрицательны, срезы или рамки срезов не рисуются, и объем рисуется нормально.
Значение по умолчанию: -1.
Функции доступа:
| int | sliceIndexZ() const |
| void | setSliceIndexZ(int value) |
Сигнал уведомления:
| void | sliceIndexZChanged(int value) |
См. также textureData, drawSlices, и drawSliceFrames.
textureData : QVector<uchar>*
Это свойство содержит массив, содержащий данные текстуры в формате, указанном в textureFormat.
Размер этого массива должен быть не менее (textureDataWidth * textureHeight * textureDepth * texture format color depth in bytes).
Трехмерная текстура определяется стеком из двумерных подтекстур. Каждая подтекстура должна иметь одинаковый размер (textureDataWidth * textureHeight), а глубина стека определяется свойством textureDepth. Данные в каждой двумерной текстуре идентичны данным QImage с тем же форматом, поэтому QImage::bits() можно использовать для предоставления данных для каждой подтекстуры.
Права владения новым массивом передаются экземпляру QCustom3DVolume. Если установлен другой массив, предыдущий массив удаляется. Если устанавливается тот же массив, предполагается, что содержимое массива изменено, и запускается рендеринг графика.
Примечание: Каждая строка данных по оси X должна быть выровнена по 32 битам. Если textureFormat имеет значение QImage::Format_Indexed8, а значение textureWidth не делится на четыре, байты заполнения могут потребоваться добавить к каждой строке данных по оси X. Функция textureDataWidth() возвращает количество байтов с заполнением. Байты заполнения должны указывать на полностью прозрачный цвет, чтобы избежать артефактов рендеринга.
Значение по умолчанию: 0.
Функции доступа:
| QVector<uchar> * | textureData() const |
| void | setTextureData(QVector<uchar> *data) |
Сигнал уведомления:
| void | textureDataChanged(QVector<uchar> *data) |
См. также colorTable, setTextureFormat(), setSubTextureData(), и textureDataWidth().
textureDepth : int
Это свойство содержит глубину трехмерной текстуры, определяющую объем содержимого в пикселях.
Значение по умолчанию: 0.
Примечание: Значение textureData может потребовать изменения размера или пересоздания, если это значение изменится. Значение по умолчанию: 0.
Функции доступа:
| int | textureDepth() const |
| void | setTextureDepth(int value) |
Сигнал уведомления:
| void | textureDepthChanged(int value) |
См. также textureData, textureWidth, textureHeight, и setTextureFormat().
textureHeight : int
Это свойство содержит высоту трехмерной текстуры, определяющую объем содержимого в пикселях.
Значение по умолчанию: 0.
Примечание: Значение textureData может потребовать изменения размера или пересоздания, если это значение изменится. Значение по умолчанию: 0.
Функции доступа:
| int | textureHeight() const |
| void | setTextureHeight(int value) |
Сигнал уведомления:
| void | textureHeightChanged(int value) |
См. также textureData, textureWidth, textureDepth, и setTextureFormat().
textureWidth : int
Это свойство содержит ширину трехмерной текстуры, определяющую объем содержимого в пикселях.
Значение по умолчанию: 0.
Примечание: Значение textureData может потребовать изменения размера или пересоздания, если это значение изменится. Значение по умолчанию: 0.
Функции доступа:
| int | textureWidth() const |
| void | setTextureWidth(int value) |
Сигнал уведомления:
| void | textureWidthChanged(int value) |
См. также textureData, textureHeight, textureDepth, setTextureFormat(), и textureDataWidth().
useHighDefShader : bool
Это свойство определяет, используется ли шейдер высокого или низкого разрешения для рендеринга объёма.
Если значение этого свойства равно true, используется шейдер высокого разрешения. Если оно равно false, используется шейдер низкого разрешения.
Тенейшие шейдер обеспечивает, что при отрисовке объёмной текстуры каждый видимый тексел текстуры образца. Низкодефиниционный шейдер отображает лишь приблизительное содержание объёма, но с гораздо большей частотой кадров. Низкодефиниционный шейдер не гарантирует, что каждый тексел текстуры объёма будет проанализирован, поэтому возможны мерцания, если объём содержит тонкие особенности.
Примечание: Это значение не влияет на уровень детализации при отображении срезов объёма.
По умолчанию true.
Функции доступа:
| bool | useHighDefShader() const |
| void | setUseHighDefShader(bool enable) |
Сигнал уведомления:
| void | useHighDefShaderChanged(bool enabled) |
См. также renderSlice().
Документация по членам-функциям
QCustom3DVolume::QCustom3DVolume(const QVector3D &position, const QVector3D &scaling, const QQuaternion &rotation, int textureWidth, int textureHeight, int textureDepth, QVector<uchar> *textureData, QImage::Format textureFormat, const QVector<QRgb> &colorTable, QObject *parent = nullptr)
Создаёт пользовательский 3D объём с заданными position, scaling, rotation, textureWidth, textureHeight, textureDepth, textureData, textureFormat, colorTable и необязательным parent.
См. также textureData, setTextureFormat() и colorTable.
QCustom3DVolume::QCustom3DVolume(QObject *parent = nullptr)
Создаёт пользовательский 3D объём с заданным parent.
[signal] void QCustom3DVolume::textureFormatChanged(QImage::Format format)
Этот сигнал генерируется при изменении формата значения textureData.
См. также setTextureFormat().
[virtual] QCustom3DVolume::~QCustom3DVolume()
Удаляет пользовательский 3D объём.
QVector<uchar> *QCustom3DVolume::createTextureData(const QVector<QImage *> &images)
Создаёт новый массив данных текстуры из массива изображений и устанавливает его в качестве textureData для этого объекта объёма. Размеры текстуры также устанавливаются в соответствии с размерами изображения и массива. Все изображения в массиве должны быть одинакового размера. Если изображения не все в формате QImage::Format_Indexed8, все данные текстуры будут преобразованы в формат QImage::Format_ARGB32. Если изображения в формате QImage::Format_Indexed8, значение colorTable для всего объёма будет взято из первого изображения.
Возвращает указатель на вновь созданный массив.
См. также textureData, textureWidth, textureHeight, textureDepth и setTextureFormat().
QImage QCustom3DVolume::renderSlice(Qt::Axis axis, int index)
Отображает срез, указанный index, вдоль оси, заданной axis, в изображение. Используется формат текстуры этого объекта.
Возвращает отрендеренное изображение среза или пустое изображение, если указан недопустимый индекс.
См. также setTextureFormat().
void QCustom3DVolume::setSliceIndices(int x, int y, int z)
Функция-утилита для одновременной установки всех трёх индексов срезов (x, y и z).
См. также textureData.
void QCustom3DVolume::setSubTextureData(Qt::Axis axis, int index, const uchar *data)
Устанавливает подтекстуру 2D объёмной текстуры вдоль указанной оси объёма. Параметр index указывает подтекстуру, которую необходимо установить. Данные текстуры data должны быть в формате, указанном свойством textureFormat, и иметь размер поперечного сечения текстуры объёма вдоль указанной оси, умноженный на глубину цвета формата текстуры в байтах. Ожидается, что данные data будут упорядочены аналогично данным в изображениях, полученных методом renderSlice() вдоль той же оси.
Примечание: Каждая строка x-размера данных должна быть выровнена по 32 битам при работе с осью y или z. Если textureFormat равен QImage::Format_Indexed8, а textureWidth не делится на четыре, могут потребоваться добавление байтов заполнения к каждой строке x-размера данных для правильного выравнивания. Байты заполнения должны указывать полностью прозрачный цвет, чтобы избежать артефактов рендеринга.
См. также textureData и renderSlice().
void QCustom3DVolume::setSubTextureData(Qt::Axis axis, int index, const QImage &image)
Устанавливает подтекстуру 2D объёмной текстуры вдоль указанной оси объёма. Параметр index указывает подтекстуру, которую необходимо установить. Исходное изображение image должно быть в формате, указанном свойством textureFormat, если textureFormat является индексированным. Если textureFormat равен QImage::Format_ARGB32, изображение преобразуется в этот формат. Изображение должно иметь размер поперечного сечения текстуры объёма вдоль указанной оси. Ориентация изображения должна соответствовать ориентации среза изображения, создаваемого методом renderSlice() вдоль той же оси.
Примечание: Каждая строка x-размера данных должна быть выровнена по 32 битам при работе с осью y или z. Если textureFormat равен QImage::Format_Indexed8, а textureWidth не делится на четыре, могут потребоваться добавление байтов заполнения к каждой строке x-размера изображения для правильного выравнивания. Байты заполнения должны указывать полностью прозрачный цвет, чтобы избежать артефактов рендеринга. Не гарантируется, что QImage сделает это автоматически.
См. также textureData и renderSlice().
void QCustom3DVolume::setTextureDimensions(int width, int height, int depth)
Функция-утилита для одновременной установки всех трёх размеров текстуры (width, height и depth).
См. также textureData.
void QCustom3DVolume::setTextureFormat(QImage::Format format)
Устанавливает формат свойства textureData на format. В настоящее время поддерживаются только два формата: QImage::Format_Indexed8 и QImage::Format_ARGB32. Если задан индексированный формат, необходимо также установить colorTable. По умолчанию QImage::Format_ARGB32.
См. также textureFormat(), colorTable и textureData.
int QCustom3DVolume::textureDataWidth() const
Возвращает фактическую ширину данных текстуры. При формате текстуры QImage::Format_Indexed8 это значение равно textureWidth, выровненному по границе 32 бит. В противном случае это значение равно четырём textureWidth.
QImage::Format QCustom3DVolume::textureFormat() const
Возвращает формат свойства textureData.
См. такжеsetTextureFormat().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qcustom3dvolume.html