diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-09-09 11:30:15 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-09-10 12:30:54 +0300 |
commit | ddb9be979d93b7e17f1067dc6056de54d9828b29 (patch) | |
tree | df612c56e4a804481297ae55b29f0ee379c5f8ab /tests | |
parent | bb30ea555c71604de9a2bc5096fa35c9532b26bd (diff) |
Limit volume to axis ranges
The volume object that would go partially outside axis ranges
is scale and repositioned so that it only renders the portion
that is inside the axis ranges.
Change-Id: I792494e437998ba6276f58fab645767276c1476d
Reviewed-by: Mika Salmela <mika.salmela@digia.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/volumetrictest/main.cpp | 5 | ||||
-rw-r--r-- | tests/volumetrictest/volumetrictest.cpp | 90 | ||||
-rw-r--r-- | tests/volumetrictest/volumetrictest.h | 11 |
3 files changed, 86 insertions, 20 deletions
diff --git a/tests/volumetrictest/main.cpp b/tests/volumetrictest/main.cpp index 02f67d6c..7b18ceab 100644 --- a/tests/volumetrictest/main.cpp +++ b/tests/volumetrictest/main.cpp @@ -17,7 +17,6 @@ ****************************************************************************/ #include "volumetrictest.h" - #include <QtWidgets/QApplication> #include <QtWidgets/QWidget> #include <QtWidgets/QHBoxLayout> @@ -32,7 +31,9 @@ int main(int argc, char **argv) { QApplication app(argc, argv); - Q3DScatter *graph = new Q3DScatter(); + //Q3DScatter *graph = new Q3DScatter(); + //Q3DSurface *graph = new Q3DSurface(); + Q3DBars *graph = new Q3DBars(); QWidget *container = QWidget::createWindowContainer(graph); QSize screenSize = graph->screen()->size(); diff --git a/tests/volumetrictest/volumetrictest.cpp b/tests/volumetrictest/volumetrictest.cpp index 6d7da021..a277c8b0 100644 --- a/tests/volumetrictest/volumetrictest.cpp +++ b/tests/volumetrictest/volumetrictest.cpp @@ -17,6 +17,7 @@ ****************************************************************************/ #include "volumetrictest.h" +#include <QtDataVisualization/qbar3dseries.h> #include <QtDataVisualization/qvalue3daxis.h> #include <QtDataVisualization/q3dscene.h> #include <QtDataVisualization/q3dcamera.h> @@ -31,14 +32,14 @@ using namespace QtDataVisualization; const int imageCount = 512; -const float xMiddle = 10.0f; -const float yMiddle = 12.5f; -const float zMiddle = -40.0f; +const float xMiddle = 100.0f; +const float yMiddle = 2.5f; +const float zMiddle = 100.0f; const float xRange = 40.0f; const float yRange = 7.5f; const float zRange = 20.0f; -VolumetricModifier::VolumetricModifier(Q3DScatter *scatter) +VolumetricModifier::VolumetricModifier(QAbstract3DGraph *scatter) : m_graph(scatter), m_volumeItem(0), m_volumeItem2(0), @@ -52,13 +53,55 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter) m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualityNone); 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); + //m_graph->scene()->activeCamera()->setTarget(QVector3D(-2.0f, 1.0f, 2.0f)); + m_scatterGraph = qobject_cast<Q3DScatter *>(m_graph); + m_surfaceGraph = qobject_cast<Q3DSurface *>(m_graph); + m_barGraph = qobject_cast<Q3DBars *>(m_graph); + if (m_scatterGraph) { + m_scatterGraph->axisX()->setRange(xMiddle - xRange, xMiddle + xRange); + m_scatterGraph->axisX()->setSegmentCount(8); + m_scatterGraph->axisY()->setRange(yMiddle - yRange, yMiddle + yRange); + m_scatterGraph->axisY()->setSegmentCount(3); + m_scatterGraph->axisZ()->setRange(zMiddle - zRange, zMiddle + zRange); + m_scatterGraph->axisZ()->setSegmentCount(8); + } else if (m_surfaceGraph) { + m_surfaceGraph->axisX()->setRange(xMiddle - xRange, xMiddle + xRange); + m_surfaceGraph->axisX()->setSegmentCount(8); + m_surfaceGraph->axisY()->setRange(yMiddle - yRange, yMiddle + yRange); + m_surfaceGraph->axisY()->setSegmentCount(3); + m_surfaceGraph->axisZ()->setRange(zMiddle - zRange, zMiddle + zRange); + m_surfaceGraph->axisZ()->setSegmentCount(8); + } else if (m_barGraph) { + QStringList rowLabels; + QStringList columnLabels; + for (int i = 0; i < xMiddle + xRange; i++) { + if (i % 5 == 0) + columnLabels << QString::number(i); + else + columnLabels << QString(); + } + for (int i = 0; i < zMiddle + zRange; i++) { + if (i % 5 == 0) + rowLabels << QString::number(i); + else + rowLabels << QString(); + } + + QBar3DSeries *series = new QBar3DSeries; + QBarDataArray *array = new QBarDataArray(); + array->reserve(zRange * 2 + 1); + for (int i = 0; i < zRange * 2 + 1; i++) + array->append(new QBarDataRow(xRange * 2 + 1)); + + series->dataProxy()->resetArray(array, rowLabels, columnLabels); + m_barGraph->addSeries(series); + + m_barGraph->columnAxis()->setRange(xMiddle - xRange, xMiddle + xRange); + m_barGraph->valueAxis()->setRange(yMiddle - yRange, yMiddle + yRange); + m_barGraph->rowAxis()->setRange(zMiddle - zRange, zMiddle + zRange); + //m_barGraph->setReflection(true); + } + m_graph->activeTheme()->setBackgroundEnabled(false); createVolume(); createAnotherVolume(); @@ -67,6 +110,7 @@ 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); @@ -81,7 +125,7 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter) m_plainItem->setMeshFile(QStringLiteral(":/mesh")); m_plainItem->setTextureImage(texture); m_plainItem->setRotation(m_volumeItem->rotation()); - m_plainItem->setPosition(QVector3D(30.0f, 17.5f, -30.0f)); + m_plainItem->setPosition(QVector3D(xMiddle + xRange / 2.0f, yMiddle + yRange / 2.0f, zMiddle)); m_plainItem->setScaling(QVector3D(20.0f, 5.0f, 10.0f)); m_plainItem->setScalingAbsolute(false); @@ -243,19 +287,34 @@ void VolumetricModifier::testSubtextureSetting() void VolumetricModifier::adjustRangeX(int value) { float adjustment = float(value - 512) / 10.0f; - m_graph->axisX()->setRange(xMiddle + adjustment - xRange, xMiddle + adjustment + xRange); + if (m_scatterGraph) + m_scatterGraph->axisX()->setRange(xMiddle + adjustment - xRange, xMiddle + adjustment + xRange); + if (m_surfaceGraph) + m_surfaceGraph->axisX()->setRange(xMiddle + adjustment - xRange, xMiddle + adjustment + xRange); + if (m_barGraph) + m_barGraph->columnAxis()->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); + if (m_scatterGraph) + m_scatterGraph->axisY()->setRange(yMiddle + adjustment - yRange, yMiddle + adjustment + yRange); + if (m_surfaceGraph) + m_surfaceGraph->axisY()->setRange(yMiddle + adjustment - yRange, yMiddle + adjustment + yRange); + if (m_barGraph) + m_barGraph->valueAxis()->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); + if (m_scatterGraph) + m_scatterGraph->axisZ()->setRange(zMiddle + adjustment - zRange, zMiddle + adjustment + zRange); + if (m_surfaceGraph) + m_surfaceGraph->axisZ()->setRange(zMiddle + adjustment - zRange, zMiddle + adjustment + zRange); + if (m_barGraph) + m_barGraph->rowAxis()->setRange(zMiddle + adjustment - zRange, zMiddle + adjustment + zRange); } void VolumetricModifier::testBoundsSetting() @@ -303,6 +362,7 @@ void VolumetricModifier::createVolume() m_volumeItem->setTextureFormat(QImage::Format_ARGB32); // m_volumeItem->setRotation(QQuaternion::fromAxisAndAngle(1.0f, 1.0f, 0.0f, 10.0f)); m_volumeItem->setPosition(QVector3D(xMiddle - (xRange / 2.0f), yMiddle + (yRange / 2.0f), zMiddle)); + //m_volumeItem->setPosition(QVector3D(xMiddle, yMiddle, zMiddle)); QImage logo; logo.load(QStringLiteral(":/logo_no_padding.png")); diff --git a/tests/volumetrictest/volumetrictest.h b/tests/volumetrictest/volumetrictest.h index 48c805d4..9029f7b9 100644 --- a/tests/volumetrictest/volumetrictest.h +++ b/tests/volumetrictest/volumetrictest.h @@ -19,9 +19,11 @@ #ifndef VOLUMETRICMODIFIER_H #define VOLUMETRICMODIFIER_H -#include <QtDataVisualization/q3dscatter.h> #include <QtDataVisualization/qcustom3dvolume.h> #include <QtDataVisualization/qcustom3ditem.h> +#include <QtDataVisualization/q3dscatter.h> +#include <QtDataVisualization/q3dsurface.h> +#include <QtDataVisualization/q3dbars.h> class QLabel; @@ -31,7 +33,7 @@ class VolumetricModifier : public QObject { Q_OBJECT public: - explicit VolumetricModifier(Q3DScatter *scatter); + explicit VolumetricModifier(QAbstract3DGraph *scatter); ~VolumetricModifier(); void setFpsLabel(QLabel *fpsLabel); @@ -58,7 +60,10 @@ private: void checkRenderCase(int id, Qt::Axis axis, int index, const QVector<uchar> &dataBefore, QCustom3DVolume *volumeItem); - Q3DScatter *m_graph; + QAbstract3DGraph *m_graph; + Q3DScatter *m_scatterGraph; + Q3DSurface *m_surfaceGraph; + Q3DBars *m_barGraph; QCustom3DVolume *m_volumeItem; QCustom3DVolume *m_volumeItem2; QCustom3DVolume *m_volumeItem3; |