summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMika Salmela <mika.salmela@digia.com>2013-12-12 15:02:07 +0200
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2013-12-13 08:18:01 +0200
commit132502c16e8ccb6d6fc627e2b5f6f89838d88c8e (patch)
tree03ffd9e3721f435f99ec30cb90b4b77523076aea
parentbe2532151087d48802836bea0cb5a5658cf3492a (diff)
Control for surface visibility features
Task-number: QTRD-2628 Change-Id: Ic03e2a71231665c478a918044ebd3e5b2d22b445 Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
-rw-r--r--examples/qmlsurface/qml/qmlsurface/main.qml28
-rw-r--r--examples/surface/surfacegraph.cpp4
-rw-r--r--src/datavisualization/data/qsurface3dseries.cpp35
-rw-r--r--src/datavisualization/data/qsurface3dseries.h15
-rw-r--r--src/datavisualization/data/qsurface3dseries_p.h4
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp18
-rw-r--r--tests/surfacetest/graphmodifier.cpp20
-rw-r--r--tests/surfacetest/graphmodifier.h2
-rw-r--r--tests/surfacetest/main.cpp7
9 files changed, 92 insertions, 41 deletions
diff --git a/examples/qmlsurface/qml/qmlsurface/main.qml b/examples/qmlsurface/qml/qmlsurface/main.qml
index 03393c05..3b46446f 100644
--- a/examples/qmlsurface/qml/qmlsurface/main.qml
+++ b/examples/qmlsurface/qml/qmlsurface/main.qml
@@ -74,7 +74,7 @@ Item {
Surface3DSeries {
id: surfaceSeries
flatShadingEnabled: false
- surfaceGridEnabled: false
+ drawMode: Surface3DSeries.DrawSurface
ItemModelSurfaceDataProxy {
itemModel: surfaceData.model
@@ -94,7 +94,7 @@ Item {
Surface3DSeries {
id: heightSeries
flatShadingEnabled: false
- surfaceGridEnabled: false
+ drawMode: Surface3DSeries.DrawSurface
HeightMapSurfaceDataProxy {
heightMapFile: ":/heightmaps/image"
@@ -114,14 +114,14 @@ Item {
text: "Show Surface Grid"
//! [1]
onClicked: {
- if (surfaceSeries.surfaceGridEnabled === false) {
- surfaceSeries.surfaceGridEnabled = true;
- heightSeries.surfaceGridEnabled = true;
- text = "Hide Surface Grid"
- } else {
- surfaceSeries.surfaceGridEnabled = false;
- heightSeries.surfaceGridEnabled = false;
+ if (surfaceSeries.drawMode & Surface3DSeries.DrawWireframe) {
+ surfaceSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
+ heightSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
text = "Show Surface Grid"
+ } else {
+ surfaceSeries.drawMode |= Surface3DSeries.DrawWireframe;
+ heightSeries.drawMode |= Surface3DSeries.DrawWireframe;
+ text = "Hide Surface Grid"
}
}
//! [1]
@@ -133,13 +133,13 @@ Item {
width: surfaceGridToggle.width
text: "Hide Surface"
onClicked: {
- if (surfaceSeries.visible === true) {
- surfaceSeries.visible = false;
- heightSeries.visible = false;
+ if (surfaceSeries.drawMode & Surface3DSeries.DrawSurface) {
+ surfaceSeries.drawMode &= ~Surface3DSeries.DrawSurface;
+ heightSeries.drawMode &= ~Surface3DSeries.DrawSurface;
text = "Show Surface"
} else {
- surfaceSeries.visible = true;
- heightSeries.visible = true;
+ surfaceSeries.drawMode |= Surface3DSeries.DrawSurface;
+ heightSeries.drawMode |= Surface3DSeries.DrawSurface;
text = "Hide Surface"
}
}
diff --git a/examples/surface/surfacegraph.cpp b/examples/surface/surfacegraph.cpp
index 4c182a79..7cf4f329 100644
--- a/examples/surface/surfacegraph.cpp
+++ b/examples/surface/surfacegraph.cpp
@@ -91,7 +91,7 @@ void SurfaceGraph::enableSqrtSinModel(bool enable)
{
if (enable) {
//! [3]
- m_sqrtSinSeries->setSurfaceGridEnabled(true);
+ m_sqrtSinSeries->setDrawMode(QSurface3DSeries::DrawSurfaceAndWireframe);
m_sqrtSinSeries->setFlatShadingEnabled(true);
m_graph->axisX()->setLabelFormat("%.2f");
@@ -124,7 +124,7 @@ void SurfaceGraph::enableHeightMapModel(bool enable)
{
if (enable) {
//! [4]
- m_heightMapSeries->setSurfaceGridEnabled(false);
+ m_heightMapSeries->setDrawMode(QSurface3DSeries::DrawSurface);
m_heightMapSeries->setFlatShadingEnabled(false);
m_graph->axisX()->setLabelFormat("%.1f N");
diff --git a/src/datavisualization/data/qsurface3dseries.cpp b/src/datavisualization/data/qsurface3dseries.cpp
index 19462af4..cf794077 100644
--- a/src/datavisualization/data/qsurface3dseries.cpp
+++ b/src/datavisualization/data/qsurface3dseries.cpp
@@ -130,6 +130,19 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
*/
/*!
+ * \enum QSurface3DSeries::DrawFlag
+ *
+ * Drawing mode of the surface. Values of this enumeration can be combined with OR operator.
+ *
+ * \value DrawWireframe
+ * Only the grid is drawn.
+ * \value DrawSurface
+ * Only the surface is drawn.
+ * \value DrawSurfaceAndWireframe
+ * Both the surface and grid are drawn.
+ */
+
+/*!
* Constructs QSurface3DSeries with the given \a parent.
*/
QSurface3DSeries::QSurface3DSeries(QObject *parent) :
@@ -252,21 +265,21 @@ bool QSurface3DSeries::isFlatShadingSupported() const
}
/*!
- * \property QSurface3DSeries::surfaceGridEnabled
+ * \property QSurface3DSeries::drawMode
*
- * Sets surface grid to \a enabled. It is preset to \c true by default.
+ * Sets the drawing \a mode to one of QSurface3DSeries::DrawFlag.
*/
-void QSurface3DSeries::setSurfaceGridEnabled(bool enabled)
+void QSurface3DSeries::setDrawMode(QSurface3DSeries::DrawFlags mode)
{
- if (dptr()->m_surfaceGridEnabled != enabled) {
- dptr()->setSurfaceGridEnabled(enabled);
- emit surfaceGridEnabledChanged(enabled);
+ if (dptr()->m_drawMode != mode) {
+ dptr()->setDrawMode(mode);
+ emit drawModeChanged(mode);
}
}
-bool QSurface3DSeries::isSurfaceGridEnabled() const
+QSurface3DSeries::DrawFlags QSurface3DSeries::drawMode() const
{
- return dptrc()->m_surfaceGridEnabled;
+ return dptrc()->m_drawMode;
}
/*!
@@ -291,7 +304,7 @@ QSurface3DSeriesPrivate::QSurface3DSeriesPrivate(QSurface3DSeries *q)
: QAbstract3DSeriesPrivate(q, QAbstract3DSeries::SeriesTypeSurface),
m_selectedPoint(Surface3DController::invalidSelectionPosition()),
m_flatShadingEnabled(true),
- m_surfaceGridEnabled(true)
+ m_drawMode(QSurface3DSeries::DrawSurfaceAndWireframe)
{
m_itemLabelFormat = QStringLiteral("(@xLabel, @yLabel, @zLabel)");
m_mesh = QAbstract3DSeries::MeshSphere;
@@ -358,9 +371,9 @@ void QSurface3DSeriesPrivate::setFlatShadingEnabled(bool enabled)
m_controller->markSeriesVisualsDirty();
}
-void QSurface3DSeriesPrivate::setSurfaceGridEnabled(bool enabled)
+void QSurface3DSeriesPrivate::setDrawMode(QSurface3DSeries::DrawFlags mode)
{
- m_surfaceGridEnabled = enabled;
+ m_drawMode = mode;
if (m_controller)
m_controller->markSeriesVisualsDirty();
}
diff --git a/src/datavisualization/data/qsurface3dseries.h b/src/datavisualization/data/qsurface3dseries.h
index f4b64b96..8040da0d 100644
--- a/src/datavisualization/data/qsurface3dseries.h
+++ b/src/datavisualization/data/qsurface3dseries.h
@@ -29,13 +29,21 @@ class QSurface3DSeriesPrivate;
class QT_DATAVISUALIZATION_EXPORT QSurface3DSeries : public QAbstract3DSeries
{
Q_OBJECT
+ Q_FLAGS(DrawFlag DrawFlags)
Q_PROPERTY(QSurfaceDataProxy *dataProxy READ dataProxy WRITE setDataProxy NOTIFY dataProxyChanged)
Q_PROPERTY(QPoint selectedPoint READ selectedPoint WRITE setSelectedPoint NOTIFY selectedPointChanged)
Q_PROPERTY(bool flatShadingEnabled READ isFlatShadingEnabled WRITE setFlatShadingEnabled NOTIFY flatShadingEnabledChanged)
- Q_PROPERTY(bool surfaceGridEnabled READ isSurfaceGridEnabled WRITE setSurfaceGridEnabled NOTIFY surfaceGridEnabledChanged)
Q_PROPERTY(bool flatShadingSupported READ isFlatShadingSupported NOTIFY flatShadingSupportedChanged)
+ Q_PROPERTY(QtDataVisualization::QSurface3DSeries::DrawFlags drawMode READ drawMode WRITE setDrawMode NOTIFY drawModeChanged)
public:
+ enum DrawFlag {
+ DrawWireframe = 1,
+ DrawSurface = 2,
+ DrawSurfaceAndWireframe = DrawWireframe | DrawSurface
+ };
+ Q_DECLARE_FLAGS(DrawFlags, DrawFlag)
+
explicit QSurface3DSeries(QObject *parent = 0);
explicit QSurface3DSeries(QSurfaceDataProxy *dataProxy, QObject *parent = 0);
virtual ~QSurface3DSeries();
@@ -50,8 +58,8 @@ public:
void setFlatShadingEnabled(bool enabled);
bool isFlatShadingEnabled() const;
- void setSurfaceGridEnabled(bool enabled);
- bool isSurfaceGridEnabled() const;
+ void setDrawMode(QSurface3DSeries::DrawFlags mode);
+ QSurface3DSeries::DrawFlags drawMode() const;
bool isFlatShadingSupported() const;
@@ -61,6 +69,7 @@ signals:
void flatShadingEnabledChanged(bool enable);
void surfaceGridEnabledChanged(bool enable);
void flatShadingSupportedChanged(bool enable);
+ void drawModeChanged(QSurface3DSeries::DrawFlags mode);
protected:
explicit QSurface3DSeries(QSurface3DSeriesPrivate *d, QObject *parent = 0);
diff --git a/src/datavisualization/data/qsurface3dseries_p.h b/src/datavisualization/data/qsurface3dseries_p.h
index a3acb8d5..00bfbed2 100644
--- a/src/datavisualization/data/qsurface3dseries_p.h
+++ b/src/datavisualization/data/qsurface3dseries_p.h
@@ -46,14 +46,14 @@ public:
void setSelectedPoint(const QPoint &position);
void setFlatShadingEnabled(bool enabled);
- void setSurfaceGridEnabled(bool enabled);
+ void setDrawMode(QSurface3DSeries::DrawFlags mode);
private:
QSurface3DSeries *qptr();
QPoint m_selectedPoint;
bool m_flatShadingEnabled;
- bool m_surfaceGridEnabled;
+ QSurface3DSeries::DrawFlags m_drawMode;
private:
friend class QSurface3DSeries;
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp
index 47e3bf08..43815d39 100644
--- a/src/datavisualization/engine/surface3drenderer.cpp
+++ b/src/datavisualization/engine/surface3drenderer.cpp
@@ -206,12 +206,9 @@ void Surface3DRenderer::updateData()
const QSurfaceDataArray *array = 0;
if (m_visibleSeriesList.size()) {
QSurface3DSeries *firstSeries = static_cast<QSurface3DSeries *>(m_visibleSeriesList.at(0).series());
- m_cachedSurfaceVisible = firstSeries->isVisible(); // TODO: To series visuals update?
- if (m_cachedSurfaceGridOn || m_cachedSurfaceVisible) {
- QSurfaceDataProxy *dataProxy = firstSeries->dataProxy();
- if (dataProxy)
- array = dataProxy->array();
- }
+ QSurfaceDataProxy *dataProxy = firstSeries->dataProxy();
+ if (dataProxy)
+ array = dataProxy->array();
}
calculateSceneScalingFactors();
@@ -264,6 +261,9 @@ void Surface3DRenderer::updateData()
delete m_dataArray.at(i);
m_dataArray.clear();
m_sampleSpace = QRect();
+
+ delete m_surfaceObj;
+ m_surfaceObj = 0;
}
for (int i = 0; i < m_sliceDataArray.size(); i++)
@@ -282,7 +282,11 @@ void Surface3DRenderer::updateSeries(const QList<QAbstract3DSeries *> &seriesLis
if (m_visibleSeriesList.size()) {
QSurface3DSeries *series = static_cast<QSurface3DSeries *>(m_visibleSeriesList.at(0).series());
updateFlatStatus(series->isFlatShadingEnabled());
- updateSurfaceGridStatus(series->isSurfaceGridEnabled());
+
+ QSurface3DSeries::DrawFlags drawMode = series->drawMode();
+ m_cachedSurfaceVisible = drawMode.testFlag(QSurface3DSeries::DrawSurface);
+ m_cachedSurfaceGridOn = drawMode.testFlag(QSurface3DSeries::DrawWireframe);
+
QVector3D seriesColor = Utils::vectorFromColor(series->baseColor());
if (m_uniformGradientTextureColor != seriesColor)
generateUniformGradient(seriesColor);
diff --git a/tests/surfacetest/graphmodifier.cpp b/tests/surfacetest/graphmodifier.cpp
index 6879530b..3474b67f 100644
--- a/tests/surfacetest/graphmodifier.cpp
+++ b/tests/surfacetest/graphmodifier.cpp
@@ -52,7 +52,8 @@ GraphModifier::GraphModifier(Q3DSurface *graph)
m_insertTestZPos(0),
m_insertTestIndexPos(1),
m_planeArray(0),
- m_theSeries(new QSurface3DSeries)
+ m_theSeries(new QSurface3DSeries),
+ m_drawMode(QSurface3DSeries::DrawSurfaceAndWireframe)
{
m_graph->setAxisX(new Q3DValueAxis);
m_graph->setAxisY(new Q3DValueAxis);
@@ -80,12 +81,27 @@ void GraphModifier::toggleSmooth(bool enabled)
void GraphModifier::toggleSurfaceGrid(bool enable)
{
qDebug() << "GraphModifier::toggleSurfaceGrid" << enable;
- m_theSeries->setSurfaceGridEnabled(enable);
+ if (enable)
+ m_drawMode |= QSurface3DSeries::DrawWireframe;
+ else
+ m_drawMode &= ~QSurface3DSeries::DrawWireframe;
+
+ m_theSeries->setDrawMode(m_drawMode);
}
void GraphModifier::toggleSurface(bool enable)
{
qDebug() << "GraphModifier::toggleSurface" << enable;
+ if (enable)
+ m_drawMode |= QSurface3DSeries::DrawSurface;
+ else
+ m_drawMode &= ~QSurface3DSeries::DrawSurface;
+
+ m_theSeries->setDrawMode(m_drawMode);
+}
+
+void GraphModifier::toggleSeriesVisible(bool enable)
+{
m_theSeries->setVisible(enable);
}
diff --git a/tests/surfacetest/graphmodifier.h b/tests/surfacetest/graphmodifier.h
index 8269962a..f0b5cce7 100644
--- a/tests/surfacetest/graphmodifier.h
+++ b/tests/surfacetest/graphmodifier.h
@@ -44,6 +44,7 @@ public:
void toggleSmooth(bool enabled);
void toggleSurfaceGrid(bool enable);
void toggleSurface(bool enable);
+ void toggleSeriesVisible(bool enable);
void toggleSqrtSin(bool enable);
void togglePlane(bool enable);
void setHeightMapData(bool enable);
@@ -113,6 +114,7 @@ private:
QSurfaceDataArray *m_planeArray;
QLabel *m_selectionInfoLabel;
QSurface3DSeries *m_theSeries;
+ QSurface3DSeries::DrawFlags m_drawMode;
};
#endif
diff --git a/tests/surfacetest/main.cpp b/tests/surfacetest/main.cpp
index d2cafae9..c25c5b89 100644
--- a/tests/surfacetest/main.cpp
+++ b/tests/surfacetest/main.cpp
@@ -78,6 +78,10 @@ int main(int argc, char *argv[])
surfaceCB->setText(QStringLiteral("Surface Visible"));
surfaceCB->setChecked(true);
+ QCheckBox *seriesVisibleCB = new QCheckBox(widget);
+ seriesVisibleCB->setText(QStringLiteral("Series Visible"));
+ seriesVisibleCB->setChecked(true);
+
//QCheckBox *sqrtSinCB = new QCheckBox(widget);
QRadioButton *sqrtSinCB = new QRadioButton(widget);
sqrtSinCB->setText(QStringLiteral("Sqrt & Sin"));
@@ -247,6 +251,7 @@ int main(int argc, char *argv[])
vLayout->addWidget(smoothCB);
vLayout->addWidget(surfaceGridCB);
vLayout->addWidget(surfaceCB);
+ vLayout->addWidget(seriesVisibleCB);
vLayout->addWidget(new QLabel(QStringLiteral("Select surface sample")));
vLayout->addWidget(sqrtSinCB);
vLayout->addWidget(planeCB);
@@ -298,6 +303,8 @@ int main(int argc, char *argv[])
modifier, &GraphModifier::toggleSurfaceGrid);
QObject::connect(surfaceCB, &QCheckBox::stateChanged,
modifier, &GraphModifier::toggleSurface);
+ QObject::connect(seriesVisibleCB, &QCheckBox::stateChanged,
+ modifier, &GraphModifier::toggleSeriesVisible);
QObject::connect(sqrtSinCB, &QRadioButton::toggled,
modifier, &GraphModifier::toggleSqrtSin);
QObject::connect(planeCB, &QCheckBox::toggled,