From 8015a58ea819b41e0a896ea9e7d57d7f3a9f1c5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomi=20Korpip=C3=A4=C3=A4?= Date: Wed, 14 May 2014 13:40:35 +0300 Subject: Added visible flag and possibility to release ownership of custom item Task-number: QTRD-3080 Change-Id: I198930c48fe9bce6a158406aff5fbf31272b9afe Reviewed-by: Miikka Heikkinen --- src/datavisualization/data/customrenderitem.cpp | 3 ++- src/datavisualization/data/customrenderitem_p.h | 3 +++ src/datavisualization/data/qcustom3ditem.cpp | 26 ++++++++++++++++++++-- src/datavisualization/data/qcustom3ditem.h | 5 +++++ src/datavisualization/data/qcustom3ditem_p.h | 1 + ...tdatavisualization-qml-abstractdeclarative.qdoc | 8 +++++++ .../engine/abstract3dcontroller.cpp | 10 +++++++++ .../engine/abstract3dcontroller_p.h | 1 + .../engine/abstract3drenderer.cpp | 4 ++++ src/datavisualization/engine/qabstract3dgraph.cpp | 10 +++++++++ src/datavisualization/engine/qabstract3dgraph.h | 1 + 11 files changed, 69 insertions(+), 3 deletions(-) (limited to 'src/datavisualization') diff --git a/src/datavisualization/data/customrenderitem.cpp b/src/datavisualization/data/customrenderitem.cpp index ad1fba71..53db9bd1 100644 --- a/src/datavisualization/data/customrenderitem.cpp +++ b/src/datavisualization/data/customrenderitem.cpp @@ -23,7 +23,8 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION CustomRenderItem::CustomRenderItem() : AbstractRenderItem(), m_texture(0), - m_object(0) + m_object(0), + m_visible(true) { } diff --git a/src/datavisualization/data/customrenderitem_p.h b/src/datavisualization/data/customrenderitem_p.h index 0632f53e..70c162b7 100644 --- a/src/datavisualization/data/customrenderitem_p.h +++ b/src/datavisualization/data/customrenderitem_p.h @@ -49,12 +49,15 @@ public: inline QVector3D scaling() { return m_scaling; } inline void setBlendNeeded(bool blend) { m_needBlend = blend; } inline bool isBlendNeeded() { return m_needBlend; } + inline void setVisible(bool visible) { m_visible = visible; } + inline bool isVisible() { return m_visible; } private: GLuint m_texture; QVector3D m_scaling; ObjectHelper *m_object; bool m_needBlend; + bool m_visible; }; typedef QVector CustomRenderItemArray; diff --git a/src/datavisualization/data/qcustom3ditem.cpp b/src/datavisualization/data/qcustom3ditem.cpp index 70795fdf..285f5a39 100644 --- a/src/datavisualization/data/qcustom3ditem.cpp +++ b/src/datavisualization/data/qcustom3ditem.cpp @@ -187,6 +187,23 @@ QQuaternion QCustom3DItem::rotation() return d_ptr->m_rotation; } +/*! \property QCustom3DItem::visible + * + * Sets the item \a visible. Defaults to \c{true}. + */ +void QCustom3DItem::setVisible(bool visible) +{ + if (d_ptr->m_visible != visible) { + d_ptr->m_visible = visible; + emit visibleChanged(visible); + } +} + +bool QCustom3DItem::isVisible() +{ + return d_ptr->m_visible; +} + /*! * A convenience function to construct rotation quaternion from \a axis and \a angle. * @@ -242,7 +259,11 @@ QString QCustom3DItem::textureFile() QCustom3DItemPrivate::QCustom3DItemPrivate(QCustom3DItem *q, QObject *parent) : QObject(parent), - q_ptr(q) + q_ptr(q), + m_position(QVector3D(0.0f, 0.0f, 0.0f)), + m_scaling(QVector3D(0.1f, 0.1f, 0.1f)), + m_rotation(QQuaternion(0.0f, 0.0f, 0.0f, 0.0f)), + m_visible(true) { } @@ -254,7 +275,8 @@ QCustom3DItemPrivate::QCustom3DItemPrivate(QCustom3DItem *q, const QString &mesh m_meshFile(meshFile), m_position(position), m_scaling(scaling), - m_rotation(rotation) + m_rotation(rotation), + m_visible(true) { } diff --git a/src/datavisualization/data/qcustom3ditem.h b/src/datavisualization/data/qcustom3ditem.h index 394c51d7..c9d0cd63 100644 --- a/src/datavisualization/data/qcustom3ditem.h +++ b/src/datavisualization/data/qcustom3ditem.h @@ -36,6 +36,7 @@ class QT_DATAVISUALIZATION_EXPORT QCustom3DItem : public QObject Q_PROPERTY(QVector3D position READ position WRITE setPosition NOTIFY positionChanged) Q_PROPERTY(QVector3D scaling READ scaling WRITE setScaling NOTIFY scalingChanged) Q_PROPERTY(QQuaternion rotation READ rotation WRITE setRotation NOTIFY rotationChanged) + Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged) public: explicit QCustom3DItem(QObject *parent = 0); @@ -59,6 +60,9 @@ public: void setRotation(const QQuaternion &rotation); QQuaternion rotation(); + void setVisible(bool visible); + bool isVisible(); + Q_INVOKABLE void setRotationAxisAndAngle(const QVector3D &axis, float angle); void setTextureImage(const QImage &textureImage); @@ -69,6 +73,7 @@ signals: void positionChanged(const QVector3D &position); void scalingChanged(const QVector3D &scaling); void rotationChanged(const QQuaternion &rotation); + void visibleChanged(bool visible); protected: QScopedPointer d_ptr; diff --git a/src/datavisualization/data/qcustom3ditem_p.h b/src/datavisualization/data/qcustom3ditem_p.h index 77062768..f85ec5bf 100644 --- a/src/datavisualization/data/qcustom3ditem_p.h +++ b/src/datavisualization/data/qcustom3ditem_p.h @@ -53,6 +53,7 @@ public: QVector3D m_position; QVector3D m_scaling; QQuaternion m_rotation; + bool m_visible; private: friend class QCustom3DItem; diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc index 62e4034f..4fac937b 100644 --- a/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc +++ b/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc @@ -186,6 +186,14 @@ * \since Qt Data Visualization 1.1 */ +/*! + * \qmlmethod void AbstractGraph3D::releaseCustomItem(Custom3DItem item) + * + * Gets ownership of \a item back and removes the \a item from the graph. + * + * \since Qt Data Visualization 1.1 + */ + /*! * \qmlmethod int AbstractGraph3D::selectedLabelIndex() * diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp index 6b6f154d..78ac135b 100644 --- a/src/datavisualization/engine/abstract3dcontroller.cpp +++ b/src/datavisualization/engine/abstract3dcontroller.cpp @@ -911,6 +911,16 @@ void Abstract3DController::deleteCustomItem(const QVector3D &position) } } +void Abstract3DController::releaseCustomItem(QCustom3DItem *item) +{ + if (item && m_customItems.contains(item)) { + m_customItems.removeOne(item); + item->setParent(0); + m_isCustomDataDirty = true; + emitNeedRender(); + } +} + void Abstract3DController::handleAxisTitleChanged(const QString &title) { Q_UNUSED(title) diff --git a/src/datavisualization/engine/abstract3dcontroller_p.h b/src/datavisualization/engine/abstract3dcontroller_p.h index 41c75d8e..79320c25 100644 --- a/src/datavisualization/engine/abstract3dcontroller_p.h +++ b/src/datavisualization/engine/abstract3dcontroller_p.h @@ -244,6 +244,7 @@ public: void deleteCustomItems(); void deleteCustomItem(QCustom3DItem *item); void deleteCustomItem(const QVector3D &position); + void releaseCustomItem(QCustom3DItem *item); int selectedLabelIndex() const; QAbstract3DAxis *selectedAxis() const; diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp index bcf03ed7..6dcc46df 100644 --- a/src/datavisualization/engine/abstract3drenderer.cpp +++ b/src/datavisualization/engine/abstract3drenderer.cpp @@ -551,6 +551,7 @@ void Abstract3DRenderer::addCustomItem(QCustom3DItem *item) { //item->d_ptr->clearTextureImage(); QVector3D translation = convertPositionToTranslation(item->position()); newItem->setTranslation(translation); + newItem->setVisible(item->isVisible()); m_customRenderCache.append(newItem); } @@ -580,6 +581,9 @@ void Abstract3DRenderer::drawCustomItems(RenderingState state, // Draw custom items foreach (CustomRenderItem *item, m_customRenderCache) { + if (!item->isVisible()) + continue; + QMatrix4x4 modelMatrix; QMatrix4x4 itModelMatrix; QMatrix4x4 MVPMatrix; diff --git a/src/datavisualization/engine/qabstract3dgraph.cpp b/src/datavisualization/engine/qabstract3dgraph.cpp index b3a788cb..9818d176 100644 --- a/src/datavisualization/engine/qabstract3dgraph.cpp +++ b/src/datavisualization/engine/qabstract3dgraph.cpp @@ -426,6 +426,16 @@ void QAbstract3DGraph::removeCustomItemAt(const QVector3D &position) d_ptr->m_visualController->deleteCustomItem(position); } +/*! + * Gets ownership of given \a item back and removes the \a item from the graph. + * + * \since Qt Data Visualization 1.1 + */ +void QAbstract3DGraph::releaseCustomItem(QCustom3DItem *item) +{ + return d_ptr->m_visualController->releaseCustomItem(item); +} + /*! * Can be used to query the index of the selected label after receiving elementSelected signal with * any label type. Selection is valid until the next elementSelected signal. diff --git a/src/datavisualization/engine/qabstract3dgraph.h b/src/datavisualization/engine/qabstract3dgraph.h index bfc03cc1..23dba269 100644 --- a/src/datavisualization/engine/qabstract3dgraph.h +++ b/src/datavisualization/engine/qabstract3dgraph.h @@ -114,6 +114,7 @@ public: void removeCustomItems(); void removeCustomItem(QCustom3DItem *item); void removeCustomItemAt(const QVector3D &position); + void releaseCustomItem(QCustom3DItem *item); int selectedLabelIndex() const; QAbstract3DAxis *selectedAxis() const; -- cgit v1.2.3