Класс QCustom3DVolume
Класс QCustom3DVolume добавляет в график объект, отрисовываемый объёмным методом. Подробнее...
| Заголовок: | #include <QCustom3DVolume> |
| С момента: | QtDataVisualization 1.2 |
| Создаётся из: | Custom3DVolume |
| Наследуется от: | QCustom3DItem |
Свойства
|
|
- 9 свойств унаследовано от QCustom3DItem
- 1 свойство унаследовано от QObject
Открытые функции
| QCustom3DVolume(QObject *parent = Q_NULLPTR) | |
| 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 = Q_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 |
- 20 public functions inherited from QCustom3DItem
- 32 public functions inherited from QObject
Сигналы
| 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) |
- 9 сигналов унаследовано от QCustom3DItem
- 2 сигнала унаследовано от QObject
Дополнительные унаследованные члены
- 1 открытый слот унаследован от QObject
- 11 статических открытых членов унаследовано от QObject
- 9 защищённых функций унаследовано от QObject
Подробное описание
Класс QCustom3DVolume добавляет объёмный рендер-объект на график.
Объёмный рендер-объект — это куб с 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
Это свойство содержит глубину 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(QObject *parent = Q_NULLPTR)
Создаёт пользовательский объём 3D с указанным parent.
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 = Q_NULLPTR)
Создаёт пользовательский объём 3D с заданными position, scaling, rotation, textureWidth, textureHeight, textureDepth, textureData, textureFormat, colorTable и необязательным parent.
См. также textureData, setTextureFormat() и colorTable.
[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 объёмной текстуры вдоль указанной оси 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 объёмной текстуры вдоль указанной оси 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().
[signal] void QCustom3DVolume::textureFormatChanged(QImage::Format format)
Этот сигнал излучается при изменении format значения textureData.
См. также setTextureFormat().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qcustom3dvolume.html