QCustom3DVolume Class
La classe QCustom3DVolume ajoute un objet de rendu de volume à un graphique. Plus d'informations...
| En-tête : | #include <QCustom3DVolume> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS DataVisualization)target_link_libraries(mytarget PRIVATE Qt6::DataVisualization) |
| qmake : | QT += datavisualization |
| Depuis : | QtDataVisualization 1.2 |
| En QML : | Custom3DVolume |
| Hérites : | QCustom3DItem |
Propriétés
|
|
Fonctions publiques
| QCustom3DVolume(QObject *parent = nullptr) | |
| 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) | |
| 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 QImage &image) |
| void | setSubTextureData(Qt::Axis axis, int index, const uchar *data) |
| 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 |
Signaux
| 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) |
Description détaillée
Un objet rendu en volume est une boîte avec une texture 3D. Trois plans de coupe sont pris en charge pour le volume, un le long de chaque axe principal du volume.
Le rendu des objets volumiques est très gourmand en performances, en particulier lorsque le volume est largement transparent, car le contenu du volume est tracé par rayons. Les performances sont presque linéairement proportionnelles à la quantité de pixels que le volume occupe à l'écran, de sorte qu'il est facile d'améliorer les performances en affichant le volume dans une vue plus petite ou en limitant le niveau de zoom du graphique. De même, les dimensions de la texture du volume ont un impact important sur les performances. Si le taux de rafraîchissement est plus important que le rendu parfait du contenu du volume, vous pouvez désactiver le shader haute définition en définissant la propriété useHighDefShader sur false.
Remarque : les objets volumétriques ne sont pris en charge qu'avec la projection orthographique.
Remarque : les objets volumétriques utilisent des textures 3D, qui ne sont pas prises en charge dans les environnements OpenGL ES2.
Voir également QAbstract3DGraph::addCustomItem(), QAbstract3DGraph::orthoProjection, et useHighDefShader.
Documentation sur les propriétés
alphaMultiplier : float
Cette propriété contient la valeur avec laquelle la valeur alpha de chaque texel de la texture du volume est multipliée au moment du rendu.
Cette propriété peut être utilisée pour introduire une transparence uniforme dans le volume. Si preserveOpacity est true, seuls les texels ayant au moins une certaine transparence au départ sont affectés, et les texels totalement opaques ne le sont pas. La valeur ne doit pas être négative. La valeur par défaut est 1.0f.
Fonctions d'accès :
| float | alphaMultiplier() const |
| void | setAlphaMultiplier(float mult) |
Signal Notifier :
| void | alphaMultiplierChanged(float mult) |
Voir aussi preserveOpacity et textureData.
colorTable : QList<QRgb>
Cette propriété contient le tableau des couleurs pour les formats de texture indexés.
Si le format de texture n'est pas indexé, ce tableau n'est pas utilisé et peut être vide.
La valeur par défaut est 0.
Fonctions d'accès :
| QList<QRgb> | colorTable() const |
| void | setColorTable(const QList<QRgb> &colors) |
Notifier signal :
| void | colorTableChanged() |
Voir également textureData, setTextureFormat() et QImage::colorTable().
drawSliceFrames : bool
Cette propriété indique si les cadres des tranches sont dessinés autour du volume.
Si la valeur de cette propriété est true, les cadres des tranches indiqués par les propriétés d'index de tranche seront dessinés autour du volume. Si la valeur est false, aucun cadre de tranche ne sera dessiné.
Le dessin des cadres de tranches est indépendant du dessin des tranches, de sorte que vous pouvez afficher le volume complet tout en dessinant les cadres de tranches autour de celui-ci. Ceci est utile lorsque vous utilisez renderSlice() pour afficher les tranches en dehors du graphique lui-même.
La valeur par défaut est false.
Fonctions d'accès :
| bool | drawSliceFrames() const |
| void | setDrawSliceFrames(bool enable) |
Signal Notifier :
| void | drawSliceFramesChanged(bool enabled) |
Voir aussi sliceIndexX, sliceIndexY, sliceIndexZ, drawSlices, et renderSlice().
drawSlices : bool
Cette propriété indique si les tranches spécifiées sont dessinées à la place du volume complet.
Si la valeur de cette propriété est true, les tranches indiquées par les propriétés d'index de tranche seront dessinées à la place du volume complet. Si la valeur est false, le volume complet sera toujours dessiné. La valeur par défaut est false.
Remarque : les tranches sont toujours dessinées le long des axes de l'élément, donc si l'élément est tourné, les tranches sont également tournées.
Fonctions d'accès :
| bool | drawSlices() const |
| void | setDrawSlices(bool enable) |
Notifier signal :
| void | drawSlicesChanged(bool enabled) |
Voir également sliceIndexX, sliceIndexY, et sliceIndexZ.
preserveOpacity : bool
Cette propriété indique si le multiplicateur alpha est appliqué à tous les pixels.
Si la valeur de cette propriété est true, alphaMultiplier n'est appliqué qu'aux pixels qui ont déjà une certaine transparence. Si la valeur est false, le multiplicateur est appliqué à la valeur alpha de tous les pixels. La valeur par défaut est true.
Fonctions d'accès :
| bool | preserveOpacity() const |
| void | setPreserveOpacity(bool enable) |
Signal de notification :
| void | preserveOpacityChanged(bool enabled) |
Voir également alphaMultiplier.
sliceFrameColor : QColor
Cette propriété définit la couleur du cadre de la tranche.
La couleur transparente du cadre de la tranche n'est pas prise en charge.
La valeur par défaut est le noir.
Fonctions d'accès :
| QColor | sliceFrameColor() const |
| void | setSliceFrameColor(const QColor &color) |
Signal de notification :
| void | sliceFrameColorChanged(const QColor &color) |
Voir aussi drawSliceFrames.
sliceFrameGaps : QVector3D
Cette propriété définit la taille de l'espace d'air laissé entre le volume lui-même et le cadre dans chaque dimension.
L'espace peut être différent d'une dimension à l'autre. Les valeurs sont des fractions de l'épaisseur du volume dans la même dimension. Les valeurs ne peuvent pas être négatives.
La valeur par défaut est QVector3D(0.01, 0.01, 0.01).
Fonctions d'accès :
| QVector3D | sliceFrameGaps() const |
| void | setSliceFrameGaps(const QVector3D &values) |
Signal de notification :
| void | sliceFrameGapsChanged(const QVector3D &values) |
Voir aussi drawSliceFrames.
sliceFrameThicknesses : QVector3D
Cette propriété indique l'épaisseur des cadres de la tranche pour chaque dimension.
Les valeurs sont des fractions de l'épaisseur du volume dans la même dimension. Les valeurs ne peuvent pas être négatives.
La valeur par défaut est QVector3D(0.01, 0.01, 0.01).
Fonctions d'accès :
| QVector3D | sliceFrameThicknesses() const |
| void | setSliceFrameThicknesses(const QVector3D &values) |
Signal de notification :
| void | sliceFrameThicknessesChanged(const QVector3D &values) |
Voir également drawSliceFrames.
sliceFrameWidths : QVector3D
Cette propriété définit la largeur du cadre de la tranche.
La largeur peut être différente selon les dimensions, ce qui permet par exemple de ne pas dessiner les cadres sur certains côtés du volume en définissant la valeur de cette dimension à zéro. Les valeurs sont des fractions de l'épaisseur du volume dans la même dimension. Les valeurs ne peuvent pas être négatives.
La valeur par défaut est QVector3D(0.01, 0.01, 0.01).
Fonctions d'accès :
| QVector3D | sliceFrameWidths() const |
| void | setSliceFrameWidths(const QVector3D &values) |
Signal de notification :
| void | sliceFrameWidthsChanged(const QVector3D &values) |
Voir également drawSliceFrames.
sliceIndexX : int
Cette propriété contient l'index de la dimension x dans les données de texture indiquant la tranche verticale à afficher.
Si l'une des dimensions est négative, aucune tranche ou cadre de tranche n'est dessiné pour cette dimension. Si toutes les dimensions sont négatives, aucune tranche ou cadre de tranche n'est dessiné et le volume est dessiné normalement.
La valeur par défaut est -1.
Fonctions d'accès :
| int | sliceIndexX() const |
| void | setSliceIndexX(int value) |
Signal Notificateur :
| void | sliceIndexXChanged(int value) |
Voir également textureData, drawSlices, et drawSliceFrames.
sliceIndexY : int
Cette propriété contient l'index de la dimension y dans les données de texture indiquant la tranche horizontale à afficher.
Si l'une des dimensions est négative, aucune tranche ou cadre de tranche n'est dessiné pour cette dimension. Si toutes les dimensions sont négatives, aucune tranche ou cadre de tranche n'est dessiné et le volume est dessiné normalement.
La valeur par défaut est -1.
Fonctions d'accès :
| int | sliceIndexY() const |
| void | setSliceIndexY(int value) |
Signal Notificateur :
| void | sliceIndexYChanged(int value) |
Voir également textureData, drawSlices, et drawSliceFrames.
sliceIndexZ : int
Cette propriété contient l'index de la dimension z dans les données de texture indiquant la tranche verticale à afficher.
Si l'une des dimensions est négative, aucune tranche ou cadre de tranche n'est dessiné pour cette dimension. Si toutes les dimensions sont négatives, aucune tranche ou cadre de tranche n'est dessiné et le volume est dessiné normalement.
La valeur par défaut est -1.
Fonctions d'accès :
| int | sliceIndexZ() const |
| void | setSliceIndexZ(int value) |
Signal Notificateur :
| void | sliceIndexZChanged(int value) |
Voir également textureData, drawSlices, et drawSliceFrames.
textureData : QList<uchar>*
Cette propriété contient le tableau des données de texture dans le format spécifié par textureFormat.
La taille de ce tableau doit être d'au moins (textureDataWidth * textureHeight * textureDepth * texture format color depth in bytes).
Une texture 3D est définie par une pile de sous-textures 2D. Chaque sous-texture doit être de taille identique (textureDataWidth * textureHeight), et la profondeur de la pile est définie par la propriété textureDepth. Les données de chaque texture 2D sont identiques à des données QImage ayant le même format, de sorte que QImage::bits() peut être utilisé pour fournir les données de chaque sous-texture.
La propriété du nouveau tableau est transférée à l'instance QCustom3DVolume. Si un autre tableau est défini, le tableau précédent est supprimé. Si le même tableau est à nouveau défini, on suppose que le contenu du tableau a été modifié et le rendu du graphique est déclenché.
Remarque : chaque ligne de la dimension x des données doit être alignée sur 32 bits. Si textureFormat est QImage::Format_Indexed8 et que la valeur de textureWidth n'est pas divisible par quatre, il peut être nécessaire d'ajouter des octets de remplissage à chaque ligne de dimension x de data. La fonction textureDataWidth() renvoie le nombre d'octets de remplissage. Les octets de remplissage doivent indiquer une couleur totalement transparente pour éviter les artefacts de rendu.
La valeur par défaut est 0.
Fonctions d'accès :
| QList<uchar> * | textureData() const |
| void | setTextureData(QList<uchar> *data) |
Signal Notifier :
| void | textureDataChanged(QList<uchar> *data) |
Voir également colorTable, setTextureFormat(), setSubTextureData() et textureDataWidth().
textureDepth : int
Cette propriété indique la profondeur de la texture 3D définissant le contenu du volume en pixels.
La valeur par défaut est 0.
Remarque : il se peut que la valeur textureData doive être redimensionnée ou recréée si cette valeur est modifiée. La valeur par défaut est 0.
Fonctions d'accès :
| int | textureDepth() const |
| void | setTextureDepth(int value) |
Signal de notification :
| void | textureDepthChanged(int value) |
Voir aussi textureData, textureWidth, textureHeight, et setTextureFormat().
textureHeight : int
Cette propriété indique la hauteur de la texture 3D définissant le contenu du volume en pixels.
La valeur par défaut est 0.
Remarque : il se peut que la valeur textureData doive être redimensionnée ou recréée si cette valeur est modifiée. La valeur par défaut est 0.
Fonctions d'accès :
| int | textureHeight() const |
| void | setTextureHeight(int value) |
Signal de notification :
| void | textureHeightChanged(int value) |
Voir aussi textureData, textureWidth, textureDepth, et setTextureFormat().
textureWidth : int
Cette propriété indique la largeur de la texture 3D définissant le contenu du volume en pixels.
La valeur par défaut est 0.
Remarque : il se peut que la valeur textureData doive être redimensionnée ou recréée si cette valeur est modifiée. La valeur par défaut est 0.
Fonctions d'accès :
| int | textureWidth() const |
| void | setTextureWidth(int value) |
Signal de notification :
| void | textureWidthChanged(int value) |
Voir aussi textureData, textureHeight, textureDepth, setTextureFormat(), et textureDataWidth().
useHighDefShader : bool
Cette propriété indique si un shader haute ou basse définition est utilisé pour le rendu du volume.
Si la valeur de cette propriété est true, un shader haute définition est utilisé. Si la valeur est false, c'est un shader basse définition qui est utilisé.
Le shader haute définition garantit que chaque texel visible de la texture du volume est échantillonné lors du rendu du volume. Le shader basse définition ne rend qu'une approximation grossière du contenu du volume, mais à une fréquence d'images beaucoup plus élevée. Le shader basse définition ne garantit pas que chaque texel de la texture du volume est échantillonné, il peut donc y avoir un scintillement si le volume contient des caractéristiques fines distinctes.
Remarque : cette valeur n'affecte pas le niveau de détail lors du rendu des tranches du volume.
La valeur par défaut est true.
Fonctions d'accès :
| bool | useHighDefShader() const |
| void | setUseHighDefShader(bool enable) |
Signal de notification :
| void | useHighDefShaderChanged(bool enabled) |
Voir également renderSlice().
Documentation des fonctions membres
[explicit] QCustom3DVolume::QCustom3DVolume(QObject *parent = nullptr)
Construit un volume 3D personnalisé avec l'adresse parent.
[explicit] 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)
Construit un volume 3D personnalisé avec les données position, scaling, rotation, textureWidth, textureHeight, textureDepth, textureData, textureFormat, colorTable, et optionnellement parent.
Voir également textureData, setTextureFormat(), et colorTable.
[virtual noexcept] QCustom3DVolume::~QCustom3DVolume()
Supprime le volume 3D personnalisé.
QList<uchar> *QCustom3DVolume::createTextureData(const QList<QImage *> &images)
Crée un nouveau tableau de données de texture à partir d'un tableau de images et le définit comme textureData pour cet objet volume. Les dimensions de la texture sont également définies en fonction des dimensions de l'image et du tableau. Toutes les images du tableau doivent avoir la même taille. Si les images ne sont pas toutes au format QImage::Format_Indexed8, toutes les données de texture seront converties au format QImage::Format_ARGB32. Si les images sont au format QImage::Format_Indexed8, la valeur colorTable pour l'ensemble du volume sera prise à partir de la première image.
Renvoie un pointeur sur le tableau nouvellement créé.
Voir aussi textureData, textureWidth, textureHeight, textureDepth, et setTextureFormat().
QImage QCustom3DVolume::renderSlice(Qt::Axis axis, int index)
Rend la tranche spécifiée par index le long de l'axe spécifié par axis dans une image. Le format de texture de cet objet est utilisé.
Retourne l'image rendue de la tranche, ou une image nulle si un index invalide est spécifié.
Voir aussi setTextureFormat().
void QCustom3DVolume::setSliceIndices(int x, int y, int z)
Une fonction de commodité pour définir les trois indices de tranche (x, y, et z) en une seule fois.
Voir aussi textureData.
void QCustom3DVolume::setSubTextureData(Qt::Axis axis, int index, const QImage &image)
Définit une seule sous-texture 2D de la texture 3D le long de l'adresse axis spécifiée du volume. Le paramètre index indique la sous-texture à définir. La source image doit être dans le format spécifié par la propriété textureFormat si textureFormat est indexé. Si textureFormat est QImage::Format_ARGB32, l'image est convertie dans ce format. L'image doit avoir la taille de la section transversale de la texture du volume le long de l'axe spécifié. L'orientation de l'image doit correspondre à l'orientation de l'image de la tranche produite par la méthode renderSlice() le long du même axe.
Remarque : chaque ligne de la dimension x des données doit être alignée sur 32 bits lorsqu'elle vise l'axe y ou l'axe z. Si textureFormat est QImage::Format_Indexed8 et que la valeur textureWidth n'est pas divisible par quatre, il peut être nécessaire d'ajouter des octets de remplissage à chaque ligne de dimension x de l'image pour l'aligner correctement. Les octets de remplissage doivent indiquer une couleur totalement transparente pour éviter les artefacts de rendu. Il n'est pas garanti que QImage le fasse automatiquement.
Voir aussi textureData et renderSlice().
void QCustom3DVolume::setSubTextureData(Qt::Axis axis, int index, const uchar *data)
Définit une seule sous-texture 2D de la texture 3D le long de l'adresse axis spécifiée du volume. Le paramètre index indique la sous-texture à définir. La texture data doit être dans le format spécifié par la propriété textureFormat et avoir la taille de la section transversale de la texture du volume le long de l'axe spécifié multipliée par la profondeur de couleur du format de texture en octets. La texture data doit être ordonnée de la même manière que les données des images produites par la méthode renderSlice() le long du même axe.
Remarque : chaque ligne de la dimension x des données doit être alignée sur 32 bits lorsqu'elle vise l'axe y ou l'axe z. Si textureFormat est QImage::Format_Indexed8 et que la valeur textureWidth n'est pas divisible par quatre, il peut être nécessaire d'ajouter des octets de remplissage à chaque ligne de dimension x de data pour l'aligner correctement. Les octets de remplissage doivent indiquer une couleur totalement transparente pour éviter les artefacts de rendu.
Voir également textureData et renderSlice().
void QCustom3DVolume::setTextureDimensions(int width, int height, int depth)
Une fonction de commodité pour définir les trois dimensions de la texture (width, height, et depth) en une seule fois.
Voir aussi textureData.
void QCustom3DVolume::setTextureFormat(QImage::Format format)
Définit le format de la propriété textureData à format. Seuls deux formats sont actuellement pris en charge : QImage::Format_Indexed8 et QImage::Format_ARGB32. Si un format indexé est spécifié, colorTable doit également être défini. La valeur par défaut est QImage::Format_ARGB32.
Voir également textureFormat(), colorTable, et textureData.
int QCustom3DVolume::textureDataWidth() const
Renvoie la largeur réelle des données de texture. Lorsque le format de texture est QImage::Format_Indexed8, cette valeur est égale à textureWidth aligné sur une frontière de 32 bits. Sinon, cette valeur est égale à quatre fois textureWidth.
QImage::Format QCustom3DVolume::textureFormat() const
Renvoie le format de la valeur de la propriété textureData.
Voir aussi setTextureFormat().
[signal] void QCustom3DVolume::textureFormatChanged(QImage::Format format)
Ce signal est émis lorsque la valeur format de la valeur textureData change.
Voir aussi setTextureFormat().
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.