summaryrefslogtreecommitdiffstats
path: root/examples/datavisualization/volumetric/volumetric.cpp
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2014-09-12 13:37:27 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2014-09-15 09:40:41 +0300
commit637fd9964133c4e60d9ffad32cf5307836397aad (patch)
tree00912c5ec78db287099fa8658ef0fc65159c726b /examples/datavisualization/volumetric/volumetric.cpp
parente5f6ab99b413ad9b8481ad923c5a4a5bc6513ff2 (diff)
Documentation for volumetric example
Change-Id: Ibf613607b55e5ed0b56354d5da426870624d79ad Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'examples/datavisualization/volumetric/volumetric.cpp')
-rw-r--r--examples/datavisualization/volumetric/volumetric.cpp39
1 files changed, 32 insertions, 7 deletions
diff --git a/examples/datavisualization/volumetric/volumetric.cpp b/examples/datavisualization/volumetric/volumetric.cpp
index 80df4bd5..6672d964 100644
--- a/examples/datavisualization/volumetric/volumetric.cpp
+++ b/examples/datavisualization/volumetric/volumetric.cpp
@@ -81,7 +81,9 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
m_graph->activeTheme()->setType(Q3DTheme::ThemeQt);
m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualityNone);
m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront);
+ //! [6]
m_graph->setOrthoProjection(true);
+ //! [6]
m_graph->activeTheme()->setBackgroundEnabled(false);
toggleAreaAll(true);
@@ -100,6 +102,7 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
createVolume(lowDetailSize, 0, lowDetailSize, m_lowDetailData);
excavateMineShaft(lowDetailSize, 0, m_mineShaftArray.size(), m_lowDetailData);
+ //! [0]
m_volumeItem = new QCustom3DVolume;
// Adjust water level to zero with a minor tweak to y-coordinate position and scaling
m_volumeItem->setScaling(
@@ -112,11 +115,14 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
(m_graph->axisY()->max() + m_graph->axisY()->min()) / 2.0f,
(m_graph->axisZ()->max() + m_graph->axisZ()->min()) / 2.0f));
m_volumeItem->setScalingAbsolute(false);
+ //! [0]
+ //! [1]
m_volumeItem->setTextureWidth(lowDetailSize);
m_volumeItem->setTextureHeight(lowDetailSize / 2);
m_volumeItem->setTextureDepth(lowDetailSize);
m_volumeItem->setTextureFormat(QImage::Format_Indexed8);
m_volumeItem->setTextureData(new QVector<uchar>(*m_lowDetailData));
+ //! [1]
// Generate color tables.
m_colorTable1.resize(colorTableSize);
@@ -164,15 +170,21 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
m_colorTable2[airColorIndex] = qRgba(0, 0, 0, 0);
m_colorTable2[mineShaftColorIndex] = qRgba(255, 255, 0, 255);
+ //! [2]
m_volumeItem->setColorTable(m_colorTable1);
+ //! [2]
+ //! [5]
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);
+ //! [5]
handleSlicingChanges();
+ //! [3]
m_graph->addCustomItem(m_volumeItem);
+ //! [3]
m_timer.start(0);
#else
@@ -259,9 +271,13 @@ void VolumetricModifier::adjustSliceX(int value)
m_sliceIndexX--;
if (m_volumeItem) {
if (m_volumeItem->sliceIndexX() != -1)
+ //! [7]
m_volumeItem->setSliceIndexX(m_sliceIndexX);
- m_sliceLabelX->setPixmap(QPixmap::fromImage(
- m_volumeItem->renderSlice(Qt::XAxis, m_sliceIndexX)));
+ //! [7]
+ //! [9]
+ m_sliceLabelX->setPixmap(
+ QPixmap::fromImage(m_volumeItem->renderSlice(Qt::XAxis, m_sliceIndexX)));
+ //! [9]
}
}
@@ -273,8 +289,8 @@ void VolumetricModifier::adjustSliceY(int value)
if (m_volumeItem) {
if (m_volumeItem->sliceIndexY() != -1)
m_volumeItem->setSliceIndexY(m_sliceIndexY);
- m_sliceLabelY->setPixmap(QPixmap::fromImage(
- m_volumeItem->renderSlice(Qt::YAxis, m_sliceIndexY)));
+ m_sliceLabelY->setPixmap(
+ QPixmap::fromImage(m_volumeItem->renderSlice(Qt::YAxis, m_sliceIndexY)));
}
}
@@ -286,8 +302,8 @@ void VolumetricModifier::adjustSliceZ(int value)
if (m_volumeItem) {
if (m_volumeItem->sliceIndexZ() != -1)
m_volumeItem->setSliceIndexZ(m_sliceIndexZ);
- m_sliceLabelZ->setPixmap(QPixmap::fromImage(
- m_volumeItem->renderSlice(Qt::ZAxis, m_sliceIndexZ)));
+ m_sliceLabelZ->setPixmap(
+ QPixmap::fromImage(m_volumeItem->renderSlice(Qt::ZAxis, m_sliceIndexZ)));
}
}
@@ -406,7 +422,9 @@ void VolumetricModifier::changeColorTable(int enabled)
void VolumetricModifier::setPreserveOpacity(bool enabled)
{
+ //! [10]
m_volumeItem->setPreserveOpacity(enabled);
+ //! [10]
// Rerender image labels
adjustSliceX(m_sliceSliderX->value());
@@ -416,6 +434,7 @@ void VolumetricModifier::setPreserveOpacity(bool enabled)
void VolumetricModifier::setTransparentGround(bool enabled)
{
+ //! [12]
int newAlpha = enabled ? terrainTransparency : 255;
for (int i = aboveWaterGroundColorsMin; i < underWaterGroundColorsMax; i++) {
QRgb oldColor1 = m_colorTable1.at(i);
@@ -427,7 +446,7 @@ void VolumetricModifier::setTransparentGround(bool enabled)
m_volumeItem->setColorTable(m_colorTable1);
else
m_volumeItem->setColorTable(m_colorTable2);
-
+ //! [12]
adjustSliceX(m_sliceSliderX->value());
adjustSliceY(m_sliceSliderY->value());
adjustSliceZ(m_sliceSliderZ->value());
@@ -435,7 +454,9 @@ void VolumetricModifier::setTransparentGround(bool enabled)
void VolumetricModifier::setUseHighDefShader(bool enabled)
{
+ //! [13]
m_volumeItem->setUseHighDefShader(enabled);
+ //! [13]
}
void VolumetricModifier::adjustAlphaMultiplier(int value)
@@ -445,7 +466,9 @@ void VolumetricModifier::adjustAlphaMultiplier(int value)
mult = float(value - 99) / 2.0f;
else
mult = float(value) / float(500 - value * 4);
+ //! [11]
m_volumeItem->setAlphaMultiplier(mult);
+ //! [11]
QString labelFormat = QStringLiteral("Alpha multiplier: %1");
m_alphaMultiplierLabel->setText(labelFormat.arg(
QString::number(m_volumeItem->alphaMultiplier(), 'f', 3)));
@@ -628,7 +651,9 @@ void VolumetricModifier::handleSlicingChanges()
if (m_volumeItem) {
if (m_slicingX || m_slicingY || m_slicingZ) {
// Only show slices of selected dimensions
+ //! [8]
m_volumeItem->setDrawSlices(true);
+ //! [8]
m_volumeItem->setSliceIndexX(m_slicingX ? m_sliceIndexX : -1);
m_volumeItem->setSliceIndexY(m_slicingY ? m_sliceIndexY : -1);
m_volumeItem->setSliceIndexZ(m_slicingZ ? m_sliceIndexZ : -1);