diff options
Diffstat (limited to 'src/datavisualization/data')
-rw-r--r-- | src/datavisualization/data/customrenderitem_p.h | 5 | ||||
-rw-r--r-- | src/datavisualization/data/qcustom3ditem.cpp | 36 | ||||
-rw-r--r-- | src/datavisualization/data/qcustom3ditem.h | 1 | ||||
-rw-r--r-- | src/datavisualization/data/qcustom3ditem_p.h | 24 |
4 files changed, 56 insertions, 10 deletions
diff --git a/src/datavisualization/data/customrenderitem_p.h b/src/datavisualization/data/customrenderitem_p.h index 70c162b7..3bf8067e 100644 --- a/src/datavisualization/data/customrenderitem_p.h +++ b/src/datavisualization/data/customrenderitem_p.h @@ -34,6 +34,8 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION +class QCustom3DItem; + class CustomRenderItem : public AbstractRenderItem { public: @@ -51,6 +53,8 @@ public: inline bool isBlendNeeded() { return m_needBlend; } inline void setVisible(bool visible) { m_visible = visible; } inline bool isVisible() { return m_visible; } + inline void setItemPointer(QCustom3DItem *item) { m_item = item; } + inline QCustom3DItem *itemPointer() { return m_item; } private: GLuint m_texture; @@ -58,6 +62,7 @@ private: ObjectHelper *m_object; bool m_needBlend; bool m_visible; + QCustom3DItem *m_item; }; typedef QVector<CustomRenderItem *> CustomRenderItemArray; diff --git a/src/datavisualization/data/qcustom3ditem.cpp b/src/datavisualization/data/qcustom3ditem.cpp index 285f5a39..ca4cef16 100644 --- a/src/datavisualization/data/qcustom3ditem.cpp +++ b/src/datavisualization/data/qcustom3ditem.cpp @@ -123,7 +123,9 @@ void QCustom3DItem::setMeshFile(const QString &meshFile) { if (d_ptr->m_meshFile != meshFile) { d_ptr->m_meshFile = meshFile; + d_ptr->m_dirtyBits.meshDirty = true; emit meshFileChanged(meshFile); + emit d_ptr->needUpdate(); } } @@ -144,7 +146,9 @@ void QCustom3DItem::setPosition(const QVector3D &position) { if (d_ptr->m_position != position) { d_ptr->m_position = position; + d_ptr->m_dirtyBits.positionDirty = true; emit positionChanged(position); + emit d_ptr->needUpdate(); } } @@ -161,7 +165,9 @@ void QCustom3DItem::setScaling(const QVector3D &scaling) { if (d_ptr->m_scaling != scaling) { d_ptr->m_scaling = scaling; + d_ptr->m_dirtyBits.scalingDirty = true; emit scalingChanged(scaling); + emit d_ptr->needUpdate(); } } @@ -178,7 +184,9 @@ void QCustom3DItem::setRotation(const QQuaternion &rotation) { if (d_ptr->m_rotation != rotation) { d_ptr->m_rotation = rotation; + d_ptr->m_dirtyBits.rotationDirty = true; emit rotationChanged(rotation); + emit d_ptr->needUpdate(); } } @@ -195,7 +203,9 @@ void QCustom3DItem::setVisible(bool visible) { if (d_ptr->m_visible != visible) { d_ptr->m_visible = visible; + d_ptr->m_dirtyBits.visibleDirty = true; emit visibleChanged(visible); + emit d_ptr->needUpdate(); } } @@ -219,17 +229,21 @@ void QCustom3DItem::setRotationAxisAndAngle(const QVector3D &axis, float angle) */ void QCustom3DItem::setTextureImage(const QImage &textureImage) { - if (textureImage.isNull()) { - // Make a solid gray texture - d_ptr->m_textureImage = QImage(2, 2, QImage::Format_RGB32); - d_ptr->m_textureImage.fill(Qt::gray); - } else { - d_ptr->m_textureImage = textureImage; - } + if (textureImage != d_ptr->m_textureImage) { + if (textureImage.isNull()) { + // Make a solid gray texture + d_ptr->m_textureImage = QImage(2, 2, QImage::Format_RGB32); + d_ptr->m_textureImage.fill(Qt::gray); + } else { + d_ptr->m_textureImage = textureImage; + } - if (!d_ptr->m_textureFile.isEmpty()) { - d_ptr->m_textureFile.clear(); - emit textureFileChanged(d_ptr->m_textureFile); + if (!d_ptr->m_textureFile.isEmpty()) { + d_ptr->m_textureFile.clear(); + emit textureFileChanged(d_ptr->m_textureFile); + } + d_ptr->m_dirtyBits.textureDirty = true; + emit d_ptr->needUpdate(); } } @@ -249,6 +263,8 @@ void QCustom3DItem::setTextureFile(const QString &textureFile) d_ptr->m_textureImage.fill(Qt::gray); } emit textureFileChanged(textureFile); + d_ptr->m_dirtyBits.textureDirty = true; + emit d_ptr->needUpdate(); } } diff --git a/src/datavisualization/data/qcustom3ditem.h b/src/datavisualization/data/qcustom3ditem.h index c9d0cd63..77e33404 100644 --- a/src/datavisualization/data/qcustom3ditem.h +++ b/src/datavisualization/data/qcustom3ditem.h @@ -82,6 +82,7 @@ private: Q_DISABLE_COPY(QCustom3DItem) friend class Abstract3DRenderer; + friend class Abstract3DController; }; QT_END_NAMESPACE_DATAVISUALIZATION diff --git a/src/datavisualization/data/qcustom3ditem_p.h b/src/datavisualization/data/qcustom3ditem_p.h index f85ec5bf..89f47501 100644 --- a/src/datavisualization/data/qcustom3ditem_p.h +++ b/src/datavisualization/data/qcustom3ditem_p.h @@ -33,6 +33,25 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION +struct QCustomItemDirtyBitField { + bool textureDirty : 1; + bool meshDirty : 1; + bool positionDirty : 1; + bool scalingDirty : 1; + bool rotationDirty : 1; + bool visibleDirty : 1; + + QCustomItemDirtyBitField() + : textureDirty(false), + meshDirty(false), + positionDirty(false), + scalingDirty(false), + rotationDirty(false), + visibleDirty(false) + { + } +}; + class QCustom3DItemPrivate : public QObject { Q_OBJECT @@ -55,6 +74,11 @@ public: QQuaternion m_rotation; bool m_visible; + QCustomItemDirtyBitField m_dirtyBits; + +signals: + void needUpdate(); + private: friend class QCustom3DItem; }; |