Класс 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).
3D текстура определяется набором 2D подтекстур. Каждая подтекстура должна иметь одинаковый размер (textureDataWidth * textureHeight), а глубина стека определяется свойством textureDepth. Данные в каждой 2D текстуре идентичны данным QImage с тем же форматом, поэтому для предоставления данных для каждой подтекстуры можно использовать QImage::bits().
Владение новым массивом передаётся экземпляру QCustom3DVolume. Если устанавливается другой массив, предыдущий массив удаляется. Если устанавливается тот же массив, предполагается, что содержимое массива было изменено, и запускается отрисовка графика.
Примечание: Каждая строка x-размера данных должна быть выровнена по 32 битам. Если textureFormat равен QImage::Format_Indexed8, а значение textureWidth не делится на четыре, могут потребоваться добавления заполняющих байтов к каждой строке x-размера данных data. Функция textureDataWidth() возвращает количество заполненных байтов. Заполняющие байты должны указывать на полностью прозрачный цвет, чтобы избежать артефактов отображения.
По умолчанию 0.
Функции доступа:
| QVector<uchar> * | textureData() const |
| void | setTextureData(QVector<uchar> *data) |
Сигнал уведомления:
| void | textureDataChanged(QVector<uchar> *data) |
См. также colorTable, setTextureFormat(), setSubTextureData() и textureDataWidth().
textureDepth : int
Это свойство содержит глубину 3D текстуры, определяющей содержимое объёма в пикселях.
По умолчанию 0.
Примечание: Значение textureData может потребоваться изменить или пересоздать, если это значение изменено. По умолчанию 0.
Функции доступа:
| int | textureDepth() const |
| void | setTextureDepth(int value) |
Сигнал уведомления:
| void | textureDepthChanged(int value) |
См. также textureData, textureWidth, textureHeight и setTextureFormat().
textureHeight : int
Это свойство содержит высоту 3D текстуры, определяющей содержимое объёма в пикселях.
По умолчанию 0.
Примечание: Значение textureData может потребоваться изменить или пересоздать, если это значение изменено. По умолчанию 0.
Функции доступа:
| int | textureHeight() const |
| void | setTextureHeight(int value) |
Сигнал уведомления:
| void | textureHeightChanged(int value) |
См. также textureData, textureWidth, textureDepth и setTextureFormat().
textureWidth : int
Это свойство содержит ширину 3D текстуры, определяющей содержимое объёма в пикселях.
По умолчанию 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)
Этот сигнал испускается, когда меняется format значения textureData.
См. также setTextureFormat().
[virtual] QCustom3DVolume::~QCustom3DVolume()
Удаляет пользовательский объём 3D.
QVector<uchar> *QCustom3DVolume::createTextureData(const QVector<QImage *> &images)
Создаёт новый массив данных текстуры из массива 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 текстуры 3D вдоль указанной axis оси объёма. Параметр 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 текстуры 3D вдоль указанной axis оси объёма. Параметр 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.13/qcustom3dvolume.html