diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/volumetrictest/main.cpp | 34 | ||||
-rw-r--r-- | tests/volumetrictest/volumetrictest.cpp | 89 | ||||
-rw-r--r-- | tests/volumetrictest/volumetrictest.h | 4 |
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(); |