summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/volumetrictest/main.cpp34
-rw-r--r--tests/volumetrictest/volumetrictest.cpp89
-rw-r--r--tests/volumetrictest/volumetrictest.h4
3 files changed, 114 insertions, 13 deletions
diff --git a/tests/volumetrictest/main.cpp b/tests/volumetrictest/main.cpp
index ba5ba6d3..02f67d6c 100644
--- a/tests/volumetrictest/main.cpp
+++ b/tests/volumetrictest/main.cpp
@@ -97,6 +97,27 @@ int main(int argc, char **argv)
QPushButton *testSubTextureSetting = new QPushButton(widget);
testSubTextureSetting->setText(QStringLiteral("Test subtexture settings"));
+ QLabel *rangeSliderLabel = new QLabel(QStringLiteral("Adjust ranges:"), widget);
+
+ QSlider *rangeXSlider = new QSlider(Qt::Horizontal, widget);
+ rangeXSlider->setMinimum(0);
+ rangeXSlider->setMaximum(1024);
+ rangeXSlider->setValue(512);
+ rangeXSlider->setEnabled(true);
+ QSlider *rangeYSlider = new QSlider(Qt::Horizontal, widget);
+ rangeYSlider->setMinimum(0);
+ rangeYSlider->setMaximum(1024);
+ rangeYSlider->setValue(512);
+ rangeYSlider->setEnabled(true);
+ QSlider *rangeZSlider = new QSlider(Qt::Horizontal, widget);
+ rangeZSlider->setMinimum(0);
+ rangeZSlider->setMaximum(1024);
+ rangeZSlider->setValue(512);
+ rangeZSlider->setEnabled(true);
+
+ QPushButton *testBoundsSetting = new QPushButton(widget);
+ testBoundsSetting->setText(QStringLiteral("Test data bounds"));
+
vLayout->addWidget(fpsLabel);
vLayout->addWidget(sliceXCheckBox);
vLayout->addWidget(sliceXSlider);
@@ -107,6 +128,11 @@ int main(int argc, char **argv)
vLayout->addWidget(sliceZCheckBox);
vLayout->addWidget(sliceZSlider);
vLayout->addWidget(sliceImageZLabel);
+ vLayout->addWidget(rangeSliderLabel);
+ vLayout->addWidget(rangeXSlider);
+ vLayout->addWidget(rangeYSlider);
+ vLayout->addWidget(rangeZSlider);
+ vLayout->addWidget(testBoundsSetting);
vLayout->addWidget(testSubTextureSetting, 1, Qt::AlignTop);
VolumetricModifier *modifier = new VolumetricModifier(graph);
@@ -127,6 +153,14 @@ int main(int argc, char **argv)
&VolumetricModifier::adjustSliceZ);
QObject::connect(testSubTextureSetting, &QPushButton::clicked, modifier,
&VolumetricModifier::testSubtextureSetting);
+ QObject::connect(rangeXSlider, &QSlider::valueChanged, modifier,
+ &VolumetricModifier::adjustRangeX);
+ QObject::connect(rangeYSlider, &QSlider::valueChanged, modifier,
+ &VolumetricModifier::adjustRangeY);
+ QObject::connect(rangeZSlider, &QSlider::valueChanged, modifier,
+ &VolumetricModifier::adjustRangeZ);
+ QObject::connect(testBoundsSetting, &QPushButton::clicked, modifier,
+ &VolumetricModifier::testBoundsSetting);
widget->show();
return app.exec();
diff --git a/tests/volumetrictest/volumetrictest.cpp b/tests/volumetrictest/volumetrictest.cpp
index 555cc286..6d7da021 100644
--- a/tests/volumetrictest/volumetrictest.cpp
+++ b/tests/volumetrictest/volumetrictest.cpp
@@ -31,6 +31,12 @@
using namespace QtDataVisualization;
const int imageCount = 512;
+const float xMiddle = 10.0f;
+const float yMiddle = 12.5f;
+const float zMiddle = -40.0f;
+const float xRange = 40.0f;
+const float yRange = 7.5f;
+const float zRange = 20.0f;
VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
: m_graph(scatter),
@@ -47,6 +53,12 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront);
m_graph->setOrthoProjection(true);
//m_graph->scene()->activeCamera()->setTarget(QVector3D(0.5f, 0.5f, 0.5f));
+ m_graph->axisX()->setRange(xMiddle - xRange, xMiddle + xRange);
+ m_graph->axisX()->setSegmentCount(8);
+ m_graph->axisY()->setRange(yMiddle - yRange, yMiddle + yRange);
+ m_graph->axisY()->setSegmentCount(3);
+ m_graph->axisZ()->setRange(zMiddle - zRange, zMiddle + zRange);
+ m_graph->axisZ()->setSegmentCount(8);
createVolume();
createAnotherVolume();
@@ -55,6 +67,13 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
// m_volumeItem->setUseHighDefShader(false);
// m_volumeItem2->setUseHighDefShader(false);
// m_volumeItem3->setUseHighDefShader(false);
+ m_volumeItem->setScalingAbsolute(false);
+ m_volumeItem2->setScalingAbsolute(false);
+ m_volumeItem3->setScalingAbsolute(false);
+ m_volumeItem->setPositionAbsolute(false);
+ m_volumeItem2->setPositionAbsolute(false);
+ m_volumeItem3->setPositionAbsolute(false);
+
m_plainItem = new QCustom3DItem;
QImage texture(2, 2, QImage::Format_ARGB32);
@@ -62,8 +81,9 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
m_plainItem->setMeshFile(QStringLiteral(":/mesh"));
m_plainItem->setTextureImage(texture);
m_plainItem->setRotation(m_volumeItem->rotation());
- m_plainItem->setPosition(m_volumeItem->position() + QVector3D(0.8f, 0.0f, 0.0f));
- m_plainItem->setScaling(m_volumeItem->scaling());
+ m_plainItem->setPosition(QVector3D(30.0f, 17.5f, -30.0f));
+ m_plainItem->setScaling(QVector3D(20.0f, 5.0f, 10.0f));
+ m_plainItem->setScalingAbsolute(false);
m_graph->addCustomItem(m_volumeItem);
m_graph->addCustomItem(m_volumeItem2);
@@ -80,7 +100,9 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
label->setScaling(QVector3D(2.0f, 2.0f, 0.0f));
label->setRotationAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), 45.0f);
label->setPosition(m_volumeItem3->position());
- label->setPositionAbsolute(true);
+ label->setPositionAbsolute(false);
+ label->setScalingAbsolute(true);
+
m_graph->addCustomItem(label);
QObject::connect(m_graph, &QAbstract3DGraph::currentFpsChanged, this,
@@ -218,6 +240,50 @@ void VolumetricModifier::testSubtextureSetting()
m_volumeItem3->setSubTextureData(Qt::ZAxis, 190, slice);
}
+void VolumetricModifier::adjustRangeX(int value)
+{
+ float adjustment = float(value - 512) / 10.0f;
+ m_graph->axisX()->setRange(xMiddle + adjustment - xRange, xMiddle + adjustment + xRange);
+}
+
+void VolumetricModifier::adjustRangeY(int value)
+{
+ float adjustment = float(value - 512) / 10.0f;
+ m_graph->axisY()->setRange(yMiddle + adjustment - yRange, yMiddle + adjustment + yRange);
+}
+
+void VolumetricModifier::adjustRangeZ(int value)
+{
+ float adjustment = float(value - 512) / 10.0f;
+ m_graph->axisZ()->setRange(zMiddle + adjustment - zRange, zMiddle + adjustment + zRange);
+}
+
+void VolumetricModifier::testBoundsSetting()
+{
+ static QVector3D scaling1 = m_volumeItem->scaling();
+ static QVector3D scaling2 = m_volumeItem2->scaling();
+ static QVector3D scaling3 = m_volumeItem3->scaling();
+ static QVector3D scaleVector = QVector3D(0.5f, 0.3f, 0.2f);
+
+ if (m_volumeItem->isScalingAbsolute()) {
+ m_volumeItem->setScalingAbsolute(false);
+ m_volumeItem2->setScalingAbsolute(false);
+ m_volumeItem3->setScalingAbsolute(false);
+
+ m_volumeItem->setScaling(scaling1);
+ m_volumeItem2->setScaling(scaling2);
+ m_volumeItem3->setScaling(scaling3);
+ } else {
+ m_volumeItem->setScalingAbsolute(true);
+ m_volumeItem2->setScalingAbsolute(true);
+ m_volumeItem3->setScalingAbsolute(true);
+
+ m_volumeItem->setScaling(scaleVector);
+ m_volumeItem2->setScaling(scaleVector);
+ m_volumeItem3->setScaling(scaleVector);
+ }
+}
+
void VolumetricModifier::checkRenderCase(int id, Qt::Axis axis, int index,
const QVector<uchar> &dataBefore,
QCustom3DVolume *volumeItem)
@@ -236,7 +302,7 @@ void VolumetricModifier::createVolume()
m_volumeItem = new QCustom3DVolume;
m_volumeItem->setTextureFormat(QImage::Format_ARGB32);
// m_volumeItem->setRotation(QQuaternion::fromAxisAndAngle(1.0f, 1.0f, 0.0f, 10.0f));
- m_volumeItem->setPosition(QVector3D(-0.5f, 0.6f, 0.0f));
+ m_volumeItem->setPosition(QVector3D(xMiddle - (xRange / 2.0f), yMiddle + (yRange / 2.0f), zMiddle));
QImage logo;
logo.load(QStringLiteral(":/logo_no_padding.png"));
@@ -284,10 +350,7 @@ void VolumetricModifier::createVolume()
int depth = m_volumeItem->textureDepth();
int frameSize = width * height;
qDebug() << width << height << depth << m_volumeItem->textureData()->size();
-// m_volumeItem->setScaling(QVector3D(float(width) / float(depth) * 2.0f,
-// float(height) / float(depth) * 2.0f,
-// 2.0f));
- m_volumeItem->setScaling(QVector3D(0.4f, 0.4f, 0.4f));
+ m_volumeItem->setScaling(QVector3D(xRange, yRange, zRange) / 2.0f);
uchar *data = m_volumeItem->textureData()->data();
uchar *p = data;
@@ -389,7 +452,7 @@ void VolumetricModifier::createAnotherVolume()
{
m_volumeItem2 = new QCustom3DVolume;
m_volumeItem2->setTextureFormat(QImage::Format_ARGB32);
- m_volumeItem2->setPosition(QVector3D(0.5f, -0.5f, 0.0f));
+ m_volumeItem2->setPosition(QVector3D(xMiddle + (xRange / 2.0f), yMiddle - (yRange / 2.0f), zMiddle));
QImage logo;
logo.load(QStringLiteral(":/logo_no_padding.png"));
@@ -417,9 +480,9 @@ void VolumetricModifier::createAnotherVolume()
int height = m_volumeItem2->textureHeight();
int depth = m_volumeItem2->textureDepth();
qDebug() << width << height << depth << m_volumeItem2->textureData()->size();
- m_volumeItem2->setScaling(QVector3D(float(width) / float(depth) * 2.0f,
- float(height) / float(depth) * 2.0f,
- 2.0f));
+ m_volumeItem2->setScaling(QVector3D(float(width) / float(depth) * xRange * 2.0f,
+ float(height) / float(depth) * yRange * 2.0f,
+ zRange * 2.0f));
// Change one picture using subtexture replacement
QImage flipped = logo.mirrored();
@@ -433,7 +496,7 @@ void VolumetricModifier::createYetAnotherVolume()
m_volumeItem3 = new QCustom3DVolume;
m_volumeItem3->setTextureFormat(QImage::Format_Indexed8);
// m_volumeItem2->setRotation(QQuaternion::fromAxisAndAngle(1.0f, 1.0f, 0.0f, 10.0f));
- m_volumeItem3->setPosition(QVector3D(-0.5f, -0.6f, 0.0f));
+ m_volumeItem3->setPosition(QVector3D(xMiddle - (xRange / 2.0f), yMiddle - (yRange / 2.0f), zMiddle));
// m_volumeItem3->setTextureDimensions(m_volumeItem->textureDataWidth(),
// m_volumeItem->textureHeight(),
diff --git a/tests/volumetrictest/volumetrictest.h b/tests/volumetrictest/volumetrictest.h
index b1b98455..48c805d4 100644
--- a/tests/volumetrictest/volumetrictest.h
+++ b/tests/volumetrictest/volumetrictest.h
@@ -46,6 +46,10 @@ public slots:
void adjustSliceZ(int value);
void handleFpsChange();
void testSubtextureSetting();
+ void adjustRangeX(int value);
+ void adjustRangeY(int value);
+ void adjustRangeZ(int value);
+ void testBoundsSetting();
private:
void createVolume();