From 132502c16e8ccb6d6fc627e2b5f6f89838d88c8e Mon Sep 17 00:00:00 2001 From: Mika Salmela Date: Thu, 12 Dec 2013 15:02:07 +0200 Subject: Control for surface visibility features MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-number: QTRD-2628 Change-Id: Ic03e2a71231665c478a918044ebd3e5b2d22b445 Reviewed-by: Tomi Korpipää Reviewed-by: Miikka Heikkinen --- src/datavisualization/data/qsurface3dseries.cpp | 35 +++++++++++++++------- src/datavisualization/data/qsurface3dseries.h | 15 ++++++++-- src/datavisualization/data/qsurface3dseries_p.h | 4 +-- src/datavisualization/engine/surface3drenderer.cpp | 18 ++++++----- 4 files changed, 49 insertions(+), 23 deletions(-) (limited to 'src') 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 @@ -129,6 +129,19 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE * Before then it is always true. */ +/*! + * \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. */ @@ -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(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 &seriesLis if (m_visibleSeriesList.size()) { QSurface3DSeries *series = static_cast(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); -- cgit v1.2.3