QCustom3DVolume Class

QCustom3DVolume クラスは、グラフにボリュームレンダリングオブジェクトを追加します。詳細...

Header: #include <QCustom3DVolume>
CMake: find_package(Qt6 REQUIRED COMPONENTS Graphs)
target_link_libraries(mytarget PRIVATE Qt6::Graphs)
qmake: QT += graphs
In QML: Custom3DVolume
Inherits: QCustom3DItem

プロパティ

パブリック関数

QCustom3DVolume(QObject *parent = nullptr)
QCustom3DVolume(QVector3D position, 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() override
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(QColor color)
void setSliceFrameGaps(QVector3D values)
void setSliceFrameThicknesses(QVector3D values)
void setSliceFrameWidths(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

シグナル

void alphaMultiplierChanged(float mult)
void colorTableChanged()
void drawSliceFramesChanged(bool enabled)
void drawSlicesChanged(bool enabled)
void preserveOpacityChanged(bool enabled)
void sliceFrameColorChanged(QColor color)
void sliceFrameGapsChanged(QVector3D values)
void sliceFrameThicknessesChanged(QVector3D values)
void sliceFrameWidthsChanged(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テクスチャを持つボックスです。ボリュームには、ボリュームの各主軸に沿った3つのスライス面がサポートされています。

ボリュームオブジェクトのレンダリングは、ボリュームの内容がレイトレースされるため、特にボリュームの大部分が透明である場合、非常にパフォーマンスが集中します。パフォーマンスは、ボリュームが画面上で占めるピクセル量とほぼリニアにスケールするため、ボリュームを小さく表示するか、グラフのズームレベルを制限することが、パフォーマンスを向上させる簡単な方法です。同様に、ボリュームのテクスチャ寸法もパフォーマンスに大きな影響を与えます。フレームレートがボリュームコンテンツのピクセルパーフェクトなレンダリングよりも重要な場合は、useHighDefShader プロパティをfalse に設定して高解像度シェーダをオフにすることを検討してください。

注意: ボリュームオブジェクトは3Dテクスチャを利用しますが、これはOpenGL ES2環境ではサポートされていません。

Q3DGraphsWidgetItem::addCustomItem() およびuseHighDefShaderも参照してください

プロパティの説明

alphaMultiplier : float

このプロパティは、ボリュームテクスチャの各テクセルのアルファ値がレンダリング時に乗算される値を保持します。

このプロパティは、ボリュームに均一な透明度を導入するために使用できます。preserveOpacitytrue の場合、少なくともある程度の透明度を持つテクセルのみが影響を受け、完全に不透明なテクセルは影響を受けません。値は負であってはいけません。デフォルトは1.0f です。

アクセス関数:

float alphaMultiplier() const
void setAlphaMultiplier(float mult)

Notifier シグナル:

void alphaMultiplierChanged(float mult)

preserveOpacity およびtextureDataも参照

colorTable : QList<QRgb>

こ のプ ロ パテ ィ は、 イ ンデ ッ ク ス付き テ ク スチ ャ フ ォーマ ッ ト に対す る 色を含む配列を保持 し ます。

テクスチャフォーマットがインデックス付きでない場合、この配列は使用されず、空にすることができます。

デフォルトは0 です。

アクセス関数

QList<QRgb> colorTable() const
void setColorTable(const QList<QRgb> &colors)

Notifier シグナル:

void colorTableChanged()

textureDatasetTextureFormat()、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)

sliceIndexXsliceIndexYsliceIndexZも参照してください

preserveOpacity : bool

このプロパティは、アルファ乗数をすべてのテクセルに適用するかどうかを保持します。

こ のプ ロパテ ィ 値がtrue の場合、alphaMultiplier は、すでにある程度の透明度を持つテクセルにのみ適用されます。このプロパティの値がfalse の場合、乗数はすべてのテ クセルのアルファ値に適用されます。デフォルトはtrue です。

アクセス関数:

bool preserveOpacity() const
void setPreserveOpacity(bool enable)

Notifier シグナル:

void preserveOpacityChanged(bool enabled)

alphaMultiplierも参照。

sliceFrameColor : QColor

このプロパティはスライス枠の色を保持します。

透明なスライス枠の色はサポー ト されません。

デフォルトは黒です。

アクセス関数:

QColor sliceFrameColor() const
void setSliceFrameColor(QColor color)

通知シグナル:

void sliceFrameColorChanged(QColor color)

drawSliceFramesも参照

sliceFrameGaps : QVector3D

このプロパティは、各次元でボリューム本体とフレームの間に残されたエアギャップのサイズを保持します。

ギャップは異なる次元で異なることがある。値は、同じ次元におけるボリュームの厚さの分数である。値を負にすることはできません。

デフォルトはQVector3D(0.01, 0.01, 0.01)

アクセス関数:

QVector3D sliceFrameGaps() const
void setSliceFrameGaps(QVector3D values)

通知シグナル:

void sliceFrameGapsChanged(QVector3D values)

drawSliceFramesも参照

sliceFrameThicknesses : QVector3D

このプロパティは、各次元のスライス枠の厚さを保持する。

値は、同じ次元の体積の厚さの分数です。値を負にすることはできません。

デフォルトはQVector3D(0.01, 0.01, 0.01) です。

アクセス関数:

QVector3D sliceFrameThicknesses() const
void setSliceFrameThicknesses(QVector3D values)

Notifier シグナル:

void sliceFrameThicknessesChanged(QVector3D values)

drawSliceFramesも参照

sliceFrameWidths : QVector3D

このプロパティはスライス枠の幅を保持します。

幅は異なる次元で異なることができるので、例えば、その次元の値をゼロに設定することで、ボリュームの特定の辺のフレームの描画を省略することができます。値は同じ次元のボリュームの厚さの分数です。値を負にすることはできません。

デフォルトはQVector3D(0.01, 0.01, 0.01)

アクセス関数:

QVector3D sliceFrameWidths() const
void setSliceFrameWidths(QVector3D values)

通知シグナル:

void sliceFrameWidthsChanged(QVector3D values)

drawSliceFramesも参照してください

sliceIndexX : int

このプロパティは、どの垂直スライスを表示するかを示すテクスチャデータの x 次元インデックスを保持します。

いずれかの次元を負に設定すると、その次元のスライスまたはスライスフレームが描画されないことを示します。すべての次元が負の場合、スライスまたはスライスフレームは描画されず、ボリュームは正常に描画されます。

デフォルトは-1

アクセス関数:

int sliceIndexX() const
void setSliceIndexX(int value)

Notifier シグナル:

void sliceIndexXChanged(int value)

textureDatadrawSlicesdrawSliceFramesも参照

sliceIndexY : int

このプロパティは、どの水平スライスを表示するかを示すテクスチャデータの y 次元インデックスを保持します。

いずれかの次元を負に設定すると、その次元のスライスまたはスライスフレームが描画されないことを示します。すべての次元が負の場合、スライスまたはスライスフレームは描画されず、ボリュームは正常に描画されます。

デフォルトは-1

アクセス関数:

int sliceIndexY() const
void setSliceIndexY(int value)

Notifier シグナル:

void sliceIndexYChanged(int value)

textureDatadrawSlicesdrawSliceFramesも参照

sliceIndexZ : int

このプロパティは、どの垂直スライスを表示するかを示すテクスチャデータへの z 次元インデックスを保持します。

いずれかの次元を負に設定すると、その次元のスライスまたはスライスフレームが描画されないことを示します。すべての次元が負の場合、スライスまたはスライスフレームは描画されず、ボリュームは正常に描画されます。

デフォルトは-1

アクセス関数:

int sliceIndexZ() const
void setSliceIndexZ(int value)

Notifier シグナル:

void sliceIndexZChanged(int value)

textureData,drawSlices,drawSliceFramesも参照してください

textureData : QList<uchar>*

このプロパティは、textureFormat で指定されたフォーマットのテクスチャ データを含む配列を保持します。

この配列のサイズは少なくとも (textureDataWidth * textureHeight * textureDepth * texture format color depth in bytes) でなければなりません。

3D テクスチャは 2D サブテクスチャのスタックによって定義されます。各サブテクスチャは同じサイズ (textureDataWidth * textureHeight) である必要があり、スタックの深さはtextureDepth プロパティで定義されます。各2Dテクスチャのデータは、同じフォーマットのQImage データと同じであるため、QImage::bits() を使用して各サブテクスチャのデータを供給できます。

新しい配列の所有権はQCustom3DVolume インスタンスに移ります。別の配列が設定されると、前の配列は削除されます。同じ配列が再びセットされると、配列の内容が変更されたと見なされ、グラフのレンダリングがトリガーされます。

注: データの各x次元行は32ビット整列されている必要がある。textureFormatQImage::Format_Indexed8 で、textureWidth の値が4で割り切れない場合、data の各x次元行にパディングバイトを追加する必要があるかもしれない。textureDataWidth() 関数は、パディングバイト数を返す。パディングバイトは、レンダリングのアーチファクトを避けるために、完全に透明な色を示す必要があります。

デフォルトは0

アクセス関数:

QList<uchar> *textureData() const
void setTextureData(QList<uchar> *data)

ノーティファイアシグナル:

void textureDataChanged(QList<uchar> *data)

colorTable,setTextureFormat(),setSubTextureData(),textureDataWidth()も参照

textureDepth : int

このプロパティは、ボリューム内容を定義する 3D テクスチャの深さをピクセル単位で保持します。

デフォルトは0 です。

注意: この値を変更した場合、textureData の値のサイズ変更または再作成が必要になる場合があります。デフォルトは0 です。

アクセス関数:

int textureDepth() const
void setTextureDepth(int value)

Notifier シグナル:

void textureDepthChanged(int value)

textureData,textureWidth,textureHeight,setTextureFormat()も参照

textureHeight : int

このプロパティは、ボリューム内容を定義する 3D テクスチャの高さをピクセル単位で保持します。

デフォルトは0 です。

注意: この値を変更した場合、textureData の値のサイズ変更または再作成が必要になる場合があります。デフォルトは0 です。

アクセス関数:

int textureHeight() const
void setTextureHeight(int value)

Notifier シグナル:

void textureHeightChanged(int value)

textureDatatextureWidthtextureDepthsetTextureFormat)も参照

textureWidth : int

このプロパティは、ボリューム内容を定義する 3D テクスチャの幅をピクセル単位で保持します。

デフォルトは0 です。

注意: この値を変更した場合、textureData の値のサイズ変更または再作成が必要になる場合があります。デフォルトは0 です。

アクセス関数:

int textureWidth() const
void setTextureWidth(int value)

Notifier シグナル:

void textureWidthChanged(int value)

textureDatatextureHeighttextureDepthsetTextureFormat ()、textureDataWidth)も参照の こと。

useHighDefShader : bool

このプロパティは、ボリュームのレンダリングに高精細シェーダーを使用するか、低精細シェーダーを使用するかを保持します。

このプロパティ値がtrue の場合、高解像度シェーダが使用されます。false の場合、低解像度シェーダが使用されます。

高解像度シェーダは、ボリュームのレンダリング時にボリュームテクスチャのすべての可視テクセルがサンプリングされることを保証します。低精細度シェーダはボリュームの内容の大まかな近似だけをレンダリング しますが、フレームレートはずっと高くなります。低解像度シェーダはボリュームテクスチャのすべてのテクセルがサンプリングされることを保証しないため、ボリュームに明瞭な薄い特徴がある場合、ちらつきが発生する可能性があります。

注意: この値は、ボリュームのスライスをレンダリングする際の詳細レベルには影響しません。

デフォルトはtrue です。

アクセス関数:

bool useHighDefShader() const
void setUseHighDefShader(bool enable)

通知シグナル:

void useHighDefShaderChanged(bool enabled)

renderSlice()も参照

メンバ関数ドキュメント

[explicit] QCustom3DVolume::QCustom3DVolume(QObject *parent = nullptr)

与えられたparent でカスタム3Dボリュームを構築します。

[explicit] QCustom3DVolume::QCustom3DVolume(QVector3D position, QVector3D scaling, const QQuaternion &rotation, int textureWidth, int textureHeight, int textureDepth, QList<uchar> *textureData, QImage::Format textureFormat, const QList<QRgb> &colorTable, QObject *parent = nullptr)

与えられたposition,scaling,rotation,textureWidth,textureHeight,textureDepth,textureData,textureFormat,colorTable, およびオプションのparent でカスタム3Dボリュームを構築する。

textureData,setTextureFormat(),colorTableも参照してください

[override virtual noexcept] 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)

axis で指定された軸に沿ってindex で指定されたスライスを画像にレンダリングします。このオブジェクトのテクスチャフォーマットが使用されます。

スライスのレンダリング画像、または無効なインデックスが指定された場合は null 画像を返します。

setTextureFormat()も参照してください

void QCustom3DVolume::setSliceIndices(int x, int y, int z)

3つのスライスインデックス (x,y,z) を一度に設定するための便利な関数です。

textureDataも参照して ください。

void QCustom3DVolume::setSubTextureData(Qt::Axis axis, int index, const QImage &image)

ボリュームの指定されたaxis に沿って、3D テクスチャの単一の 2D サブテクスチャを設定します。index パラメータは、設定するサブテクスチャを指定します。textureFormat がインデックス化されている場合、ソースimagetextureFormat プロパティで指定されたフォーマットである必要があります。textureFormatQImage::Format_ARGB32 の場合、画像はそのフォーマットに変換されます。画像は、指定された軸に沿ったボリュームテクスチャの断面のサイズを持っている必要があります。画像の向きは、同じ軸に沿ってrenderSlice() メソッドで生成されたスライス画像の向きに対応する必要があります。

注意: y軸またはz軸をターゲットとする場合、データの各x次元の行は32ビット整列されている必要があります。textureFormatQImage::Format_Indexed8 で、textureWidth の値が4で割り切れない場合、適切に整列させるために、画像の各x次元行にパディングバイトを追加する必要があるかもしれません。パディングバイトは、レンダリングアーチファクトを避けるため、完全に透明な色を示す必要があります。QImage が自動的にこれを行うことは保証されていない。

textureData およびrenderSlice()も参照して ください。

void QCustom3DVolume::setSubTextureData(Qt::Axis axis, int index, const uchar *data)

ボリュームの指定されたaxis に沿って、3D テクスチャの単一の 2D サブテクスチャを設定します。index パラメータは、設定するサブテクスチャを指定します。テクスチャdata は、textureFormat プロパティによって指定されたフォーマットでなければならず、指定された軸に沿ったボリュームテクスチャの断面のサイズに、テクスチャフォーマットの色深度をバイト単位で乗算したサイズを持たなければなりません。data は、同じ軸に沿ってrenderSlice() メソッドによって生成されるイメージのデータと同様に順序付けられることが期待される。

注意: y軸またはz軸をターゲットにする場合、データの各x次元の行は32ビット整列する必要があります。textureFormatQImage::Format_Indexed8 で、textureWidth の値が4で割り切れない場合、data の各x次元行にパディングバイトを追加して適切に整列させる必要があるかもしれない。パディングバイトは、レンダリングアーチファクトを避けるために、完全に透明な色を示すべきである。

textureData およびrenderSlice()も参照してください

void QCustom3DVolume::setTextureDimensions(int width, int height, int depth)

3つのテクスチャ寸法 (width,height,depth) を一度に設定するための便利な関数。

textureDataも参照して ください。

void QCustom3DVolume::setTextureFormat(QImage::Format format)

textureData プロパティのフォーマットをformat に設定します。現在サポー ト さ れてい る 形式は、QImage::Format_Indexed8QImage::Format_ARGB32 の 2 つだけです。 イ ンデ ッ ク ス形式が指定 さ れてい る 場合は、colorTable も設定する必要があ り ます。デフォルトはQImage::Format_ARGB32 です。

textureFormat()、colorTable 、およびtextureDataも参照してください

int QCustom3DVolume::textureDataWidth() const

実際のテクスチャデータ幅を返します。テクスチャフォーマットがQImage::Format_Indexed8 の場合、この値は 32 ビット境界にアライメントされたtextureWidth と等しくなります。それ以外の場合、この値はtextureWidth の 4 倍に等しくなります。

QImage::Format QCustom3DVolume::textureFormat() const

textureData プロパティ値のフォーマットを返します。

setTextureFormat()も参照

[signal] void QCustom3DVolume::textureFormatChanged(QImage::Format format)

このシグナルは、textureData の値のformat が変更されたときに発せられる。

setTextureFormat() も参照して ください。

©2024The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。