summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2014-09-12 11:27:24 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2014-09-12 12:15:02 +0300
commite5f6ab99b413ad9b8481ad923c5a4a5bc6513ff2 (patch)
tree85fd24fe13281b882e989a5f6826bc3cdad41446 /examples
parentddb9be979d93b7e17f1067dc6056de54d9828b29 (diff)
Implement volume slice frames
Change-Id: I409f3c95892b26ca6097dd4509109fc9978b9900 Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'examples')
-rw-r--r--examples/datavisualization/volumetric/main.cpp9
-rw-r--r--examples/datavisualization/volumetric/volumetric.cpp47
-rw-r--r--examples/datavisualization/volumetric/volumetric.h5
3 files changed, 54 insertions, 7 deletions
diff --git a/examples/datavisualization/volumetric/main.cpp b/examples/datavisualization/volumetric/main.cpp
index 98330396..faf379ec 100644
--- a/examples/datavisualization/volumetric/main.cpp
+++ b/examples/datavisualization/volumetric/main.cpp
@@ -168,6 +168,10 @@ int main(int argc, char **argv)
"Note: A high end graphics card is\nrecommended with the HD shader\nwhen the volume contains a lot of\ntransparent areas."));
performanceNoteLabel->setFrameShape(QFrame::Box);
+ QCheckBox *drawSliceFramesCheckBox = new QCheckBox(widget);
+ drawSliceFramesCheckBox->setText(QStringLiteral("Draw slice frames"));
+ drawSliceFramesCheckBox->setChecked(false);
+
vLayout->addWidget(sliceXCheckBox);
vLayout->addWidget(sliceXSlider);
vLayout->addWidget(sliceImageXLabel);
@@ -176,7 +180,8 @@ int main(int argc, char **argv)
vLayout->addWidget(sliceImageYLabel);
vLayout->addWidget(sliceZCheckBox);
vLayout->addWidget(sliceZSlider);
- vLayout->addWidget(sliceImageZLabel, 1, Qt::AlignTop);
+ vLayout->addWidget(sliceImageZLabel);
+ vLayout->addWidget(drawSliceFramesCheckBox, 1, Qt::AlignTop);
vLayout2->addWidget(fpsCheckBox);
vLayout2->addWidget(fpsLabel);
vLayout2->addWidget(textureDetailGroupBox);
@@ -234,6 +239,8 @@ int main(int argc, char **argv)
&VolumetricModifier::toggleAreaMine);
QObject::connect(areaMountainRB, &QRadioButton::toggled, modifier,
&VolumetricModifier::toggleAreaMountain);
+ QObject::connect(drawSliceFramesCheckBox, &QCheckBox::stateChanged, modifier,
+ &VolumetricModifier::setDrawSliceFrames);
widget->show();
return app.exec();
diff --git a/examples/datavisualization/volumetric/volumetric.cpp b/examples/datavisualization/volumetric/volumetric.cpp
index 54e930d2..80df4bd5 100644
--- a/examples/datavisualization/volumetric/volumetric.cpp
+++ b/examples/datavisualization/volumetric/volumetric.cpp
@@ -58,6 +58,9 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
m_sliceIndexX(lowDetailSize / 2),
m_sliceIndexY(lowDetailSize / 4),
m_sliceIndexZ(lowDetailSize / 2),
+ m_slicingX(false),
+ m_slicingY(false),
+ m_slicingZ(false),
m_mediumDetailRB(0),
m_highDetailRB(0),
m_lowDetailData(0),
@@ -79,6 +82,7 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualityNone);
m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront);
m_graph->setOrthoProjection(true);
+ m_graph->activeTheme()->setBackgroundEnabled(false);
toggleAreaAll(true);
@@ -162,6 +166,12 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
m_volumeItem->setColorTable(m_colorTable1);
+ m_volumeItem->setSliceFrameGaps(QVector3D(0.01f, 0.02f, 0.01f));
+ m_volumeItem->setSliceFrameThicknesses(QVector3D(0.0025f, 0.005f, 0.0025f));
+ m_volumeItem->setSliceFrameWidths(QVector3D(0.0025f, 0.005f, 0.0025f));
+ m_volumeItem->setDrawSliceFrames(false);
+ handleSlicingChanges();
+
m_graph->addCustomItem(m_volumeItem);
m_timer.start(0);
@@ -226,20 +236,20 @@ void VolumetricModifier::setAlphaMultiplierLabel(QLabel *label)
void VolumetricModifier::sliceX(int enabled)
{
- if (m_volumeItem)
- m_volumeItem->setSliceIndexX(enabled ? m_sliceIndexX : -1);
+ m_slicingX = enabled;
+ handleSlicingChanges();
}
void VolumetricModifier::sliceY(int enabled)
{
- if (m_volumeItem)
- m_volumeItem->setSliceIndexY(enabled ? m_sliceIndexY : -1);
+ m_slicingY = enabled;
+ handleSlicingChanges();
}
void VolumetricModifier::sliceZ(int enabled)
{
- if (m_volumeItem)
- m_volumeItem->setSliceIndexZ(enabled ? m_sliceIndexZ : -1);
+ m_slicingZ = enabled;
+ handleSlicingChanges();
}
void VolumetricModifier::adjustSliceX(int value)
@@ -482,6 +492,12 @@ void VolumetricModifier::toggleAreaMountain(bool enabled)
}
}
+void VolumetricModifier::setDrawSliceFrames(int enabled)
+{
+ if (m_volumeItem)
+ m_volumeItem->setDrawSliceFrames(enabled);
+}
+
void VolumetricModifier::initHeightMap(QString fileName, QVector<uchar> &layerData)
{
QImage heightImage(fileName);
@@ -607,6 +623,25 @@ void VolumetricModifier::excavateMineBlock(int textureSize, int dataIndex, int s
}
}
+void VolumetricModifier::handleSlicingChanges()
+{
+ if (m_volumeItem) {
+ if (m_slicingX || m_slicingY || m_slicingZ) {
+ // Only show slices of selected dimensions
+ m_volumeItem->setDrawSlices(true);
+ m_volumeItem->setSliceIndexX(m_slicingX ? m_sliceIndexX : -1);
+ m_volumeItem->setSliceIndexY(m_slicingY ? m_sliceIndexY : -1);
+ m_volumeItem->setSliceIndexZ(m_slicingZ ? m_sliceIndexZ : -1);
+ } else {
+ // Show slice frames for all dimenstions when not actually slicing
+ m_volumeItem->setDrawSlices(false);
+ m_volumeItem->setSliceIndexX(m_sliceIndexX);
+ m_volumeItem->setSliceIndexY(m_sliceIndexY);
+ m_volumeItem->setSliceIndexZ(m_sliceIndexZ);
+ }
+ }
+}
+
void VolumetricModifier::initMineShaftArray()
{
m_mineShaftArray << QPair<QVector3D, QVector3D>(QVector3D(0.7f, 0.1f, 0.7f),
diff --git a/examples/datavisualization/volumetric/volumetric.h b/examples/datavisualization/volumetric/volumetric.h
index 180686fb..7a4e7179 100644
--- a/examples/datavisualization/volumetric/volumetric.h
+++ b/examples/datavisualization/volumetric/volumetric.h
@@ -66,6 +66,7 @@ public slots:
void toggleAreaAll(bool enabled);
void toggleAreaMine(bool enabled);
void toggleAreaMountain(bool enabled);
+ void setDrawSliceFrames(int enabled);
private:
@@ -76,12 +77,16 @@ private:
int excavateMineShaft(int textureSize, int startIndex, int count,
QVector<uchar> *textureData);
void excavateMineBlock(int textureSize, int dataIndex, int size, QVector<uchar> *textureData);
+ void handleSlicingChanges();
Q3DScatter *m_graph;
QCustom3DVolume *m_volumeItem;
int m_sliceIndexX;
int m_sliceIndexY;
int m_sliceIndexZ;
+ bool m_slicingX;
+ bool m_slicingY;
+ bool m_slicingZ;
QLabel *m_fpsLabel;
QRadioButton *m_mediumDetailRB;
QRadioButton *m_highDetailRB;