Класс QCustom3DVolume
Класс QCustom3DVolume добавляет объект с объемной визуализацией в график. Подробнее...
| Заголовок: | #include <QCustom3DVolume> |
| С версии: | QtDataVisualization 1.2 |
| Создаётся из: | Custom3DVolume |
| Наследует: | QCustom3DItem |
Свойства
|
|
Открытые функции
| QCustom3DVolume(const QVector3D &position, const QVector3D &scaling, const QQuaternion &rotation, int textureWidth, int textureHeight, int textureDepth, QList<uchar> *textureData, QImage::Format textureFormat, const QList<QRgb> &colorTable, QObject *parent = nullptr) | |
| QCustom3DVolume(QObject *parent = nullptr) | |
| virtual | ~QCustom3DVolume() |
| float | alphaMultiplier() const |
| QList<QRgb> | colorTable() const |
| QList<uchar> * | createTextureData(const QList<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 QList<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(QList<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 |
| QList<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(QList<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 : QList<QRgb>
Это свойство содержит массив, содержащий цвета для индексированных форматов текстур.
Если формат текстуры не индексированный, этот массив не используется и может быть пустым.
По умолчанию 0.
Функции доступа:
| QList<QRgb> | colorTable() const |
| void | setColorTable(const QList<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
Это свойство содержит ширину рамки среза.
Ширина может быть различной в разных измерениях, поэтому, например, вы можете отказаться от отображения рамок с определённых сторон объёма, установив для этого измерения значение 0. Значения являются долями толщины объёма в том же измерении. Значения не могут быть отрицательными.
По умолчанию 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 : QList<uchar>*
Это свойство хранит массив, содержащий данные текстуры в формате, указанном в textureFormat.
Размер этого массива должен быть не менее (textureDataWidth * textureHeight * textureDepth * texture format color depth in bytes).
Трехмерная текстура определяется стопкой из двухмерных подтекстур. Каждая подтекстура должна иметь одинаковый размер (textureDataWidth * textureHeight), а глубина стопки определяется свойством textureDepth. Данные в каждой 2D текстуре идентичны данным QImage с тем же форматом, поэтому QImage::bits() может использоваться для предоставления данных для каждой подтекстуры.
Право владения новым массивом передается экземпляру QCustom3DVolume. Если установлен другой массив, предыдущий массив удаляется. Если устанавливается тот же массив, предполагается, что содержимое массива было изменено, и запускается рендеринг графика.
Примечание: Каждая строка данных по оси x должна быть выровнена по 32 битам. Если textureFormat равен QImage::Format_Indexed8, а значение textureWidth не делится на четыре, могут потребоваться добавление байтов заполнения к каждой строке данных по оси x. Функция textureDataWidth() возвращает количество байтов с заполнением. Байты заполнения должны указывать на полностью прозрачный цвет, чтобы избежать артефактов рендеринга.
Значение по умолчанию: 0.
Функции доступа:
| QList<uchar> * | textureData() const |
| void | setTextureData(QList<uchar> *data) |
Сигнал уведомления:
| void | textureDataChanged(QList<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, QList<uchar> *textureData, QImage::Format textureFormat, const QList<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-объём.
QList<uchar> *QCustom3DVolume::createTextureData(const QList<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-размера data. Байты заполнения должны указывать полностью прозрачный цвет, чтобы избежать артефактов рендеринга.
См. также 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-6.2/qcustom3dvolume.html