summaryrefslogtreecommitdiffstats
path: root/src/extras/animations/qmorphinganimation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/extras/animations/qmorphinganimation.cpp')
-rw-r--r--src/extras/animations/qmorphinganimation.cpp280
1 files changed, 0 insertions, 280 deletions
diff --git a/src/extras/animations/qmorphinganimation.cpp b/src/extras/animations/qmorphinganimation.cpp
deleted file mode 100644
index e7fe05147..000000000
--- a/src/extras/animations/qmorphinganimation.cpp
+++ /dev/null
@@ -1,280 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt3D module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL3$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPLv3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or later as published by the Free
-** Software Foundation and appearing in the file LICENSE.GPL included in
-** the packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 2.0 requirements will be
-** met: http://www.gnu.org/licenses/gpl-2.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qmorphinganimation.h"
-#include <private/qmorphinganimation_p.h>
-
-QT_BEGIN_NAMESPACE
-
-namespace Qt3DExtras {
-
-QMorphingAnimationPrivate::QMorphingAnimationPrivate()
- : QAbstractAnimationPrivate(QAbstractAnimation::MorphingAnimation)
- , m_flattened(nullptr)
- , m_method(QMorphingAnimation::Relative)
- , m_interpolator(0.0f)
- , m_target(nullptr)
- , m_currentTarget(nullptr)
-{
- m_easing.setType(QEasingCurve::InOutCubic);
-}
-
-QMorphingAnimationPrivate::~QMorphingAnimationPrivate()
-{
- for (QVector<float> *weights : m_weights)
- delete weights;
-}
-
-void QMorphingAnimationPrivate::updateAnimation(float position)
-{
- Q_Q(QMorphingAnimation);
- if (!m_target || !m_target->geometry())
- return;
-
- m_morphKey.resize(m_morphTargets.size());
-
- for (int i = 0; i < m_targetPositions.size() - 1; ++i) {
- if (position > m_targetPositions.at(i) && position <= m_targetPositions.at(i + 1)) {
- float interpolator = (position - m_targetPositions.at(i))
- / (m_targetPositions.at(i + 1) - m_targetPositions.at(i));
- interpolator = m_easing.valueForProgress(interpolator);
- float iip = 1.0f - interpolator;
- float sum = 0.0f;
- QVector<int> relevantValues;
- for (int j = 0; j < m_morphTargets.size(); ++j) {
- m_morphKey[j] = interpolator * m_weights.at(i + 1)->at(j)
- + iip * m_weights.at(i)->at(j);
- sum += m_morphKey[j];
- if (!qFuzzyIsNull(m_morphKey[j]))
- relevantValues.push_back(j);
- }
-
- if (relevantValues.size() == 0 || qFuzzyIsNull(sum)) {
- // only base is used
- interpolator = 0.0f;
- } else if (relevantValues.size() == 1) {
- // one morph target has non-zero weight
- setTargetInterpolated(relevantValues[0]);
- interpolator = sum;
- } else {
- // more than one morph target has non-zero weight
- // flatten morph targets to one
- qWarning() << Q_FUNC_INFO << "Flattening required";
- }
- if (!qFuzzyCompare(interpolator, m_interpolator)) {
- if (m_method == QMorphingAnimation::Normalized)
- m_interpolator = interpolator;
- else
- m_interpolator = -interpolator;
- emit q->interpolatorChanged(m_interpolator);
- }
- return;
- }
- }
-}
-
-void QMorphingAnimationPrivate::setTargetInterpolated(int morphTarget)
-{
- QMorphTarget *target = m_morphTargets[morphTarget];
- Qt3DRender::QGeometry *geometry = m_target->geometry();
-
- // remove attributes from previous frame
- if (m_currentTarget && (target != m_currentTarget)) {
- const QVector<Qt3DRender::QAttribute *> targetAttributes = m_currentTarget->attributeList();
- for (int i = 0; i < targetAttributes.size(); ++i)
- geometry->removeAttribute(targetAttributes.at(i));
- }
-
- const QVector<Qt3DRender::QAttribute *> targetAttributes = target->attributeList();
-
- // add attributes from current frame to the geometry
- if (target != m_currentTarget) {
- for (int i = 0; i < m_attributeNames.size(); ++i) {
- QString targetName = m_attributeNames.at(i);
- targetName.append("Target");
- targetAttributes[i]->setName(targetName);
- geometry->addAttribute(targetAttributes.at(i));
- }
- }
- m_currentTarget = target;
-}
-
-QMorphingAnimation::QMorphingAnimation(QObject *parent)
- : QAbstractAnimation(*new QMorphingAnimationPrivate, parent)
-{
- Q_D(QMorphingAnimation);
- d->m_positionConnection = QObject::connect(this, &QAbstractAnimation::positionChanged,
- this, &QMorphingAnimation::updateAnimation);
-}
-
-QVector<float> QMorphingAnimation::targetPositions() const
-{
- Q_D(const QMorphingAnimation);
- return d->m_targetPositions;
-}
-
-float QMorphingAnimation::interpolator() const
-{
- Q_D(const QMorphingAnimation);
- return d->m_interpolator;
-}
-
-Qt3DRender::QGeometryRenderer *QMorphingAnimation::target() const
-{
- Q_D(const QMorphingAnimation);
- return d->m_target;
-}
-
-QString QMorphingAnimation::targetName() const
-{
- Q_D(const QMorphingAnimation);
- return d->m_targetName;
-}
-
-QMorphingAnimation::Method QMorphingAnimation::method() const
-{
- Q_D(const QMorphingAnimation);
- return d->m_method;
-}
-
-QEasingCurve::Type QMorphingAnimation::easing() const
-{
- Q_D(const QMorphingAnimation);
- return d->m_easing.type();
-}
-
-void QMorphingAnimation::setMorphTargets(const QVector<Qt3DExtras::QMorphTarget *> &targets)
-{
- Q_D(QMorphingAnimation);
- d->m_morphTargets = targets;
- d->m_attributeNames = targets[0]->attributeNames();
-}
-
-void QMorphingAnimation::addMorphTarget(Qt3DExtras::QMorphTarget *target)
-{
- Q_D(QMorphingAnimation);
- if (!d->m_morphTargets.contains(target))
- d->m_morphTargets.push_back(target);
-}
-
-void QMorphingAnimation::removeMorphTarget(Qt3DExtras::QMorphTarget *target)
-{
- Q_D(QMorphingAnimation);
- d->m_morphTargets.removeAll(target);
-}
-
-void QMorphingAnimation::setTargetPositions(const QVector<float> &targetPositions)
-{
- Q_D(QMorphingAnimation);
- d->m_targetPositions = targetPositions;
- emit targetPositionsChanged(targetPositions);
- setDuration(d->m_targetPositions.last());
- if (d->m_weights.size() < targetPositions.size()) {
- d->m_weights.resize(targetPositions.size());
- for (int i = 0; i < d->m_weights.size(); ++i) {
- if (d->m_weights[i] == nullptr)
- d->m_weights[i] = new QVector<float>();
- }
- }
-}
-
-void QMorphingAnimation::setTarget(Qt3DRender::QGeometryRenderer *target)
-{
- Q_D(QMorphingAnimation);
- if (d->m_target != target) {
- d->m_target = target;
- emit targetChanged(target);
- }
-}
-
-void QMorphingAnimation::setWeights(int positionIndex, const QVector<float> &weights)
-{
- Q_D(QMorphingAnimation);
- if (d->m_weights.size() < positionIndex)
- d->m_weights.resize(positionIndex + 1);
- if (d->m_weights[positionIndex] == nullptr)
- d->m_weights[positionIndex] = new QVector<float>();
- *d->m_weights[positionIndex] = weights;
-}
-
-QVector<float> QMorphingAnimation::getWeights(int positionIndex)
-{
- Q_D(QMorphingAnimation);
- return *d->m_weights[positionIndex];
-}
-
-QVector<Qt3DExtras::QMorphTarget *> QMorphingAnimation::morphTargetList()
-{
- Q_D(QMorphingAnimation);
- return d->m_morphTargets;
-}
-
-void QMorphingAnimation::setTargetName(const QString name)
-{
- Q_D(QMorphingAnimation);
- if (d->m_targetName != name) {
- d->m_targetName = name;
- emit targetNameChanged(name);
- }
-}
-
-void QMorphingAnimation::setMethod(QMorphingAnimation::Method method)
-{
- Q_D(QMorphingAnimation);
- if (d->m_method != method) {
- d->m_method = method;
- emit methodChanged(method);
- }
-}
-
-void QMorphingAnimation::setEasing(QEasingCurve::Type easing)
-{
- Q_D(QMorphingAnimation);
- if (d->m_easing.type() != easing) {
- d->m_easing.setType(easing);
- emit easingChanged(easing);
- }
-}
-
-void QMorphingAnimation::updateAnimation(float position)
-{
- Q_D(QMorphingAnimation);
- d->updateAnimation(position);
-}
-
-} // Qt3DExtras
-
-QT_END_NAMESPACE