Spec-Zone.ru › Qt 6.1

Класс QCustom3DVolume

Класс QCustom3DVolume добавляет объект, визуализируемый объёмным методом, в график. Подробнее...

Заголовок: #include <QCustom3DVolume>
С момента: QtDataVisualization 1.2
Создаётся из: Custom3DVolume
Наследуется от: QCustom3DItem
  • Список всех членов, включая унаследованные

Свойства

  • alphaMultiplier : float
  • colorTable : QList<QRgb>
  • drawSliceFrames : bool
  • drawSlices : bool
  • preserveOpacity : bool
  • sliceFrameColor : QColor
  • sliceFrameGaps : QVector3D
  • sliceFrameThicknesses : QVector3D
  • sliceFrameWidths : QVector3D
  • sliceIndexX : int
  • sliceIndexY : int
  • sliceIndexZ : int
  • textureData : QList<uchar>*
  • textureDepth : int
  • textureHeight : int
  • textureWidth : int
  • useHighDefShader : bool

Открытые функции

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

Это свойство содержит ширину рамки среза.

Ширина может быть различной в разных измерениях, например, можно отключить отображение рамок на определенных сторонах объема, установив значение для этого измерения в ноль. Значения являются долями толщины объема в том же измерении. Значения не могут быть отрицательными.

По умолчанию 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. Данные в каждой двумерной текстуре идентичны данным 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)

Этот сигнал испускается при изменении формата значения 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.1/qcustom3dvolume.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API