summaryrefslogtreecommitdiffstats
path: root/src/core/transforms/qtransform.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/transforms/qtransform.cpp')
-rw-r--r--src/core/transforms/qtransform.cpp31
1 files changed, 28 insertions, 3 deletions
diff --git a/src/core/transforms/qtransform.cpp b/src/core/transforms/qtransform.cpp
index aeb9a57f7..0ca9f61de 100644
--- a/src/core/transforms/qtransform.cpp
+++ b/src/core/transforms/qtransform.cpp
@@ -37,6 +37,7 @@
#include "qtransform.h"
#include "qtransform_p.h"
#include "qabstracttransform_p.h"
+#include "qmath3d_p.h"
#include <Qt3DCore/qscenepropertychange.h>
@@ -155,12 +156,36 @@ void QTransform::removeTransform(QAbstractTransform *transform)
d->_q_update();
}
+void QTransform::setMatrix(const QMatrix4x4 &m)
+{
+ Q_D(QTransform);
+ if (m != matrix()) {
+ d->m_matrix = m;
+ d->m_matrixDirty = false;
+
+ QVector3D s;
+ QVector3D t;
+ QQuaternion r;
+ decomposeQMatrix4x4(m, t, r, s);
+ d->m_scale = s;
+ d->m_rotation = r;
+ d->m_translation = t;
+ emit scale3DChanged();
+ emit rotationChanged();
+ emit translationChanged();
+
+ const bool wasBlocked = blockNotifications(true);
+ emit matrixChanged();
+ blockNotifications(wasBlocked);
+ }
+}
+
QMatrix4x4 QTransform::matrix() const
{
Q_D(const QTransform);
- if (d->m_transformsDirty) {
- d->m_matrix = d->applyTransforms();
- d->m_transformsDirty = false;
+ if (d->m_matrixDirty) {
+ composeQMatrix4x4(d->m_translation, d->m_rotation, d->m_scale, d->m_matrix);
+ d->m_matrixDirty = false;
}
return d->m_matrix;
}