summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2013-11-28 08:19:37 +0200
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2013-11-29 09:53:48 +0200
commit527113321ff103835b89543c5d6f670f55b5b0d5 (patch)
tree01b242ef7b1f30a414b718f99f155f19235951bd /src
parent85dda87df2d420dc53959e549d24c4b09ce93d57 (diff)
Move series specific visual elements to series, part 1
Meshes moved to series. Task-number: QTRD-2557 Change-Id: I80050e413faf3bc942eb5a5627a66747de5805d8 Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/datavisualization/data/barrenderitem.cpp4
-rw-r--r--src/datavisualization/data/barrenderitem_p.h6
-rw-r--r--src/datavisualization/data/qabstract3dseries.cpp156
-rw-r--r--src/datavisualization/data/qabstract3dseries.h31
-rw-r--r--src/datavisualization/data/qabstract3dseries_p.h38
-rw-r--r--src/datavisualization/data/qbar3dseries.cpp3
-rw-r--r--src/datavisualization/data/qscatter3dseries.cpp4
-rw-r--r--src/datavisualization/data/qsurface3dseries.cpp7
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc17
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc30
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc6
-rw-r--r--src/datavisualization/engine/abstract3dcontroller.cpp42
-rw-r--r--src/datavisualization/engine/abstract3dcontroller_p.h16
-rw-r--r--src/datavisualization/engine/abstract3drenderer.cpp39
-rw-r--r--src/datavisualization/engine/abstract3drenderer_p.h7
-rw-r--r--src/datavisualization/engine/bars3dcontroller.cpp32
-rw-r--r--src/datavisualization/engine/bars3dcontroller_p.h1
-rw-r--r--src/datavisualization/engine/bars3drenderer.cpp81
-rw-r--r--src/datavisualization/engine/bars3drenderer_p.h4
-rw-r--r--src/datavisualization/engine/engine.qrc4
-rw-r--r--src/datavisualization/engine/meshes/minimalFlat.obj (renamed from src/datavisualization/engine/meshes/scatterdotFlat.obj)0
-rw-r--r--src/datavisualization/engine/meshes/minimalSmooth.obj (renamed from src/datavisualization/engine/meshes/scatterdot.obj)0
-rw-r--r--src/datavisualization/engine/q3dbars.cpp33
-rw-r--r--src/datavisualization/engine/q3dbars.h9
-rw-r--r--src/datavisualization/engine/q3dscatter.cpp33
-rw-r--r--src/datavisualization/engine/q3dscatter.h7
-rw-r--r--src/datavisualization/engine/scatter3dcontroller.cpp30
-rw-r--r--src/datavisualization/engine/scatter3dcontroller_p.h3
-rw-r--r--src/datavisualization/engine/scatter3drenderer.cpp158
-rw-r--r--src/datavisualization/engine/scatter3drenderer_p.h4
-rw-r--r--src/datavisualization/engine/seriesrendercache.cpp91
-rw-r--r--src/datavisualization/engine/seriesrendercache_p.h16
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp6
-rw-r--r--src/datavisualization/engine/surface3drenderer_p.h1
-rw-r--r--src/datavisualization/global/qdatavisualizationenums.h14
-rw-r--r--src/datavisualization/global/qtdatavisualizationenums.qdoc24
-rw-r--r--src/datavisualization/theme/q3dtheme.h1
-rw-r--r--src/datavisualization/utils/objecthelper.cpp3
-rw-r--r--src/datavisualizationqml2/declarativebars.cpp53
-rw-r--r--src/datavisualizationqml2/declarativebars_p.h12
-rw-r--r--src/datavisualizationqml2/declarativescatter.cpp59
-rw-r--r--src/datavisualizationqml2/declarativescatter_p.h14
42 files changed, 508 insertions, 591 deletions
diff --git a/src/datavisualization/data/barrenderitem.cpp b/src/datavisualization/data/barrenderitem.cpp
index 558e2f96..67029c60 100644
--- a/src/datavisualization/data/barrenderitem.cpp
+++ b/src/datavisualization/data/barrenderitem.cpp
@@ -25,7 +25,8 @@ BarRenderItem::BarRenderItem()
: AbstractRenderItem(),
m_value(0),
m_height(0.0f),
- m_sliceLabelItem(0)
+ m_sliceLabelItem(0),
+ m_seriesIndex(0)
{
}
@@ -37,6 +38,7 @@ BarRenderItem::BarRenderItem(const BarRenderItem &other)
m_height = other.m_height;
m_sliceLabel = other.m_sliceLabel;
m_sliceLabelItem = 0;
+ m_seriesIndex = other.m_seriesIndex;
}
BarRenderItem::~BarRenderItem()
diff --git a/src/datavisualization/data/barrenderitem_p.h b/src/datavisualization/data/barrenderitem_p.h
index a837ff2c..480d5049 100644
--- a/src/datavisualization/data/barrenderitem_p.h
+++ b/src/datavisualization/data/barrenderitem_p.h
@@ -61,12 +61,18 @@ public:
void setSliceLabel(const QString &label);
QString &sliceLabel(); // Formats label if not previously formatted
+ // Series index in visual series that this item belongs to.
+ // This is only utilized by slicing, so it may not be up to date on all items.
+ inline void setSeriesIndex(int seriesIndex) { m_seriesIndex = seriesIndex; }
+ inline int seriesIndex() { return m_seriesIndex; }
+
protected:
float m_value;
QPoint m_position; // x = row, y = column
GLfloat m_height;
QString m_sliceLabel;
LabelItem *m_sliceLabelItem;
+ int m_seriesIndex;
friend class QBarDataItem;
};
diff --git a/src/datavisualization/data/qabstract3dseries.cpp b/src/datavisualization/data/qabstract3dseries.cpp
index 579e1dec..d5c4c6b8 100644
--- a/src/datavisualization/data/qabstract3dseries.cpp
+++ b/src/datavisualization/data/qabstract3dseries.cpp
@@ -79,6 +79,36 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
*/
/*!
+ \enum QAbstract3DSeries::Mesh
+
+ Predefined mesh types. All styles are not usable with all visualization types.
+
+ \value MeshUserDefined
+ User defined mesh, set via QAbstract3DSeries::userDefinedMesh property.
+ \value MeshBar
+ Basic rectangular bar.
+ \value MeshCube
+ Basic cube.
+ \value MeshPyramid
+ Four-sided pyramid.
+ \value MeshCone
+ Basic cone.
+ \value MeshCylinder
+ Basic cylinder.
+ \value MeshBevelBar
+ Slightly beveled (rounded) rectangular bar.
+ \value MeshBevelCube
+ Slightly beveled (rounded) cube.
+ \value MeshSphere
+ Sphere.
+ \value MeshMinimal
+ The minimal 3D mesh: a triangular pyramid. Usable only with Q3DScatter.
+ \value MeshPoint
+ 2D point. Usable only with Q3DScatter.
+ \b Note: Shadows and color gradients do not affect this style.
+*/
+
+/*!
* \internal
*/
QAbstract3DSeries::QAbstract3DSeries(QAbstract3DSeriesPrivate *d, QObject *parent) :
@@ -115,7 +145,7 @@ QAbstract3DSeries::SeriesType QAbstract3DSeries::type() const
*/
void QAbstract3DSeries::setItemLabelFormat(const QString &format)
{
- if (format != itemLabelFormat()) {
+ if (d_ptr->m_itemLabelFormat != format) {
d_ptr->setItemLabelFormat(format);
emit itemLabelFormatChanged(format);
}
@@ -134,8 +164,10 @@ QString QAbstract3DSeries::itemLabelFormat() const
*/
void QAbstract3DSeries::setVisible(bool visible)
{
- d_ptr->m_visible = visible;
- emit visibilityChanged(visible);
+ if (d_ptr->m_visible != visible) {
+ d_ptr->setVisible(visible);
+ emit visibilityChanged(visible);
+ }
}
bool QAbstract3DSeries::isVisible() const
@@ -143,6 +175,70 @@ bool QAbstract3DSeries::isVisible() const
return d_ptr->m_visible;
}
+/*!
+ * \property QAbstract3DSeries::mesh
+ *
+ * Sets the mesh of the items in the series, or the selection pointer in case of
+ * QSurface3DSeries. If the \a mesh is MeshUserDefined, then the userDefinedMesh property
+ * must also be set for items to render properly. The default value depends on the graph type.
+ */
+void QAbstract3DSeries::setMesh(QAbstract3DSeries::Mesh mesh)
+{
+ if ((mesh == QAbstract3DSeries::MeshPoint || mesh == QAbstract3DSeries::MeshMinimal)
+ && type() != QAbstract3DSeries::SeriesTypeScatter) {
+ qWarning() << "Specified style is only supported for QScatter3DSeries.";
+ } else if (d_ptr->m_mesh != mesh) {
+ d_ptr->setMesh(mesh);
+ emit meshChanged(mesh);
+ }
+}
+
+QAbstract3DSeries::Mesh QAbstract3DSeries::mesh() const
+{
+ return d_ptr->m_mesh;
+}
+
+/*!
+ * \property QAbstract3DSeries::meshSmooth
+ *
+ * If \a enable is true, smooth versions of predefined meshes set via mesh property are used.
+ * This property doesn't affect custom meshes used when mesh is MeshUserDefined.
+ * Defaults to false.
+ */
+void QAbstract3DSeries::setMeshSmooth(bool enable)
+{
+ if (d_ptr->m_meshSmooth != enable) {
+ d_ptr->setMeshSmooth(enable);
+ emit meshSmoothChanged(enable);
+ }
+}
+
+bool QAbstract3DSeries::isMeshSmooth() const
+{
+ return d_ptr->m_meshSmooth;
+}
+
+/*!
+ * \property QAbstract3DSeries::userDefinedMesh
+ *
+ * Sets the \a fileName for user defined custom mesh for objects that is used when mesh
+ * is MeshUserDefined.
+ * \note The file specified by \a fileName needs to be in Wavefront obj format and include
+ * vertices, normals and UVs. It also needs to be in triangles.
+ */
+void QAbstract3DSeries::setUserDefinedMesh(const QString &fileName)
+{
+ if (d_ptr->m_userDefinedMesh != fileName) {
+ d_ptr->setUserDefinedMesh(fileName);
+ emit userDefinedMeshChanged(fileName);
+ }
+}
+
+QString QAbstract3DSeries::userDefinedMesh() const
+{
+ return d_ptr->m_userDefinedMesh;
+}
+
// QAbstract3DSeriesPrivate
QAbstract3DSeriesPrivate::QAbstract3DSeriesPrivate(QAbstract3DSeries *q, QAbstract3DSeries::SeriesType type)
@@ -151,7 +247,9 @@ QAbstract3DSeriesPrivate::QAbstract3DSeriesPrivate(QAbstract3DSeries *q, QAbstra
m_type(type),
m_dataProxy(0),
m_visible(true),
- m_controller(0)
+ m_controller(0),
+ m_mesh(QAbstract3DSeries::MeshCube),
+ m_meshSmooth(false)
{
}
@@ -159,13 +257,6 @@ QAbstract3DSeriesPrivate::~QAbstract3DSeriesPrivate()
{
}
-void QAbstract3DSeriesPrivate::setItemLabelFormat(const QString &format)
-{
- m_itemLabelFormat = format;
- if (m_controller)
- m_controller->setSeriesDirty();
-}
-
QAbstractDataProxy *QAbstract3DSeriesPrivate::dataProxy() const
{
return m_dataProxy;
@@ -180,8 +271,10 @@ void QAbstract3DSeriesPrivate::setDataProxy(QAbstractDataProxy *proxy)
proxy->d_ptr->setSeries(q_ptr); // also sets parent
- if (m_controller)
+ if (m_controller) {
connectControllerAndProxy(m_controller);
+ m_controller->markDataDirty();
+ }
}
void QAbstract3DSeriesPrivate::setController(Abstract3DController *controller)
@@ -191,4 +284,43 @@ void QAbstract3DSeriesPrivate::setController(Abstract3DController *controller)
q_ptr->setParent(controller);
}
+void QAbstract3DSeriesPrivate::setItemLabelFormat(const QString &format)
+{
+ m_itemLabelFormat = format;
+ m_changeTracker.itemLabelFormatChanged = true;
+ if (m_controller)
+ m_controller->markSeriesVisualsDirty();
+}
+
+void QAbstract3DSeriesPrivate::setVisible(bool visible)
+{
+ m_visible = visible;
+ if (m_controller)
+ m_controller->markSeriesVisualsDirty();
+}
+
+void QAbstract3DSeriesPrivate::setMesh(QAbstract3DSeries::Mesh mesh)
+{
+ m_mesh = mesh;
+ m_changeTracker.meshChanged = true;
+ if (m_controller)
+ m_controller->markSeriesVisualsDirty();
+}
+
+void QAbstract3DSeriesPrivate::setMeshSmooth(bool enable)
+{
+ m_meshSmooth = enable;
+ m_changeTracker.meshSmoothChanged = true;
+ if (m_controller)
+ m_controller->markSeriesVisualsDirty();
+}
+
+void QAbstract3DSeriesPrivate::setUserDefinedMesh(const QString &meshFile)
+{
+ m_userDefinedMesh = meshFile;
+ m_changeTracker.userDefinedMeshChanged = true;
+ if (m_controller)
+ m_controller->markSeriesVisualsDirty();
+}
+
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qabstract3dseries.h b/src/datavisualization/data/qabstract3dseries.h
index ccd93ad2..4d971749 100644
--- a/src/datavisualization/data/qabstract3dseries.h
+++ b/src/datavisualization/data/qabstract3dseries.h
@@ -31,9 +31,13 @@ class QT_DATAVISUALIZATION_EXPORT QAbstract3DSeries : public QObject
{
Q_OBJECT
Q_ENUMS(SeriesType)
+ Q_ENUMS(Mesh)
Q_PROPERTY(SeriesType type READ type)
Q_PROPERTY(QString itemLabelFormat READ itemLabelFormat WRITE setItemLabelFormat NOTIFY itemLabelFormatChanged)
Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibilityChanged)
+ Q_PROPERTY(Mesh mesh READ mesh WRITE setMesh NOTIFY meshChanged)
+ Q_PROPERTY(bool meshSmooth READ isMeshSmooth WRITE setMeshSmooth NOTIFY meshSmoothChanged)
+ Q_PROPERTY(QString userDefinedMesh READ userDefinedMesh WRITE setUserDefinedMesh NOTIFY userDefinedMeshChanged)
public:
enum SeriesType {
@@ -43,6 +47,20 @@ public:
SeriesTypeSurface = 4
};
+ enum Mesh {
+ MeshUserDefined = 0,
+ MeshBar,
+ MeshCube,
+ MeshPyramid,
+ MeshCone,
+ MeshCylinder,
+ MeshBevelBar,
+ MeshBevelCube,
+ MeshSphere,
+ MeshMinimal,
+ MeshPoint
+ };
+
protected:
explicit QAbstract3DSeries(QAbstract3DSeriesPrivate *d, QObject *parent = 0);
@@ -57,9 +75,21 @@ public:
void setVisible(bool visible);
bool isVisible() const;
+ void setMesh(Mesh mesh);
+ Mesh mesh() const;
+
+ void setMeshSmooth(bool enable);
+ bool isMeshSmooth() const;
+
+ void setUserDefinedMesh(const QString &fileName);
+ QString userDefinedMesh() const;
+
signals:
void itemLabelFormatChanged(QString format);
void visibilityChanged(bool visible);
+ void meshChanged(Mesh mesh);
+ void meshSmoothChanged(bool enabled);
+ void userDefinedMeshChanged(QString fileName);
protected:
QScopedPointer<QAbstract3DSeriesPrivate> d_ptr;
@@ -80,6 +110,7 @@ private:
friend class Surface3DController;
friend class Scatter3DController;
friend class QBar3DSeries;
+ friend class SeriesRenderCache;
};
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qabstract3dseries_p.h b/src/datavisualization/data/qabstract3dseries_p.h
index a5dbe867..d37df562 100644
--- a/src/datavisualization/data/qabstract3dseries_p.h
+++ b/src/datavisualization/data/qabstract3dseries_p.h
@@ -38,6 +38,21 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
class QAbstractDataProxy;
class Abstract3DController;
+struct QAbstract3DSeriesChangeBitField {
+ bool itemLabelFormatChanged : 1;
+ bool meshChanged : 1;
+ bool meshSmoothChanged : 1;
+ bool userDefinedMeshChanged : 1;
+
+ QAbstract3DSeriesChangeBitField()
+ : itemLabelFormatChanged(true),
+ meshChanged(true),
+ meshSmoothChanged(true),
+ userDefinedMeshChanged(true)
+ {
+ }
+};
+
class QAbstract3DSeriesPrivate : public QObject
{
Q_OBJECT
@@ -45,30 +60,27 @@ public:
QAbstract3DSeriesPrivate(QAbstract3DSeries *q, QAbstract3DSeries::SeriesType type);
virtual ~QAbstract3DSeriesPrivate();
- void setItemLabelFormat(const QString &format);
-
QAbstractDataProxy *dataProxy() const;
virtual void setDataProxy(QAbstractDataProxy *proxy);
virtual void setController(Abstract3DController *controller);
virtual void connectControllerAndProxy(Abstract3DController *newController) = 0;
-protected:
+ void setItemLabelFormat(const QString &format);
+ void setVisible(bool visible);
+ void setMesh(QAbstract3DSeries::Mesh mesh);
+ void setMeshSmooth(bool enable);
+ void setUserDefinedMesh(const QString &meshFile);
+
+ QAbstract3DSeriesChangeBitField m_changeTracker;
QAbstract3DSeries *q_ptr;
QAbstract3DSeries::SeriesType m_type;
QString m_itemLabelFormat;
QAbstractDataProxy *m_dataProxy;
bool m_visible;
Abstract3DController *m_controller;
-
-private:
- friend class QAbstract3DSeries;
- friend class Abstract3DController;
- friend class Bars3DController;
- friend class Surface3DController;
- friend class Scatter3DController;
- friend class QBar3DSeries;
- friend class QScatter3DSeries;
- friend class QSurface3DSeries;
+ QAbstract3DSeries::Mesh m_mesh;
+ bool m_meshSmooth;
+ QString m_userDefinedMesh;
};
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qbar3dseries.cpp b/src/datavisualization/data/qbar3dseries.cpp
index 301f36f1..18e8b2ed 100644
--- a/src/datavisualization/data/qbar3dseries.cpp
+++ b/src/datavisualization/data/qbar3dseries.cpp
@@ -213,6 +213,7 @@ QBar3DSeriesPrivate::QBar3DSeriesPrivate(QBar3DSeries *q)
m_selectedBar(Bars3DController::invalidSelectionPosition())
{
m_itemLabelFormat = QStringLiteral("@valueTitle: @valueLabel");
+ m_mesh = QAbstract3DSeries::MeshBevelBar;
}
QBar3DSeriesPrivate::~QBar3DSeriesPrivate()
@@ -261,8 +262,6 @@ void QBar3DSeriesPrivate::connectControllerAndProxy(Abstract3DController *newCon
&Bars3DController::handleDataRowLabelsChanged);
QObject::connect(barDataProxy, &QBarDataProxy::columnLabelsChanged, controller,
&Bars3DController::handleDataColumnLabelsChanged);
- QObject::connect(q_ptr, &QAbstract3DSeries::visibilityChanged, controller,
- &Abstract3DController::handleSeriesVisibilityChanged);
}
}
diff --git a/src/datavisualization/data/qscatter3dseries.cpp b/src/datavisualization/data/qscatter3dseries.cpp
index 4d9eb01a..25e32ffe 100644
--- a/src/datavisualization/data/qscatter3dseries.cpp
+++ b/src/datavisualization/data/qscatter3dseries.cpp
@@ -207,6 +207,7 @@ QScatter3DSeriesPrivate::QScatter3DSeriesPrivate(QScatter3DSeries *q)
m_selectedItem(Scatter3DController::invalidSelectionIndex())
{
m_itemLabelFormat = QStringLiteral("@valueTitle: @valueLabel");
+ m_mesh = QAbstract3DSeries::MeshSphere;
}
QScatter3DSeriesPrivate::~QScatter3DSeriesPrivate()
@@ -249,9 +250,6 @@ void QScatter3DSeriesPrivate::connectControllerAndProxy(Abstract3DController *ne
controller, &Scatter3DController::handleItemsRemoved);
QObject::connect(scatterDataProxy, &QScatterDataProxy::itemsInserted,
controller, &Scatter3DController::handleItemsInserted);
-
- QObject::connect(q_ptr, &QAbstract3DSeries::visibilityChanged, controller,
- &Abstract3DController::handleSeriesVisibilityChanged);
}
}
diff --git a/src/datavisualization/data/qsurface3dseries.cpp b/src/datavisualization/data/qsurface3dseries.cpp
index 2e850b03..baae3a78 100644
--- a/src/datavisualization/data/qsurface3dseries.cpp
+++ b/src/datavisualization/data/qsurface3dseries.cpp
@@ -33,6 +33,9 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
* If no data proxy is set explicitly for the series, the series creates a default
* proxy. Setting another proxy will destroy the existing proxy and all data added to it.
*
+ * The object mesh set via QAbstract3DSeries::mesh property defines the selection
+ * pointer shape in surface series.
+ *
* QSurface3DSeries supports the following format tags for QAbstract3DSeries::setItemLabelFormat():
* \table
* \row
@@ -207,6 +210,7 @@ QSurface3DSeriesPrivate::QSurface3DSeriesPrivate(QSurface3DSeries *q)
m_selectedPoint(Surface3DController::invalidSelectionPosition())
{
m_itemLabelFormat = QStringLiteral("(@xLabel, @yLabel, @zLabel)");
+ m_mesh = QAbstract3DSeries::MeshSphere;
}
QSurface3DSeriesPrivate::~QSurface3DSeriesPrivate()
@@ -244,9 +248,6 @@ void QSurface3DSeriesPrivate::connectControllerAndProxy(Abstract3DController *ne
&Surface3DController::handleArrayReset);
QObject::connect(surfaceDataProxy, &QSurfaceDataProxy::rowsChanged, controller,
&Surface3DController::handleRowsChanged);
-
- QObject::connect(q_ptr, &QAbstract3DSeries::visibilityChanged, controller,
- &Abstract3DController::handleSeriesVisibilityChanged);
}
}
diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc
index bb99a539..b64c3c03 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc
@@ -79,11 +79,6 @@
/*!
- * \qmlproperty Bars3D.MeshStyle Bars3D::barType
- * Bar object type.
- */
-
-/*!
* \qmlproperty real Bars3D::barThickness
* Bar thickness ratio between X and Z dimensions. 1.0 means bars are as wide as they are deep, 0.5
* makes them twice as deep as they are wide.
@@ -100,18 +95,6 @@
*/
/*!
- * \qmlproperty bool Bars3D::barSmoothingEnabled
- * Bar smoothing. If false, bar shading is flat.
- */
-
-/*!
- * \qmlproperty string Bars3D::meshFileName
- * Override bar type with a mesh object.
- * \note Object needs to be in Wavefront obj format and include vertices, normals and UVs.
- * It also needs to be in triangles.
- */
-
-/*!
* \qmlproperty int Bars3D::rows
* Row count of data window.
*/
diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc
index da7faaa3..1f04424f 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc
@@ -40,19 +40,6 @@
*/
/*!
- * \qmlmethod void Scatter3D::setObjectColor(const QColor &baseColor, bool uniform)
- * Set item color using your own colors. \a baseColor sets the base color of a item. The \a uniform
- * -flag is used to define if color needs to be uniform throughout item's length, or will the colors
- * be applied by height. It is \c true by default.
- *
- * Calling this method overrides colors from theme.
- *
- * \sa AbstractGraph3D::theme
- *
- * \warning This method is subject to change.
- */
-
-/*!
\qmlproperty ValueAxis3D Scatter3D::axisX
A user-defined X axis.
@@ -80,23 +67,6 @@
*/
/*!
- \qmlproperty Scatter3D.MeshStyle Scatter3D::objectType
- Dot object type.
- */
-
-/*!
- \qmlproperty bool Scatter3D::objectSmoothingEnabled
- Dot smoothing. If false, dot shading is flat.
- */
-
-/*!
- \qmlproperty string Scatter3D::meshFileName
- Override object type with a mesh object.
- \note Object needs to be in Wavefront obj format and include vertices, normals and UVs.
- It also needs to be in triangles.
- */
-
-/*!
* \qmlproperty list<QScatter3DSeries> Scatter3D::seriesList
* This property holds the series of the graph.
* By default, this property contains an empty list.
diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc
index f422a5b5..cbc8a900 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc
@@ -72,12 +72,6 @@
*/
/*!
- * \qmlproperty bool Surface3D::surfaceVisible
- * The surface visibility. If false, no surface is drawn. If surface grid is enabled, it is still
- * drawn.
- */
-
-/*!
\qmlproperty bool Surface3D::surfaceGridEnabled
The surface grid visibility. If false, no surface grid is drawn.
*/
diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp
index 302b74ad..b8b2e826 100644
--- a/src/datavisualization/engine/abstract3dcontroller.cpp
+++ b/src/datavisualization/engine/abstract3dcontroller.cpp
@@ -52,7 +52,8 @@ Abstract3DController::Abstract3DController(QRect boundRect, QObject *parent) :
m_axisZ(0),
m_renderer(0),
m_isDataDirty(true),
- m_isSeriesDirty(true),
+ m_isSeriesVisibilityDirty(true),
+ m_isSeriesVisualsDirty(true),
m_renderPending(false)
{
// Set initial theme
@@ -98,6 +99,8 @@ void Abstract3DController::addSeries(QAbstract3DSeries *series)
if (series && !m_seriesList.contains(series)) {
m_seriesList.append(series);
series->d_ptr->setController(this);
+ QObject::connect(series, &QAbstract3DSeries::visibilityChanged,
+ this, &Abstract3DController::handleSeriesVisibilityChanged);
if (series->isVisible())
handleSeriesVisibilityChangedBySender(series);
}
@@ -107,9 +110,11 @@ void Abstract3DController::removeSeries(QAbstract3DSeries *series)
{
if (series && series->d_ptr->m_controller == this) {
m_seriesList.removeAll(series);
+ QObject::disconnect(series, &QAbstract3DSeries::visibilityChanged,
+ this, &Abstract3DController::handleSeriesVisibilityChanged);
series->d_ptr->setController(0);
m_isDataDirty = true;
- m_isSeriesDirty = true;
+ m_isSeriesVisibilityDirty = true;
emitNeedRender();
}
}
@@ -189,11 +194,6 @@ void Abstract3DController::synchDataToRenderer()
m_changeTracker.selectionModeChanged = false;
}
- if (m_changeTracker.objFileChanged) {
- m_renderer->updateMeshFileName(m_objFile);
- m_changeTracker.objFileChanged = false;
- }
-
if (m_changeTracker.axisXTypeChanged) {
m_renderer->updateAxisType(Q3DAbstractAxis::AxisOrientationX, m_axisX->type());
m_changeTracker.axisXTypeChanged = false;
@@ -337,9 +337,10 @@ void Abstract3DController::synchDataToRenderer()
}
}
- if (m_isSeriesDirty) {
- m_renderer->updateSeries(m_seriesList);
- m_isSeriesDirty = false;
+ if (m_isSeriesVisibilityDirty || m_isSeriesVisualsDirty) {
+ m_renderer->updateSeries(m_seriesList, m_isSeriesVisibilityDirty);
+ m_isSeriesVisibilityDirty = false;
+ m_isSeriesVisualsDirty = false;
}
if (m_isDataDirty) {
@@ -833,24 +834,21 @@ void Abstract3DController::setSlicingActive(bool isSlicing)
emitNeedRender();
}
-void Abstract3DController::setMeshFileName(const QString &fileName)
+Q3DScene *Abstract3DController::scene()
{
- if (fileName != m_objFile) {
- m_objFile = fileName;
- m_changeTracker.objFileChanged = true;
- emit meshFileNameChanged(fileName);
- emitNeedRender();
- }
+ return m_scene;
}
-QString Abstract3DController::meshFileName() const
+void Abstract3DController::markDataDirty()
{
- return m_objFile;
+ m_isDataDirty = true;
+ emitNeedRender();
}
-Q3DScene *Abstract3DController::scene()
+void Abstract3DController::markSeriesVisualsDirty()
{
- return m_scene;
+ m_isSeriesVisualsDirty = true;
+ emitNeedRender();
}
void Abstract3DController::handleAxisTitleChanged(const QString &title)
@@ -1023,7 +1021,7 @@ void Abstract3DController::handleSeriesVisibilityChangedBySender(QObject *sender
Q_UNUSED(sender)
m_isDataDirty = true;
- m_isSeriesDirty = true;
+ m_isSeriesVisibilityDirty = true;
emitNeedRender();
}
diff --git a/src/datavisualization/engine/abstract3dcontroller_p.h b/src/datavisualization/engine/abstract3dcontroller_p.h
index 556d1ea5..27cfb9a1 100644
--- a/src/datavisualization/engine/abstract3dcontroller_p.h
+++ b/src/datavisualization/engine/abstract3dcontroller_p.h
@@ -61,7 +61,6 @@ struct Abstract3DChangeBitField {
bool selectionModeChanged : 1;
bool objFileChanged : 1;
bool gridEnabledChanged : 1;
- bool backgroundEnabledChanged : 1;
bool axisXTypeChanged : 1;
bool axisYTypeChanged : 1;
bool axisZTypeChanged : 1;
@@ -105,7 +104,6 @@ struct Abstract3DChangeBitField {
selectionModeChanged(true),
objFileChanged(true),
gridEnabledChanged(true),
- backgroundEnabledChanged(true),
axisXTypeChanged(true),
axisYTypeChanged(true),
axisZTypeChanged(true),
@@ -172,7 +170,6 @@ private:
bool m_labelBackground;
bool m_isBackgroundEnabled;
bool m_isGridEnabled;
- QString m_objFile;
Q3DScene *m_scene;
QDataVis::ColorStyle m_colorStyle;
QColor m_objectColor;
@@ -194,7 +191,8 @@ protected:
QList<Q3DAbstractAxis *> m_axes; // List of all added axes
Abstract3DRenderer *m_renderer;
bool m_isDataDirty;
- bool m_isSeriesDirty;
+ bool m_isSeriesVisibilityDirty;
+ bool m_isSeriesVisualsDirty;
bool m_renderPending;
QList<QAbstract3DSeries *> m_seriesList;
@@ -282,12 +280,11 @@ public:
bool isSlicingActive() const;
void setSlicingActive(bool isSlicing);
- virtual void setMeshFileName(const QString &fileName);
- virtual QString meshFileName() const;
-
Q3DScene *scene();
- inline void setSeriesDirty() { m_isSeriesDirty = true; }
+ void markDataDirty();
+ void markSeriesVisualsDirty();
+
void emitNeedRender();
virtual void mouseDoubleClickEvent(QMouseEvent *event);
@@ -327,7 +324,6 @@ signals:
void activeInputHandlerChanged(QAbstract3DInputHandler *inputHandler);
void themeChanged(Q3DTheme *theme);
void selectionModeChanged(QDataVis::SelectionFlags mode);
- void meshFileNameChanged(QString filename);
void needRender();
void colorStyleChanged(QDataVis::ColorStyle style);
void objectColorChanged(QColor color);
@@ -345,6 +341,8 @@ protected:
private:
void setAxisHelper(Q3DAbstractAxis::AxisOrientation orientation, Q3DAbstractAxis *axis,
Q3DAbstractAxis **axisPtr);
+
+ friend class Bars3DController;
};
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp
index 50e56ce5..7e17baff 100644
--- a/src/datavisualization/engine/abstract3drenderer.cpp
+++ b/src/datavisualization/engine/abstract3drenderer.cpp
@@ -25,6 +25,7 @@
#include "q3dlight_p.h"
#include "qabstract3dseries_p.h"
#include "q3dtheme_p.h"
+#include "objecthelper_p.h"
Q_DECLARE_METATYPE(QtDataVisualization::QDataVis::ShadowQuality)
@@ -71,6 +72,8 @@ Abstract3DRenderer::~Abstract3DRenderer()
delete m_drawer;
delete m_textureHelper;
delete m_cachedScene;
+ for (int i = 0; i < m_visibleSeriesList.size(); i++)
+ delete m_visibleSeriesList.at(i).object();
}
void Abstract3DRenderer::initializeOpenGL()
@@ -250,14 +253,6 @@ void Abstract3DRenderer::handleShadowQualityChange()
#endif
}
-void Abstract3DRenderer::updateMeshFileName(const QString &objFileName)
-{
- if (objFileName != m_cachedObjFile) {
- m_cachedObjFile = objFileName;
- loadMeshFile();
- }
-}
-
void Abstract3DRenderer::updateSelectionMode(QDataVis::SelectionFlags mode)
{
m_cachedSelectionMode = mode;
@@ -365,21 +360,31 @@ void Abstract3DRenderer::updateMultiHighlightGradient(const QLinearGradient &gra
fixGradient(&m_cachedMultiHighlightGradient, &m_multiHighlightGradientTexture);
}
-void Abstract3DRenderer::updateSeries(const QList<QAbstract3DSeries *> &seriesList)
+void Abstract3DRenderer::fixMeshFileName(QString &fileName, QAbstract3DSeries::Mesh mesh)
+{
+ // Default implementation does nothing.
+ Q_UNUSED(fileName)
+ Q_UNUSED(mesh)
+}
+
+void Abstract3DRenderer::updateSeries(const QList<QAbstract3DSeries *> &seriesList,
+ bool updateVisibility)
{
int visibleCount = 0;
- foreach (QAbstract3DSeries *current, seriesList) {
- if (current->isVisible())
- visibleCount++;
- }
+ if (updateVisibility) {
+ foreach (QAbstract3DSeries *current, seriesList) {
+ if (current->isVisible())
+ visibleCount++;
+ }
- if (visibleCount != m_visibleSeriesList.size())
- m_visibleSeriesList.resize(visibleCount);
+ if (visibleCount != m_visibleSeriesList.size())
+ m_visibleSeriesList.resize(visibleCount);
- visibleCount = 0;
+ visibleCount = 0;
+ }
foreach (QAbstract3DSeries *current, seriesList) {
if (current->isVisible())
- m_visibleSeriesList[visibleCount++].populate(current);
+ m_visibleSeriesList[visibleCount++].populate(current, this);
}
}
diff --git a/src/datavisualization/engine/abstract3drenderer_p.h b/src/datavisualization/engine/abstract3drenderer_p.h
index 6582fbc3..fe213b33 100644
--- a/src/datavisualization/engine/abstract3drenderer_p.h
+++ b/src/datavisualization/engine/abstract3drenderer_p.h
@@ -66,7 +66,6 @@ protected:
QDataVis::ShadowQuality m_cachedShadowQuality;
GLfloat m_autoScaleAdjustment;
- QString m_cachedObjFile;
QDataVis::SelectionFlags m_cachedSelectionMode;
QDataVis::ColorStyle m_cachedColorStyle;
@@ -104,7 +103,7 @@ public:
virtual ~Abstract3DRenderer();
virtual void updateData() = 0;
- virtual void updateSeries(const QList<QAbstract3DSeries *> &seriesList);
+ virtual void updateSeries(const QList<QAbstract3DSeries *> &seriesList, bool updateVisibility);
virtual void render(GLuint defaultFboHandle);
@@ -113,7 +112,6 @@ public:
virtual void updateTheme(Q3DTheme *theme);
virtual void updateSelectionMode(QDataVis::SelectionFlags newMode);
- virtual void updateMeshFileName(const QString &objFileName);
virtual void updateScene(Q3DScene *scene);
virtual void updateTextures() = 0;
virtual void initSelectionBuffer() = 0;
@@ -141,6 +139,8 @@ public:
virtual void updateMultiHighlightColor(const QColor &color);
virtual void updateMultiHighlightGradient(const QLinearGradient &gradient);
+ virtual void fixMeshFileName(QString &fileName, QAbstract3DSeries::Mesh mesh);
+
signals:
void needRender(); // Emit this if something in renderer causes need for another render pass.
void requestShadowQuality(QDataVis::ShadowQuality quality); // For automatic quality adjustments
@@ -153,7 +153,6 @@ protected:
void reInitShaders();
virtual void handleShadowQualityChange();
virtual void handleResize();
- virtual void loadMeshFile() = 0;
AxisRenderCache &axisCacheForOrientation(Q3DAbstractAxis::AxisOrientation orientation);
diff --git a/src/datavisualization/engine/bars3dcontroller.cpp b/src/datavisualization/engine/bars3dcontroller.cpp
index cb7ba5cb..7c3eff09 100644
--- a/src/datavisualization/engine/bars3dcontroller.cpp
+++ b/src/datavisualization/engine/bars3dcontroller.cpp
@@ -24,6 +24,8 @@
#include "q3dcategoryaxis_p.h"
#include "qbardataproxy_p.h"
#include "qbar3dseries_p.h"
+#include "thememanager_p.h"
+#include "q3dtheme_p.h"
#include <QMatrix4x4>
#include <qmath.h>
@@ -39,9 +41,6 @@ Bars3DController::Bars3DController(QRect boundRect)
m_barSpacing(QSizeF(1.0, 1.0)),
m_renderer(0)
{
- // Default bar type; specific to bars
- setBarType(QDataVis::MeshStyleBevelBars, false);
-
// Setting a null axis creates a new default axis according to orientation and graph type.
// Note: these cannot be set in the Abstract3DController constructor, as they will call virtual
// functions implemented by subclasses.
@@ -72,6 +71,13 @@ void Bars3DController::initializeOpenGL()
void Bars3DController::synchDataToRenderer()
{
+ // Background change requires reloading the meshes in bar graphs, so dirty the series visuals
+ if (m_themeManager->theme()->d_ptr->m_dirtyBits.backgroundEnabledDirty) {
+ m_isSeriesVisualsDirty = true;
+ foreach (QAbstract3DSeries *series, m_seriesList)
+ series->d_ptr->m_changeTracker.meshChanged = true;
+ }
+
Abstract3DController::synchDataToRenderer();
if (!isInitialized())
@@ -311,26 +317,6 @@ bool Bars3DController::isBarSpecRelative()
return m_isBarSpecRelative;
}
-void Bars3DController::setBarType(QDataVis::MeshStyle style, bool smooth)
-{
- QString objFile;
- if (style == QDataVis::MeshStyleBars)
- objFile = QStringLiteral(":/defaultMeshes/bar");
- else if (style == QDataVis::MeshStylePyramids)
- objFile = QStringLiteral(":/defaultMeshes/pyramid");
- else if (style == QDataVis::MeshStyleCones)
- objFile = QStringLiteral(":/defaultMeshes/cone");
- else if (style == QDataVis::MeshStyleCylinders)
- objFile = QStringLiteral(":/defaultMeshes/cylinder");
- else if (style == QDataVis::MeshStyleBevelBars)
- objFile = QStringLiteral(":/defaultMeshes/bevelbar");
-
- if (smooth)
- objFile += QStringLiteral("Smooth");
-
- Abstract3DController::setMeshFileName(objFile);
-}
-
void Bars3DController::setSelectionMode(QDataVis::SelectionFlags mode)
{
if (mode.testFlag(QDataVis::SelectionSlice)
diff --git a/src/datavisualization/engine/bars3dcontroller_p.h b/src/datavisualization/engine/bars3dcontroller_p.h
index e9f39541..71009024 100644
--- a/src/datavisualization/engine/bars3dcontroller_p.h
+++ b/src/datavisualization/engine/bars3dcontroller_p.h
@@ -88,7 +88,6 @@ public:
GLfloat barThickness();
QSizeF barSpacing();
bool isBarSpecRelative();
- void setBarType(QDataVis::MeshStyle style, bool smooth = false);
void setSelectionMode(QDataVis::SelectionFlags mode);
void setSelectedBar(const QPoint &position, QBar3DSeries *series);
diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp
index 142640b3..addad904 100644
--- a/src/datavisualization/engine/bars3drenderer.cpp
+++ b/src/datavisualization/engine/bars3drenderer.cpp
@@ -64,7 +64,6 @@ Bars3DRenderer::Bars3DRenderer(Bars3DController *controller)
m_selectionShader(0),
m_backgroundShader(0),
m_labelShader(0),
- m_barObj(0),
m_backgroundObj(0),
m_gridLineObj(0),
m_labelObj(0),
@@ -114,7 +113,6 @@ Bars3DRenderer::~Bars3DRenderer()
delete m_depthShader;
delete m_selectionShader;
delete m_backgroundShader;
- delete m_barObj;
delete m_backgroundObj;
delete m_gridLineObj;
delete m_labelObj;
@@ -297,9 +295,6 @@ void Bars3DRenderer::drawSlicedScene(const LabelItem &xLabel,
const LabelItem &zLabel)
{
GLfloat barPosX = 0;
- GLint startBar = 0;
- GLint stopBar = m_sliceSelection->size();
- GLint stepBar = 1;
QVector3D lightPos;
// Specify viewport
@@ -484,7 +479,8 @@ void Bars3DRenderer::drawSlicedScene(const LabelItem &xLabel,
gradientTexture = m_objectGradientTexture;
}
- for (int bar = startBar; bar != stopBar; bar += stepBar) {
+ int stopBar = m_sliceSelection->size();
+ for (int bar = 0; bar < stopBar; bar++) {
BarRenderItem *item = m_sliceSelection->at(bar);
if (!item)
continue;
@@ -517,6 +513,7 @@ void Bars3DRenderer::drawSlicedScene(const LabelItem &xLabel,
MVPMatrix = projectionViewMatrix * modelMatrix;
QVector3D barColor;
+ // TODO: Get color from correct series
if (itemMode && m_visualSelectedBarPos.x() == item->position().x()
&& m_visualSelectedBarPos.y() == item->position().y()) {
if (m_cachedColorStyle == QDataVis::ColorStyleUniform)
@@ -544,7 +541,9 @@ void Bars3DRenderer::drawSlicedScene(const LabelItem &xLabel,
}
// Draw the object
- m_drawer->drawObject(m_barShader, m_barObj, gradientTexture);
+ m_drawer->drawObject(m_barShader,
+ m_visibleSeriesList.at(item->seriesIndex()).object(),
+ gradientTexture);
}
}
@@ -591,7 +590,8 @@ void Bars3DRenderer::drawSlicedScene(const LabelItem &xLabel,
// TODO: Maybe use selection label instead of value? Should it be user controllable
// as well? (QTRD-2546)
if (itemMode && m_visualSelectedBarPos.x() == item->position().x()
- && m_visualSelectedBarPos.y() == item->position().y()) {
+ && m_visualSelectedBarPos.y() == item->position().y()
+ && item->seriesIndex() == m_visualSelectedBarSeriesIndex) {
m_drawer->drawLabel(*item, item->sliceLabelItem(), viewMatrix, projectionMatrix,
valuePositionComp, sliceValueRotation, item->height(),
m_cachedSelectionMode, m_labelShader, m_labelObj, activeCamera,
@@ -785,6 +785,7 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
const BarRenderItem &item = m_renderingArrays.at(series).at(row).at(bar);
if (!item.value())
continue;
+ ObjectHelper *barObj = m_visibleSeriesList.at(series).object();
// Set front face culling for negative valued bars and back face culling for
// positive valued bars to remove peter-panning issues
if (item.height() > 0) {
@@ -818,15 +819,15 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
// 1st attribute buffer : vertices
glEnableVertexAttribArray(m_depthShader->posAtt());
- glBindBuffer(GL_ARRAY_BUFFER, m_barObj->vertexBuf());
+ glBindBuffer(GL_ARRAY_BUFFER, barObj->vertexBuf());
glVertexAttribPointer(m_depthShader->posAtt(), 3, GL_FLOAT, GL_FALSE, 0,
(void *)0);
// Index buffer
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_barObj->elementBuf());
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, barObj->elementBuf());
// Draw the triangles
- glDrawElements(GL_TRIANGLES, m_barObj->indexCount(), GL_UNSIGNED_SHORT,
+ glDrawElements(GL_TRIANGLES, barObj->indexCount(), GL_UNSIGNED_SHORT,
(void *)0);
// Free buffers
@@ -890,6 +891,7 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
seriesPos += m_seriesStep;
continue;
}
+ ObjectHelper *barObj = m_visibleSeriesList.at(series).object();
if (item.height() < 0)
glCullFace(GL_FRONT);
@@ -926,15 +928,15 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
// 1st attribute buffer : vertices
glEnableVertexAttribArray(m_selectionShader->posAtt());
- glBindBuffer(GL_ARRAY_BUFFER, m_barObj->vertexBuf());
+ glBindBuffer(GL_ARRAY_BUFFER, barObj->vertexBuf());
glVertexAttribPointer(m_selectionShader->posAtt(), 3, GL_FLOAT, GL_FALSE, 0,
(void *)0);
// Index buffer
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_barObj->elementBuf());
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, barObj->elementBuf());
// Draw the triangles
- glDrawElements(GL_TRIANGLES, m_barObj->indexCount(), GL_UNSIGNED_SHORT,
+ glDrawElements(GL_TRIANGLES, barObj->indexCount(), GL_UNSIGNED_SHORT,
(void *)0);
// Free buffers
@@ -1001,6 +1003,14 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
if (m_sliceSelection && m_sliceSelection->size()) {
// Slice doesn't own its items, no need to delete them - just clear
m_sliceSelection->clear();
+ int reserveAmount = 0;
+ if (rowMode)
+ reserveAmount = m_renderColumns;
+ else
+ reserveAmount = m_renderRows;
+ if (m_cachedSelectionMode.testFlag(QDataVis::SelectionMultiSeries))
+ reserveAmount *= m_visibleSeriesList.size();
+ m_sliceSelection->reserve(reserveAmount);
}
// Set slice cache, i.e. axis cache from where slice labels are taken
if (rowMode)
@@ -1029,6 +1039,7 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
for (int bar = startBar; bar != stopBar; bar += stepBar) {
float seriesPos = m_seriesStart;
for (int series = 0; series < seriesCount; series++) {
+ ObjectHelper *barObj = m_visibleSeriesList.at(series).object();
BarRenderItem &item = m_renderingArrays[series][row][bar];
if (item.height() < 0)
@@ -1094,6 +1105,7 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
}
item.setTranslation(translation);
item.setPosition(QPoint(row, bar));
+ item.setSeriesIndex(series);
m_sliceSelection->append(&item);
barSelectionFound = true;
}
@@ -1112,6 +1124,7 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
item.setTranslation(modelMatrix.column(3).toVector3D());
item.setPosition(QPoint(row, bar));
if (m_selectionDirty && bar < m_renderColumns) {
+ item.setSeriesIndex(series);
if (!m_sliceTitleItem && m_axisCacheX.labelItems().size() > row)
m_sliceTitleItem = m_axisCacheX.labelItems().at(row);
m_sliceSelection->append(&item);
@@ -1138,6 +1151,7 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
item.setTranslation(translation);
item.setPosition(QPoint(row, bar));
if (m_selectionDirty && row < m_renderRows) {
+ item.setSeriesIndex(series);
if (!m_sliceTitleItem && m_axisCacheZ.labelItems().size() > bar)
m_sliceTitleItem = m_axisCacheZ.labelItems().at(bar);
m_sliceSelection->append(&item);
@@ -1176,7 +1190,7 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
m_barShader->setUniformValue(m_barShader->lightS(), shadowLightStrength);
// Draw the object
- m_drawer->drawObject(m_barShader, m_barObj, gradientTexture, m_depthTexture);
+ m_drawer->drawObject(m_barShader, barObj, gradientTexture, m_depthTexture);
} else
#endif
{
@@ -1184,7 +1198,7 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
m_barShader->setUniformValue(m_barShader->lightS(), lightStrength);
// Draw the object
- m_drawer->drawObject(m_barShader, m_barObj, gradientTexture);
+ m_drawer->drawObject(m_barShader, barObj, gradientTexture);
}
}
seriesPos += m_seriesStep;
@@ -1829,16 +1843,6 @@ void Bars3DRenderer::updateAxisRange(Q3DAbstractAxis::AxisOrientation orientatio
}
}
-void Bars3DRenderer::updateTheme(Q3DTheme *theme)
-{
- bool wasEnabled = m_cachedTheme->isBackgroundEnabled();
-
- Abstract3DRenderer::updateTheme(theme);
-
- if (theme->isBackgroundEnabled() != wasEnabled)
- loadMeshFile(); // Load changed bar type
-}
-
void Bars3DRenderer::updateSelectedBar(const QPoint &position, const QBar3DSeries *series)
{
m_selectedBarPos = position;
@@ -1914,21 +1918,6 @@ void Bars3DRenderer::updateShadowQuality(QDataVis::ShadowQuality quality)
#endif
}
-void Bars3DRenderer::loadMeshFile()
-{
- if (m_cachedObjFile.isEmpty())
- return;
-
- QString objectFileName = m_cachedObjFile;
- if (m_barObj)
- delete m_barObj;
- // If background is disabled, load full version of bar mesh
- if (!m_cachedTheme->isBackgroundEnabled())
- objectFileName.append(QStringLiteral("Full"));
- m_barObj = new ObjectHelper(objectFileName);
- m_barObj->load();
-}
-
void Bars3DRenderer::loadBackgroundMesh()
{
if (m_backgroundObj)
@@ -1962,6 +1951,16 @@ void Bars3DRenderer::updateTextures()
m_updateLabels = true;
}
+void Bars3DRenderer::fixMeshFileName(QString &fileName, QAbstract3DSeries::Mesh mesh)
+{
+ if (!m_cachedTheme->isBackgroundEnabled()) {
+ // Load full version of meshes that have it available
+ // Note: Minimal and Point not supported in bar charts
+ if (mesh != QAbstract3DSeries::MeshSphere)
+ fileName.append(QStringLiteral("Full"));
+ }
+}
+
void Bars3DRenderer::calculateSceneScalingFactors()
{
// Calculate scene scaling and translation factors
diff --git a/src/datavisualization/engine/bars3drenderer_p.h b/src/datavisualization/engine/bars3drenderer_p.h
index f3e9103b..47c77537 100644
--- a/src/datavisualization/engine/bars3drenderer_p.h
+++ b/src/datavisualization/engine/bars3drenderer_p.h
@@ -74,7 +74,6 @@ private:
ShaderHelper *m_selectionShader;
ShaderHelper *m_backgroundShader;
ShaderHelper *m_labelShader;
- ObjectHelper *m_barObj;
ObjectHelper *m_backgroundObj;
ObjectHelper *m_gridLineObj;
ObjectHelper *m_labelObj;
@@ -122,7 +121,6 @@ public:
protected:
virtual void initializeOpenGL();
- virtual void loadMeshFile();
public slots:
void updateBarSpecs(GLfloat thicknessRatio = 1.0f,
@@ -141,7 +139,7 @@ private:
virtual void initShaders(const QString &vertexShader, const QString &fragmentShader);
virtual void updateShadowQuality(QDataVis::ShadowQuality quality);
virtual void updateTextures();
- virtual void updateTheme(Q3DTheme *theme);
+ virtual void fixMeshFileName(QString &fileName, QAbstract3DSeries::Mesh mesh);
void drawSlicedScene(const LabelItem &xLabel, const LabelItem &yLabel, const LabelItem &zLabel);
void drawScene(GLuint defaultFboHandle);
diff --git a/src/datavisualization/engine/engine.qrc b/src/datavisualization/engine/engine.qrc
index ecf9e29b..8fcaecec 100644
--- a/src/datavisualization/engine/engine.qrc
+++ b/src/datavisualization/engine/engine.qrc
@@ -24,9 +24,9 @@
<file alias="bevelbarSmoothFull">meshes/barFilledSmooth.obj</file>
<file alias="barFull">meshes/cubeFilledFlat.obj</file>
<file alias="barSmoothFull">meshes/cubeFilledSmooth.obj</file>
- <file alias="dotSmooth">meshes/scatterdot.obj</file>
- <file alias="dot">meshes/scatterdotFlat.obj</file>
<file alias="negativeBackground">meshes/backgroundNegatives.obj</file>
+ <file alias="minimal">meshes/minimalFlat.obj</file>
+ <file alias="minimalSmooth">meshes/minimalSmooth.obj</file>
</qresource>
<qresource prefix="/shaders">
<file alias="fragment">shaders/default.frag</file>
diff --git a/src/datavisualization/engine/meshes/scatterdotFlat.obj b/src/datavisualization/engine/meshes/minimalFlat.obj
index 9ab60a21..9ab60a21 100644
--- a/src/datavisualization/engine/meshes/scatterdotFlat.obj
+++ b/src/datavisualization/engine/meshes/minimalFlat.obj
diff --git a/src/datavisualization/engine/meshes/scatterdot.obj b/src/datavisualization/engine/meshes/minimalSmooth.obj
index dd2e77d3..dd2e77d3 100644
--- a/src/datavisualization/engine/meshes/scatterdot.obj
+++ b/src/datavisualization/engine/meshes/minimalSmooth.obj
diff --git a/src/datavisualization/engine/q3dbars.cpp b/src/datavisualization/engine/q3dbars.cpp
index 52db2100..095c5d8d 100644
--- a/src/datavisualization/engine/q3dbars.cpp
+++ b/src/datavisualization/engine/q3dbars.cpp
@@ -106,8 +106,6 @@ Q3DBars::Q3DBars()
&Q3DBars::selectionModeChanged);
QObject::connect(d_ptr->m_shared, &Abstract3DController::shadowQualityChanged, this,
&Q3DBars::shadowQualityChanged);
- QObject::connect(d_ptr->m_shared, &Abstract3DController::meshFileNameChanged, this,
- &Q3DBars::meshFileNameChanged);
QObject::connect(d_ptr->m_shared, &Abstract3DController::themeChanged, this,
&Q3DBars::themeChanged);
QObject::connect(d_ptr->m_shared, &Abstract3DController::colorStyleChanged, this,
@@ -300,18 +298,6 @@ bool Q3DBars::isBarSpacingRelative()
}
/*!
- * Sets the bar \a style to one of the values in \c QDataVis::MeshStyle. It is preset to
- * \c QDataVis::MeshStyleBars by default. A \a smooth flag can be used to set shading to smooth.
- * It is \c false by default.
- *
- * \sa setMeshFileName()
- */
-void Q3DBars::setBarType(QDataVis::MeshStyle style, bool smooth)
-{
- d_ptr->m_shared->setBarType(style, smooth);
-}
-
-/*!
* \property Q3DBars::theme
*
* A user-defined theme.
@@ -345,25 +331,6 @@ QDataVis::SelectionFlags Q3DBars::selectionMode() const
}
/*!
- * \property Q3DBars::meshFileName
- *
- * Override bar type with a mesh object located in \a objFileName.
- * \note Object needs to be in Wavefront obj format and include vertices, normals and UVs.
- * It also needs to be in triangles.
- *
- * \sa setBarType()
- */
-void Q3DBars::setMeshFileName(const QString &objFileName)
-{
- d_ptr->m_shared->setMeshFileName(objFileName);
-}
-
-QString Q3DBars::meshFileName() const
-{
- return d_ptr->m_shared->meshFileName();
-}
-
-/*!
* \property Q3DBars::scene
*
* This property contains the read only Q3DScene that can be used to access e.g. camera object.
diff --git a/src/datavisualization/engine/q3dbars.h b/src/datavisualization/engine/q3dbars.h
index c08db74a..37243a0d 100644
--- a/src/datavisualization/engine/q3dbars.h
+++ b/src/datavisualization/engine/q3dbars.h
@@ -42,7 +42,6 @@ class QT_DATAVISUALIZATION_EXPORT Q3DBars : public Q3DWindow
Q_PROPERTY(float barThickness READ barThickness WRITE setBarThickness NOTIFY barThicknessChanged)
Q_PROPERTY(QSizeF barSpacing READ barSpacing WRITE setBarSpacing NOTIFY barSpacingChanged)
Q_PROPERTY(bool barSpacingRelative READ isBarSpacingRelative WRITE setBarSpacingRelative NOTIFY barSpacingRelativeChanged)
- Q_PROPERTY(QString meshFileName READ meshFileName WRITE setMeshFileName NOTIFY meshFileNameChanged)
Q_PROPERTY(Q3DTheme* theme READ theme WRITE setTheme NOTIFY themeChanged)
Q_PROPERTY(Q3DScene* scene READ scene)
Q_PROPERTY(QtDataVisualization::QDataVis::ColorStyle colorStyle READ colorStyle WRITE setColorStyle NOTIFY colorStyleChanged)
@@ -61,9 +60,6 @@ public:
void removeSeries(QBar3DSeries *series);
QList<QBar3DSeries *> seriesList();
- // TODO: Move to dataset object once that is done QTRD-2121
- void setBarType(QDataVis::MeshStyle style, bool smooth = false);
-
void setTheme(Q3DTheme *theme);
Q3DTheme *theme() const;
@@ -76,10 +72,6 @@ public:
void setBarSpacingRelative(bool relative);
bool isBarSpacingRelative();
- // TODO: Move to dataset object once that is done QTRD-2121
- void setMeshFileName(const QString &objFileName);
- QString meshFileName() const;
-
void setSelectionMode(QDataVis::SelectionFlags mode);
QDataVis::SelectionFlags selectionMode() const;
@@ -123,7 +115,6 @@ signals:
void barThicknessChanged(float thicknessRatio);
void barSpacingChanged(QSizeF spacing);
void barSpacingRelativeChanged(bool relative);
- void meshFileNameChanged(QString filename);
void themeChanged(Q3DTheme *theme);
void colorStyleChanged(QDataVis::ColorStyle style);
void barColorChanged(QColor color);
diff --git a/src/datavisualization/engine/q3dscatter.cpp b/src/datavisualization/engine/q3dscatter.cpp
index acacaa8f..a71bdb18 100644
--- a/src/datavisualization/engine/q3dscatter.cpp
+++ b/src/datavisualization/engine/q3dscatter.cpp
@@ -90,8 +90,6 @@ Q3DScatter::Q3DScatter()
&Q3DScatter::selectionModeChanged);
QObject::connect(d_ptr->m_shared, &Abstract3DController::shadowQualityChanged, this,
&Q3DScatter::shadowQualityChanged);
- QObject::connect(d_ptr->m_shared, &Abstract3DController::meshFileNameChanged, this,
- &Q3DScatter::meshFileNameChanged);
QObject::connect(d_ptr->m_shared, &Abstract3DController::themeChanged, this,
&Q3DScatter::themeChanged);
QObject::connect(d_ptr->m_shared, &Abstract3DController::colorStyleChanged, this,
@@ -221,18 +219,6 @@ void Q3DScatter::setHeight(const int height)
}
/*!
- * Sets the item \a style to one of the values in \c QDataVis::MeshStyle. It is preset to
- * \c QDataVis::MeshStyleSpheres by default. A \a smooth flag can be used to set shading to smooth.
- * It is \c false by default.
- *
- * \sa setMeshFileName()
- */
-void Q3DScatter::setObjectType(QDataVis::MeshStyle style, bool smooth)
-{
- d_ptr->m_shared->setObjectType(style, smooth);
-}
-
-/*!
* \property Q3DScatter::theme
*
* TODO: Add docs
@@ -266,25 +252,6 @@ QDataVis::SelectionFlags Q3DScatter::selectionMode() const
}
/*!
- * \property Q3DScatter::meshFileName
- *
- * Override item type with a mesh object located in \a objFileName.
- * \note Object needs to be in Wavefront obj format and include vertices, normals and UVs.
- * It also needs to be in triangles.
- *
- * \sa setObjectType()
- */
-void Q3DScatter::setMeshFileName(const QString &objFileName)
-{
- d_ptr->m_shared->setMeshFileName(objFileName);
-}
-
-QString Q3DScatter::meshFileName() const
-{
- return d_ptr->m_shared->meshFileName();
-}
-
-/*!
* \property Q3DScatter::scene
*
* This property contains the read only Q3DScene that can be used to access e.g. camera object.
diff --git a/src/datavisualization/engine/q3dscatter.h b/src/datavisualization/engine/q3dscatter.h
index bec6a647..917b31bc 100644
--- a/src/datavisualization/engine/q3dscatter.h
+++ b/src/datavisualization/engine/q3dscatter.h
@@ -39,7 +39,6 @@ class QT_DATAVISUALIZATION_EXPORT Q3DScatter : public Q3DWindow
Q_OBJECT
Q_PROPERTY(QtDataVisualization::QDataVis::SelectionFlags selectionMode READ selectionMode WRITE setSelectionMode NOTIFY selectionModeChanged)
Q_PROPERTY(QtDataVisualization::QDataVis::ShadowQuality shadowQuality READ shadowQuality WRITE setShadowQuality NOTIFY shadowQualityChanged)
- Q_PROPERTY(QString meshFileName READ meshFileName WRITE setMeshFileName NOTIFY meshFileNameChanged)
Q_PROPERTY(Q3DTheme* theme READ theme WRITE setTheme NOTIFY themeChanged)
Q_PROPERTY(Q3DScene* scene READ scene)
Q_PROPERTY(QtDataVisualization::QDataVis::ColorStyle colorStyle READ colorStyle WRITE setColorStyle NOTIFY colorStyleChanged)
@@ -58,14 +57,9 @@ public:
void removeSeries(QScatter3DSeries *series);
QList<QScatter3DSeries *> seriesList();
- void setObjectType(QDataVis::MeshStyle style, bool smooth = false);
-
void setTheme(Q3DTheme *theme);
Q3DTheme *theme() const;
- void setMeshFileName(const QString &objFileName);
- QString meshFileName() const;
-
void setSelectionMode(QDataVis::SelectionFlags mode);
QDataVis::SelectionFlags selectionMode() const;
@@ -106,7 +100,6 @@ public:
signals:
void selectionModeChanged(QDataVis::SelectionFlags mode);
void shadowQualityChanged(QDataVis::ShadowQuality quality);
- void meshFileNameChanged(QString filename);
void themeChanged(Q3DTheme* theme);
void colorStyleChanged(QDataVis::ColorStyle style);
void itemColorChanged(QColor color);
diff --git a/src/datavisualization/engine/scatter3dcontroller.cpp b/src/datavisualization/engine/scatter3dcontroller.cpp
index 08668dbb..6923f26e 100644
--- a/src/datavisualization/engine/scatter3dcontroller.cpp
+++ b/src/datavisualization/engine/scatter3dcontroller.cpp
@@ -35,9 +35,6 @@ Scatter3DController::Scatter3DController(QRect boundRect)
m_selectedItem(invalidSelectionIndex()),
m_selectedItemSeries(0)
{
- // Default object type; specific to scatter
- setObjectType(QDataVis::MeshStyleSpheres, false);
-
// Setting a null axis creates a new default axis according to orientation and graph type.
// Note: These cannot be set in Abstract3DController constructor, as they will call virtual
// functions implemented by subclasses.
@@ -197,33 +194,6 @@ void Scatter3DController::handleAxisRangeChangedBySender(QObject *sender)
setSelectedItem(m_selectedItem, m_selectedItemSeries);
}
-void Scatter3DController::setObjectType(QDataVis::MeshStyle style, bool smooth)
-{
- QString objFile;
- if (style == QDataVis::MeshStyleSpheres) {
- if (smooth)
- objFile = QStringLiteral(":/defaultMeshes/sphereSmooth");
- else
- objFile = QStringLiteral(":/defaultMeshes/sphere");
- } else if (style == QDataVis::MeshStyleDots) {
- if (smooth)
- objFile = QStringLiteral(":/defaultMeshes/dotSmooth");
- else
- objFile = QStringLiteral(":/defaultMeshes/dot");
- } else if (style == QDataVis::MeshStyleBars) {
- if (smooth)
- objFile = QStringLiteral(":/defaultMeshes/barSmoothFull");
- else
- objFile = QStringLiteral(":/defaultMeshes/barFull");
- } else {
- objFile = QString();
-#if defined(QT_OPENGL_ES_2)
- qWarning("MeshStylePoints is not fully supported on OpenGL ES2");
-#endif
- }
- Abstract3DController::setMeshFileName(objFile);
-}
-
void Scatter3DController::setSelectionMode(QDataVis::SelectionFlags mode)
{
// We only support single item selection mode and no selection mode
diff --git a/src/datavisualization/engine/scatter3dcontroller_p.h b/src/datavisualization/engine/scatter3dcontroller_p.h
index 349b226a..838c8010 100644
--- a/src/datavisualization/engine/scatter3dcontroller_p.h
+++ b/src/datavisualization/engine/scatter3dcontroller_p.h
@@ -68,9 +68,6 @@ public:
void initializeOpenGL();
- // Object type
- void setObjectType(QDataVis::MeshStyle style, bool smooth = false);
-
// Change selection mode
void setSelectionMode(QDataVis::SelectionFlags mode);
diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp
index 24e33ba6..27262c4c 100644
--- a/src/datavisualization/engine/scatter3drenderer.cpp
+++ b/src/datavisualization/engine/scatter3drenderer.cpp
@@ -66,7 +66,6 @@ Scatter3DRenderer::Scatter3DRenderer(Scatter3DController *controller)
m_selectionShader(0),
m_backgroundShader(0),
m_labelShader(0),
- m_dotObj(0),
m_backgroundObj(0),
m_gridLineObj(0),
m_labelObj(0),
@@ -86,8 +85,7 @@ Scatter3DRenderer::Scatter3DRenderer(Scatter3DController *controller)
m_selectedSeries(0),
m_areaSize(QSizeF(0.0, 0.0)),
m_dotSizeScale(1.0f),
- m_hasHeightAdjustmentChanged(true),
- m_drawingPoints(false)
+ m_hasHeightAdjustmentChanged(true)
{
initializeOpenGLFunctions();
initializeOpenGL();
@@ -105,7 +103,6 @@ Scatter3DRenderer::~Scatter3DRenderer()
delete m_selectionShader;
delete m_backgroundShader;
delete m_labelShader;
- delete m_dotObj;
delete m_backgroundObj;
delete m_gridLineObj;
delete m_labelObj;
@@ -284,8 +281,18 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
QMatrix4x4 depthProjectionMatrix;
QMatrix4x4 depthProjectionViewMatrix;
+ // Check if we have any series with points
+ bool havePointSeries = false;
+ bool haveMeshSeries = false;
+ for (int i = 0; i < seriesCount; i++) {
+ if (m_visibleSeriesList.at(i).mesh() == QAbstract3DSeries::MeshPoint)
+ havePointSeries = true;
+ else
+ haveMeshSeries = true;
+ }
+
#if !defined(QT_OPENGL_ES_2)
- if (m_drawingPoints) {
+ if (havePointSeries) {
glEnable(GL_POINT_SMOOTH);
glEnable(GL_PROGRAM_POINT_SIZE);
// Scale points based on shadow quality for shadows, not by zoom level
@@ -335,6 +342,8 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
// Draw dots to depth buffer
for (int series = 0; series < seriesCount; series++) {
+ ObjectHelper *dotObj = m_visibleSeriesList.at(series).object();
+ bool drawingPoints = (m_visibleSeriesList.at(series).mesh() == QAbstract3DSeries::MeshPoint);
for (int dot = 0; dot < m_renderingArrays.at(series).size(); dot++) {
const ScatterRenderItem &item = m_renderingArrays.at(series).at(dot);
if (!item.isVisible())
@@ -344,7 +353,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
QMatrix4x4 MVPMatrix;
modelMatrix.translate(item.translation());
- if (!m_drawingPoints) {
+ if (!drawingPoints) {
modelMatrix.scale(modelScaler);
// TODO: Remove all references to item size?
//modelMatrix.scale(QVector3D(widthMultiplier * item.size() + widthScaler,
@@ -356,20 +365,20 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
m_depthShader->setUniformValue(m_depthShader->MVP(), MVPMatrix);
- if (m_drawingPoints) {
+ if (drawingPoints) {
m_drawer->drawPoint(m_depthShader);
} else {
// 1st attribute buffer : vertices
glEnableVertexAttribArray(m_depthShader->posAtt());
- glBindBuffer(GL_ARRAY_BUFFER, m_dotObj->vertexBuf());
+ glBindBuffer(GL_ARRAY_BUFFER, dotObj->vertexBuf());
glVertexAttribPointer(m_depthShader->posAtt(), 3, GL_FLOAT, GL_FALSE, 0,
(void *)0);
// Index buffer
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_dotObj->elementBuf());
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, dotObj->elementBuf());
// Draw the triangles
- glDrawElements(GL_TRIANGLES, m_dotObj->indexCount(), GL_UNSIGNED_SHORT,
+ glDrawElements(GL_TRIANGLES, dotObj->indexCount(), GL_UNSIGNED_SHORT,
(void *)0);
// Free buffers
@@ -409,24 +418,18 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
#endif
}
- if (m_drawingPoints)
+ if (havePointSeries)
glPointSize(m_dotSizeScale * activeCamera->zoomLevel()); // Scale points based on zoom
- ShaderHelper *selectionShader = m_selectionShader;
+ ShaderHelper *pointSelectionShader = m_selectionShader;
#else
- ShaderHelper *selectionShader;
- if (m_drawingPoints)
- selectionShader = m_pointShader;
- else
- selectionShader = m_selectionShader;
+ ShaderHelper *pointSelectionShader = m_pointShader;
#endif
+ ShaderHelper *selectionShader = m_selectionShader;
// Skip selection mode drawing if we have no selection mode
if (m_cachedSelectionMode > QDataVis::SelectionNone
&& SelectOnScene == m_selectionState) {
- // Bind selection shader
- selectionShader->bind();
-
// Draw dots to selection buffer
glBindFramebuffer(GL_FRAMEBUFFER, m_selectionFrameBuffer);
glEnable(GL_DEPTH_TEST); // Needed, otherwise the depth render buffer is not used
@@ -438,7 +441,23 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
int totalArraySize = 0;
int dotNo = 0;
+ // Init previous to opposite of first to ensure we change binding for first series
+ bool previousDrawingPoints = (m_visibleSeriesList.at(0).mesh() != QAbstract3DSeries::MeshPoint);
for (int series = 0; series < seriesCount; series++) {
+ ObjectHelper *dotObj = m_visibleSeriesList.at(series).object();
+ bool drawingPoints = (m_visibleSeriesList.at(series).mesh() == QAbstract3DSeries::MeshPoint);
+ // Rebind selection shader if it has changed
+ if (drawingPoints != previousDrawingPoints) {
+ previousDrawingPoints = drawingPoints;
+ if (series) // Don't release for first series
+ selectionShader->release();
+ if (drawingPoints)
+ selectionShader = pointSelectionShader;
+ else
+ selectionShader = m_selectionShader;
+
+ selectionShader->bind();
+ }
arraySize = m_renderingArrays.at(series).size();
totalArraySize += arraySize;
@@ -454,7 +473,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
QMatrix4x4 MVPMatrix;
modelMatrix.translate(item.translation());
- if (!m_drawingPoints) {
+ if (!drawingPoints) {
modelMatrix.scale(modelScaler);
// TODO: Remove all references to item size?
//modelMatrix.scale(QVector3D(widthMultiplier * item.size() + widthScaler,
@@ -470,20 +489,20 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
selectionShader->setUniformValue(selectionShader->MVP(), MVPMatrix);
selectionShader->setUniformValue(selectionShader->color(), dotColor);
- if (m_drawingPoints) {
+ if (drawingPoints) {
m_drawer->drawPoint(selectionShader);
} else {
// 1st attribute buffer : vertices
glEnableVertexAttribArray(selectionShader->posAtt());
- glBindBuffer(GL_ARRAY_BUFFER, m_dotObj->vertexBuf());
+ glBindBuffer(GL_ARRAY_BUFFER, dotObj->vertexBuf());
glVertexAttribPointer(selectionShader->posAtt(), 3, GL_FLOAT, GL_FALSE, 0,
(void *)0);
// Index buffer
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_dotObj->elementBuf());
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, dotObj->elementBuf());
// Draw the triangles
- glDrawElements(GL_TRIANGLES, m_dotObj->indexCount(), GL_UNSIGNED_SHORT,
+ glDrawElements(GL_TRIANGLES, dotObj->indexCount(), GL_UNSIGNED_SHORT,
(void *)0);
// Free buffers
@@ -508,7 +527,8 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
glBindFramebuffer(GL_FRAMEBUFFER, defaultFboHandle);
// Release selection shader
- selectionShader->release();
+ if (seriesCount)
+ selectionShader->release();
#if 0 // Use this if you want to see what is being drawn to the framebuffer
m_labelShader->bind();
@@ -525,12 +545,15 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
#endif
}
- // Bind dot shader
+ // Draw dots
ShaderHelper *dotShader = 0;
GLuint gradientTexture = 0;
+ bool dotSelectionFound = false;
+ ScatterRenderItem *selectedItem(0);
+ int dotNo = 0;
- if (!m_drawingPoints) {
- // Set default shader
+ bool previousDrawingPoints = false;
+ if (haveMeshSeries) {
dotShader = m_dotShader;
dotShader->bind();
@@ -538,9 +561,8 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
dotShader->setUniformValue(dotShader->lightP(), lightPos);
dotShader->setUniformValue(dotShader->view(), viewMatrix);
dotShader->setUniformValue(dotShader->ambientS(), m_cachedTheme->ambientLightStrength());
- if (m_cachedColorStyle != QDataVis::ColorStyleUniform && !m_drawingPoints) {
+ if (m_cachedColorStyle != QDataVis::ColorStyleUniform) {
if (m_cachedColorStyle == QDataVis::ColorStyleObjectGradient) {
- // Round the gradient off a bit to avoid it looping over
dotShader->setUniformValue(dotShader->gradientMin(), 0.0f);
dotShader->setUniformValue(dotShader->gradientHeight(), 0.5f);
} else {
@@ -550,24 +572,27 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
gradientTexture = m_objectGradientTexture;
}
- // Enable texture
glEnable(GL_TEXTURE_2D);
} else {
- // We can use selection shader for points
-#if !defined(QT_OPENGL_ES_2)
- dotShader = m_selectionShader;
-#else
- dotShader = m_pointShader;
-#endif
+ dotShader = pointSelectionShader;
dotShader->bind();
+ previousDrawingPoints = true;
}
- // Draw dots
- bool dotSelectionFound = false;
- ScatterRenderItem *selectedItem(0);
- int dotNo = 0;
-
for (int series = 0; series < seriesCount; series++) {
+ ObjectHelper *dotObj = m_visibleSeriesList.at(series).object();
+ bool drawingPoints = (m_visibleSeriesList.at(series).mesh() == QAbstract3DSeries::MeshPoint);
+ // Rebind selection shader if it has changed
+ if (drawingPoints != previousDrawingPoints) {
+ previousDrawingPoints = drawingPoints;
+ dotShader->release();
+ if (drawingPoints)
+ dotShader = pointSelectionShader;
+ else
+ dotShader = m_dotShader;
+ dotShader->bind();
+ }
+
// TODO: Color per series. Let's just hack it while testing with 2 series QTRD-2557
QVector3D baseColor = Utils::vectorFromColor(m_cachedObjectColor) * (series + 0.25f);
QVector3D dotColor = baseColor;
@@ -582,7 +607,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
QMatrix4x4 itModelMatrix;
modelMatrix.translate(item.translation());
- if (!m_drawingPoints) {
+ if (!drawingPoints) {
modelMatrix.scale(modelScaler);
itModelMatrix.scale(modelScaler);
// TODO: Remove all references to item size?
@@ -599,14 +624,14 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
MVPMatrix = projectionViewMatrix * modelMatrix;
#endif
- if (m_cachedColorStyle == QDataVis::ColorStyleUniform || m_drawingPoints)
+ if (m_cachedColorStyle == QDataVis::ColorStyleUniform || drawingPoints)
dotColor = baseColor;
else
gradientTexture = m_objectGradientTexture;
GLfloat lightStrength = m_cachedTheme->lightStrength();
if (m_cachedSelectionMode > QDataVis::SelectionNone && (m_selectedItemTotalIndex == dotNo)) {
- if (m_cachedColorStyle == QDataVis::ColorStyleUniform || m_drawingPoints)
+ if (m_cachedColorStyle == QDataVis::ColorStyleUniform || drawingPoints)
dotColor = Utils::vectorFromColor(m_cachedSingleHighlightColor);
else
gradientTexture = m_singleHighlightGradientTexture;
@@ -616,14 +641,14 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
dotSelectionFound = true;
}
- if (!m_drawingPoints) {
+ if (!drawingPoints) {
// Set shader bindings
dotShader->setUniformValue(dotShader->model(), modelMatrix);
dotShader->setUniformValue(dotShader->nModel(),
itModelMatrix.inverted().transposed());
}
dotShader->setUniformValue(dotShader->MVP(), MVPMatrix);
- if (m_cachedColorStyle == QDataVis::ColorStyleUniform || m_drawingPoints) {
+ if (m_cachedColorStyle == QDataVis::ColorStyleUniform || drawingPoints) {
dotShader->setUniformValue(dotShader->color(), dotColor);
} else if (m_cachedColorStyle == QDataVis::ColorStyleRangeGradient) {
dotShader->setUniformValue(dotShader->gradientMin(),
@@ -631,7 +656,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
}
#if !defined(QT_OPENGL_ES_2)
if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) {
- if (!m_drawingPoints) {
+ if (!drawingPoints) {
// Set shadow shader bindings
QMatrix4x4 depthMVPMatrix = depthProjectionViewMatrix * modelMatrix;
dotShader->setUniformValue(dotShader->shadowQ(), m_shadowQualityToShader);
@@ -639,7 +664,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
dotShader->setUniformValue(dotShader->lightS(), lightStrength / 10.0f);
// Draw the object
- m_drawer->drawObject(dotShader, m_dotObj, gradientTexture, m_depthTexture);
+ m_drawer->drawObject(dotShader, dotObj, gradientTexture, m_depthTexture);
} else {
// Draw the object
m_drawer->drawPoint(dotShader);
@@ -647,12 +672,11 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
} else
#endif
{
-
- if (!m_drawingPoints) {
+ if (!drawingPoints) {
// Set shadowless shader bindings
dotShader->setUniformValue(dotShader->lightS(), lightStrength);
// Draw the object
- m_drawer->drawObject(dotShader, m_dotObj, gradientTexture);
+ m_drawer->drawObject(dotShader, dotObj, gradientTexture);
} else {
// Draw the object
m_drawer->drawPoint(dotShader);
@@ -666,10 +690,9 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
dotShader->release();
#if !defined(QT_OPENGL_ES_2)
- if (m_drawingPoints) {
+ if (havePointSeries) {
glDisable(GL_POINT_SMOOTH);
glDisable(GL_PROGRAM_POINT_SIZE);
- glEnable(GL_TEXTURE_2D); // Enable texturing for background
}
#endif
@@ -1497,21 +1520,6 @@ void Scatter3DRenderer::updateShadowQuality(QDataVis::ShadowQuality quality)
#endif
}
-void Scatter3DRenderer::loadMeshFile()
-{
- if (m_dotObj) {
- delete m_dotObj;
- m_dotObj = 0;
- }
- if (m_cachedObjFile.isEmpty()) {
- m_drawingPoints = true;
- } else {
- m_drawingPoints = false;
- m_dotObj = new ObjectHelper(m_cachedObjFile);
- m_dotObj->load();
- }
-}
-
void Scatter3DRenderer::loadBackgroundMesh()
{
if (m_backgroundObj)
@@ -1542,6 +1550,16 @@ void Scatter3DRenderer::updateTextures()
m_updateLabels = true;
}
+void Scatter3DRenderer::fixMeshFileName(QString &fileName, QAbstract3DSeries::Mesh mesh)
+{
+ // Load full version of meshes that have it available
+ if (mesh != QAbstract3DSeries::MeshSphere
+ && mesh != QAbstract3DSeries::MeshMinimal
+ && mesh != QAbstract3DSeries::MeshPoint) {
+ fileName.append(QStringLiteral("Full"));
+ }
+}
+
void Scatter3DRenderer::updateAxisRange(Q3DAbstractAxis::AxisOrientation orientation,
float min, float max)
{
diff --git a/src/datavisualization/engine/scatter3drenderer_p.h b/src/datavisualization/engine/scatter3drenderer_p.h
index 6a0bbbec..104737eb 100644
--- a/src/datavisualization/engine/scatter3drenderer_p.h
+++ b/src/datavisualization/engine/scatter3drenderer_p.h
@@ -67,7 +67,6 @@ private:
ShaderHelper *m_selectionShader;
ShaderHelper *m_backgroundShader;
ShaderHelper *m_labelShader;
- ObjectHelper *m_dotObj;
ObjectHelper *m_backgroundObj;
ObjectHelper *m_gridLineObj;
ObjectHelper *m_labelObj;
@@ -89,7 +88,6 @@ private:
GLfloat m_dotSizeScale;
QVector3D m_translationOffset;
bool m_hasHeightAdjustmentChanged;
- bool m_drawingPoints;
ScatterRenderItem m_dummyRenderItem;
QVector<ScatterRenderItemArray> m_renderingArrays;
@@ -106,12 +104,12 @@ public:
protected:
virtual void initializeOpenGL();
- virtual void loadMeshFile();
private:
virtual void initShaders(const QString &vertexShader, const QString &fragmentShader);
virtual void updateShadowQuality(QDataVis::ShadowQuality quality);
virtual void updateTextures();
+ virtual void fixMeshFileName(QString &fileName, QAbstract3DSeries::Mesh mesh);
void drawScene(GLuint defaultFboHandle);
void handleResize();
diff --git a/src/datavisualization/engine/seriesrendercache.cpp b/src/datavisualization/engine/seriesrendercache.cpp
index 53bc97a1..7a4c0a14 100644
--- a/src/datavisualization/engine/seriesrendercache.cpp
+++ b/src/datavisualization/engine/seriesrendercache.cpp
@@ -17,11 +17,17 @@
****************************************************************************/
#include "seriesrendercache_p.h"
+#include "objecthelper_p.h"
+#include "abstract3drenderer_p.h"
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+const QString smoothString(QStringLiteral("Smooth"));
+
SeriesRenderCache::SeriesRenderCache()
- : m_series(0)
+ : m_series(0),
+ m_object(0),
+ m_mesh(QAbstract3DSeries::MeshCube)
{
}
@@ -29,12 +35,89 @@ SeriesRenderCache::~SeriesRenderCache()
{
}
-void SeriesRenderCache::populate(QAbstract3DSeries *series)
+void SeriesRenderCache::populate(QAbstract3DSeries *series, Abstract3DRenderer *renderer)
{
Q_ASSERT(series);
- m_series = series;
- m_itemLabelFormat = series->itemLabelFormat();
+ bool seriesChanged = false;
+
+ if (m_series != series) {
+ m_series = series;
+ seriesChanged = true;
+ }
+
+ QAbstract3DSeriesChangeBitField &changeTracker = series->d_ptr->m_changeTracker;
+
+ if (seriesChanged || changeTracker.itemLabelFormatChanged) {
+ m_itemLabelFormat = series->itemLabelFormat();
+ changeTracker.itemLabelFormatChanged = false;
+ }
+
+ if (seriesChanged || changeTracker.meshChanged || changeTracker.meshSmoothChanged
+ || changeTracker.userDefinedMeshChanged) {
+ m_mesh = series->mesh();
+ changeTracker.meshChanged = false;
+ changeTracker.meshSmoothChanged = false;
+ changeTracker.userDefinedMeshChanged = false;
+
+ QString meshFileName;
+
+ // Compose mesh filename
+ if (m_mesh == QAbstract3DSeries::MeshUserDefined) {
+ // Always use the supplied mesh directly
+ meshFileName = series->userDefinedMesh();
+ } else {
+ switch (m_mesh) {
+ case QAbstract3DSeries::MeshBar:
+ case QAbstract3DSeries::MeshCube:
+ meshFileName = QStringLiteral(":/defaultMeshes/bar");
+ break;
+ case QAbstract3DSeries::MeshPyramid:
+ meshFileName = QStringLiteral(":/defaultMeshes/pyramid");
+ break;
+ case QAbstract3DSeries::MeshCone:
+ meshFileName = QStringLiteral(":/defaultMeshes/cone");
+ break;
+ case QAbstract3DSeries::MeshCylinder:
+ meshFileName = QStringLiteral(":/defaultMeshes/cylinder");
+ break;
+ case QAbstract3DSeries::MeshBevelBar:
+ case QAbstract3DSeries::MeshBevelCube:
+ meshFileName = QStringLiteral(":/defaultMeshes/bevelbar");
+ break;
+ case QAbstract3DSeries::MeshSphere:
+ meshFileName = QStringLiteral(":/defaultMeshes/sphere");
+ break;
+ case QAbstract3DSeries::MeshMinimal:
+ meshFileName = QStringLiteral(":/defaultMeshes/minimal");
+ break;
+ case QAbstract3DSeries::MeshPoint:
+#if defined(QT_OPENGL_ES_2)
+ qWarning("QAbstract3DSeries::MeshPoint is not fully supported on OpenGL ES2");
+#endif
+ break;
+ default:
+ // Default to cube
+ meshFileName = QStringLiteral(":/defaultMeshes/bar");
+ break;
+ }
+
+ if (series->isMeshSmooth() && m_mesh != QAbstract3DSeries::MeshPoint)
+ meshFileName += smoothString;
+
+ // Give renderer an opportunity to customize the mesh
+ renderer->fixMeshFileName(meshFileName, m_mesh);
+ }
+
+ // TODO: Optimize by having some kind of object cache in renderer instead of having separate ObjectHelper for each series?
+ delete m_object;
+ if (meshFileName.isEmpty()) {
+ m_object = 0;
+ } else {
+ m_object = new ObjectHelper(meshFileName);
+ m_object->load();
+ }
+ }
// TODO: Add other visual element extractions
}
diff --git a/src/datavisualization/engine/seriesrendercache_p.h b/src/datavisualization/engine/seriesrendercache_p.h
index 34b1d97d..976b69c3 100644
--- a/src/datavisualization/engine/seriesrendercache_p.h
+++ b/src/datavisualization/engine/seriesrendercache_p.h
@@ -34,27 +34,35 @@
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+class Abstract3DRenderer;
+class ObjectHelper;
+
class SeriesRenderCache
{
public:
SeriesRenderCache();
virtual ~SeriesRenderCache();
- void populate(QAbstract3DSeries *series);
-
- inline const QString &itemLabelFormat() const { return m_itemLabelFormat; }
+ void populate(QAbstract3DSeries *series, Abstract3DRenderer *renderer);
// NOTE: Series pointer can only be used to access the series when syncing with controller.
// It is not guaranteed to be valid while rendering and should only be used as an identifier.
inline QAbstract3DSeries *series() const { return m_series; }
+ inline const QString &itemLabelFormat() const { return m_itemLabelFormat; }
+ inline const QAbstract3DSeries::Mesh &mesh() const { return m_mesh; }
+ inline ObjectHelper *object() const { return m_object; }
+
// TODO: Add other visual elements
protected:
- QString m_itemLabelFormat;
QAbstract3DSeries *m_series;
+ QString m_itemLabelFormat;
+ ObjectHelper *m_object;
+ QAbstract3DSeries::Mesh m_mesh;
};
QT_DATAVISUALIZATION_END_NAMESPACE
#endif
+
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp
index df4a12f0..b0df81d1 100644
--- a/src/datavisualization/engine/surface3drenderer.cpp
+++ b/src/datavisualization/engine/surface3drenderer.cpp
@@ -1940,12 +1940,6 @@ QString Surface3DRenderer::createSelectionLabel(float value, int column, int row
return labelText;
}
-void Surface3DRenderer::loadMeshFile()
-{
- // Do nothing, not yet supported by this renderer
- // TODO: To be used for overriding the selection ball mesh after technology preview
-}
-
void Surface3DRenderer::updateShadowQuality(QDataVis::ShadowQuality quality)
{
m_cachedShadowQuality = quality;
diff --git a/src/datavisualization/engine/surface3drenderer_p.h b/src/datavisualization/engine/surface3drenderer_p.h
index 9c1be32b..ce49cf13 100644
--- a/src/datavisualization/engine/surface3drenderer_p.h
+++ b/src/datavisualization/engine/surface3drenderer_p.h
@@ -147,7 +147,6 @@ public:
protected:
void initializeOpenGL();
- virtual void loadMeshFile();
signals:
void pointClicked(QPoint position, QSurface3DSeries *series);
diff --git a/src/datavisualization/global/qdatavisualizationenums.h b/src/datavisualization/global/qdatavisualizationenums.h
index a3773d0b..712ae38d 100644
--- a/src/datavisualization/global/qdatavisualizationenums.h
+++ b/src/datavisualization/global/qdatavisualizationenums.h
@@ -28,7 +28,6 @@ namespace QtDataVisualization {
class QT_DATAVISUALIZATION_EXPORT QDataVis : public QObject
{
Q_OBJECT
- Q_ENUMS(MeshStyle)
Q_ENUMS(CameraPreset)
Q_ENUMS(Theme)
Q_ENUMS(ShadowQuality)
@@ -47,19 +46,6 @@ public:
InputStateOnPinch
};
- // TODO: Move to series (QTRD-2557)
- enum MeshStyle {
- MeshStyleBars = 0,
- MeshStyleCubes = MeshStyleBars,
- MeshStylePyramids,
- MeshStyleCones,
- MeshStyleCylinders,
- MeshStyleBevelBars,
- MeshStyleSpheres,
- MeshStyleDots,
- MeshStylePoints
- };
-
// TODO: Move to camera (QTRD-2505)
enum CameraPreset {
CameraPresetNone = -1,
diff --git a/src/datavisualization/global/qtdatavisualizationenums.qdoc b/src/datavisualization/global/qtdatavisualizationenums.qdoc
index 42b6e8ad..cb285397 100644
--- a/src/datavisualization/global/qtdatavisualizationenums.qdoc
+++ b/src/datavisualization/global/qtdatavisualizationenums.qdoc
@@ -56,30 +56,6 @@
*/
/*!
- \enum QtDataVisualization::QDataVis::MeshStyle
-
- Predefined mesh types. All styles are not usable with all visualization types.
-
- \value MeshStyleBars
- Basic cubic bar. Usable only with Q3DBars.
- \value MeshStylePyramids
- Four-sided pyramid. Usable only with Q3DBars.
- \value MeshStyleCones
- Basic cone. Usable only with Q3DBars.
- \value MeshStyleCylinders
- Basic cylinder. Usable only with Q3DBars.
- \value MeshStyleBevelBars
- Slightly beveled (rounded) cubic bar. Usable only with Q3DBars.
- \value MeshStyleSpheres
- Sphere. Usable only with Q3DScatter.
- \value MeshStyleDots
- Triangular pyramid. Usable only with Q3DScatter.
- \value MeshStylePoints
- 2D spots. Usable only with Q3DScatter.
- \b Note: Shadows and color gradients do not affect this style.
-*/
-
-/*!
\enum QtDataVisualization::QDataVis::CameraPreset
Predefined positions for camera.
diff --git a/src/datavisualization/theme/q3dtheme.h b/src/datavisualization/theme/q3dtheme.h
index db044826..ea6e0a4b 100644
--- a/src/datavisualization/theme/q3dtheme.h
+++ b/src/datavisualization/theme/q3dtheme.h
@@ -160,6 +160,7 @@ protected:
friend class ThemeManager;
friend class Abstract3DRenderer;
+ friend class Bars3DController;
private:
Q_DISABLE_COPY(Q3DTheme)
diff --git a/src/datavisualization/utils/objecthelper.cpp b/src/datavisualization/utils/objecthelper.cpp
index 9660c215..180ce009 100644
--- a/src/datavisualization/utils/objecthelper.cpp
+++ b/src/datavisualization/utils/objecthelper.cpp
@@ -57,8 +57,6 @@ void ObjectHelper::load()
if (!loadOk)
qFatal("loading failed");
- //qDebug() << "vertex count" << vertices.size();;
-
// Index vertices
QVector<unsigned short> indices;
QVector<QVector3D> indexed_vertices;
@@ -68,7 +66,6 @@ void ObjectHelper::load()
indexed_normals);
m_indexCount = indices.size();
- //qDebug() << "index count" << m_indexCount;
glGenBuffers(1, &m_vertexbuffer);
glBindBuffer(GL_ARRAY_BUFFER, m_vertexbuffer);
diff --git a/src/datavisualizationqml2/declarativebars.cpp b/src/datavisualizationqml2/declarativebars.cpp
index ab08765e..91b338bd 100644
--- a/src/datavisualizationqml2/declarativebars.cpp
+++ b/src/datavisualizationqml2/declarativebars.cpp
@@ -23,8 +23,6 @@
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
-const QString smoothString(QStringLiteral("Smooth"));
-
DeclarativeBars::DeclarativeBars(QQuickItem *parent)
: AbstractDeclarative(parent),
m_shared(0),
@@ -40,8 +38,6 @@ DeclarativeBars::DeclarativeBars(QQuickItem *parent)
// Create the shared component on the main GUI thread.
m_shared = new Bars3DController(boundingRect().toRect());
AbstractDeclarative::setSharedController(m_shared);
- QObject::connect(m_shared, &Abstract3DController::meshFileNameChanged, this,
- &DeclarativeBars::meshFileNameChanged);
}
DeclarativeBars::~DeclarativeBars()
@@ -146,55 +142,6 @@ bool DeclarativeBars::isBarSpacingRelative() const
return m_shared->isBarSpecRelative();
}
-void DeclarativeBars::setBarType(QDataVis::MeshStyle style)
-{
- QString objFile = m_shared->meshFileName();
- bool smooth = objFile.endsWith(smoothString);
- m_shared->setBarType(style, smooth);
-}
-
-QDataVis::MeshStyle DeclarativeBars::barType() const
-{
- QString objFile = m_shared->meshFileName();
- if (objFile.contains("/sphere"))
- return QDataVis::MeshStyleSpheres;
- else
- return QDataVis::MeshStyleDots;
-}
-
-void DeclarativeBars::setBarSmoothingEnabled(bool enabled)
-{
- QString objFile = m_shared->meshFileName();
- if (objFile.endsWith(smoothString)) {
- if (enabled)
- return; // Already smooth; do nothing
- else // Rip Smooth off the end
- objFile.resize(objFile.indexOf(smoothString));
- } else {
- if (!enabled) // Already flat; do nothing
- return;
- else // Append Smooth to the end
- objFile.append(smoothString);
- }
- m_shared->setMeshFileName(objFile);
-}
-
-bool DeclarativeBars::isBarSmoothingEnabled() const
-{
- QString objFile = m_shared->meshFileName();
- return objFile.endsWith(smoothString);
-}
-
-void DeclarativeBars::setMeshFileName(const QString &objFileName)
-{
- m_shared->setMeshFileName(objFileName);
-}
-
-QString DeclarativeBars::meshFileName() const
-{
- return m_shared->meshFileName();
-}
-
QQmlListProperty<QBar3DSeries> DeclarativeBars::seriesList()
{
return QQmlListProperty<QBar3DSeries>(this, this,
diff --git a/src/datavisualizationqml2/declarativebars_p.h b/src/datavisualizationqml2/declarativebars_p.h
index 041be418..6db17788 100644
--- a/src/datavisualizationqml2/declarativebars_p.h
+++ b/src/datavisualizationqml2/declarativebars_p.h
@@ -51,12 +51,9 @@ class DeclarativeBars : public AbstractDeclarative
Q_PROPERTY(Q3DCategoryAxis *rowAxis READ rowAxis WRITE setRowAxis)
Q_PROPERTY(Q3DValueAxis *valueAxis READ valueAxis WRITE setValueAxis)
Q_PROPERTY(Q3DCategoryAxis *columnAxis READ columnAxis WRITE setColumnAxis)
- Q_PROPERTY(QtDataVisualization::QDataVis::MeshStyle barType READ barType WRITE setBarType NOTIFY meshFileNameChanged)
Q_PROPERTY(float barThickness READ barThickness WRITE setBarThickness NOTIFY barThicknessChanged)
Q_PROPERTY(QSizeF barSpacing READ barSpacing WRITE setBarSpacing NOTIFY barSpacingChanged)
Q_PROPERTY(bool barSpacingRelative READ isBarSpacingRelative WRITE setBarSpacingRelative NOTIFY barSpacingRelativeChanged)
- Q_PROPERTY(bool barSmoothingEnabled READ isBarSmoothingEnabled WRITE setBarSmoothingEnabled NOTIFY meshFileNameChanged)
- Q_PROPERTY(QString meshFileName READ meshFileName WRITE setMeshFileName NOTIFY meshFileNameChanged)
Q_PROPERTY(QQmlListProperty<QBar3DSeries> seriesList READ seriesList)
Q_CLASSINFO("DefaultProperty", "seriesList")
@@ -82,15 +79,6 @@ public:
void setBarSpacingRelative(bool relative);
bool isBarSpacingRelative() const;
- void setBarType(QDataVis::MeshStyle style);
- QDataVis::MeshStyle barType() const;
-
- void setBarSmoothingEnabled(bool enabled);
- bool isBarSmoothingEnabled() const;
-
- void setMeshFileName(const QString &objFileName);
- QString meshFileName() const;
-
QQmlListProperty<QBar3DSeries> seriesList();
static void appendSeriesFunc(QQmlListProperty<QBar3DSeries> *list, QBar3DSeries *series);
static int countSeriesFunc(QQmlListProperty<QBar3DSeries> *list);
diff --git a/src/datavisualizationqml2/declarativescatter.cpp b/src/datavisualizationqml2/declarativescatter.cpp
index 7efcf8a6..2848997f 100644
--- a/src/datavisualizationqml2/declarativescatter.cpp
+++ b/src/datavisualizationqml2/declarativescatter.cpp
@@ -22,8 +22,6 @@
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
-const QString smoothString(QStringLiteral("Smooth"));
-
DeclarativeScatter::DeclarativeScatter(QQuickItem *parent)
: AbstractDeclarative(parent),
m_shared(0),
@@ -39,9 +37,6 @@ DeclarativeScatter::DeclarativeScatter(QQuickItem *parent)
// Create the shared component on the main GUI thread.
m_shared = new Scatter3DController(boundingRect().toRect());
setSharedController(m_shared);
-
- QObject::connect(m_shared, &Abstract3DController::meshFileNameChanged, this,
- &DeclarativeScatter::meshFileNameChanged);
}
DeclarativeScatter::~DeclarativeScatter()
@@ -72,11 +67,6 @@ QSGNode *DeclarativeScatter::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeDa
return node;
}
-void DeclarativeScatter::setObjectColor(const QColor &baseColor)
-{
- m_shared->setBaseColor(baseColor);
-}
-
Q3DValueAxis *DeclarativeScatter::axisX() const
{
return static_cast<Q3DValueAxis *>(m_shared->axisX());
@@ -107,55 +97,6 @@ void DeclarativeScatter::setAxisZ(Q3DValueAxis *axis)
m_shared->setAxisZ(axis);
}
-void DeclarativeScatter::setObjectType(QDataVis::MeshStyle style)
-{
- QString objFile = m_shared->meshFileName();
- bool smooth = objFile.endsWith(smoothString);
- m_shared->setObjectType(style, smooth);
-}
-
-QDataVis::MeshStyle DeclarativeScatter::objectType() const
-{
- QString objFile = m_shared->meshFileName();
- if (objFile.contains("/sphere"))
- return QDataVis::MeshStyleSpheres;
- else
- return QDataVis::MeshStyleDots;
-}
-
-void DeclarativeScatter::setObjectSmoothingEnabled(bool enabled)
-{
- QString objFile = m_shared->meshFileName();
- if (objFile.endsWith(smoothString)) {
- if (enabled)
- return; // Already smooth; do nothing
- else // Rip Smooth off the end
- objFile.resize(objFile.indexOf(smoothString));
- } else {
- if (!enabled) // Already flat; do nothing
- return;
- else // Append Smooth to the end
- objFile.append(smoothString);
- }
- m_shared->setMeshFileName(objFile);
-}
-
-bool DeclarativeScatter::isObjectSmoothingEnabled() const
-{
- QString objFile = m_shared->meshFileName();
- return objFile.endsWith(smoothString);
-}
-
-void DeclarativeScatter::setMeshFileName(const QString &objFileName)
-{
- m_shared->setMeshFileName(objFileName);
-}
-
-QString DeclarativeScatter::meshFileName() const
-{
- return m_shared->meshFileName();
-}
-
QQmlListProperty<QScatter3DSeries> DeclarativeScatter::seriesList()
{
return QQmlListProperty<QScatter3DSeries>(this, this,
diff --git a/src/datavisualizationqml2/declarativescatter_p.h b/src/datavisualizationqml2/declarativescatter_p.h
index d42c3b23..7490deda 100644
--- a/src/datavisualizationqml2/declarativescatter_p.h
+++ b/src/datavisualizationqml2/declarativescatter_p.h
@@ -49,9 +49,6 @@ class DeclarativeScatter : public AbstractDeclarative
Q_PROPERTY(Q3DValueAxis *axisX READ axisX WRITE setAxisX)
Q_PROPERTY(Q3DValueAxis *axisY READ axisY WRITE setAxisY)
Q_PROPERTY(Q3DValueAxis *axisZ READ axisZ WRITE setAxisZ)
- Q_PROPERTY(QtDataVisualization::QDataVis::MeshStyle objectType READ objectType WRITE setObjectType NOTIFY meshFileNameChanged)
- Q_PROPERTY(bool objectSmoothingEnabled READ isObjectSmoothingEnabled WRITE setObjectSmoothingEnabled NOTIFY meshFileNameChanged)
- Q_PROPERTY(QString meshFileName READ meshFileName WRITE setMeshFileName NOTIFY meshFileNameChanged)
Q_PROPERTY(QQmlListProperty<QScatter3DSeries> seriesList READ seriesList)
Q_CLASSINFO("DefaultProperty", "seriesList")
@@ -59,8 +56,6 @@ public:
explicit DeclarativeScatter(QQuickItem *parent = 0);
~DeclarativeScatter();
- Q_INVOKABLE void setObjectColor(const QColor &baseColor); // TODO property (or more likely as part of data set)
-
Q3DValueAxis *axisX() const;
void setAxisX(Q3DValueAxis *axis);
Q3DValueAxis *axisY() const;
@@ -68,15 +63,6 @@ public:
Q3DValueAxis *axisZ() const;
void setAxisZ(Q3DValueAxis *axis);
- void setObjectType(QDataVis::MeshStyle style);
- QDataVis::MeshStyle objectType() const;
-
- void setObjectSmoothingEnabled(bool enabled);
- bool isObjectSmoothingEnabled() const;
-
- void setMeshFileName(const QString &objFileName);
- QString meshFileName() const;
-
QQmlListProperty<QScatter3DSeries> seriesList();
static void appendSeriesFunc(QQmlListProperty<QScatter3DSeries> *list, QScatter3DSeries *series);
static int countSeriesFunc(QQmlListProperty<QScatter3DSeries> *list);