diff options
Diffstat (limited to 'src/animation/frontend/qabstractclipblendnode.cpp')
-rw-r--r-- | src/animation/frontend/qabstractclipblendnode.cpp | 130 |
1 files changed, 71 insertions, 59 deletions
diff --git a/src/animation/frontend/qabstractclipblendnode.cpp b/src/animation/frontend/qabstractclipblendnode.cpp index 4154b4223..9860e969f 100644 --- a/src/animation/frontend/qabstractclipblendnode.cpp +++ b/src/animation/frontend/qabstractclipblendnode.cpp @@ -36,9 +36,6 @@ #include "qabstractclipblendnode.h" #include "qabstractclipblendnode_p.h" -#include <Qt3DCore/qpropertynodeaddedchange.h> -#include <Qt3DCore/qpropertynoderemovedchange.h> -#include <Qt3DAnimation/qanimationclip.h> QT_BEGIN_NAMESPACE @@ -49,11 +46,82 @@ QAbstractClipBlendNodePrivate::QAbstractClipBlendNodePrivate() { } +/*! + \qmltype AbstractClipBlendNode + \instantiates Qt3DAnimation::QAbstractClipBlendNode + \inqmlmodule Qt3D.Animation + \since 5.9 + + \brief AbstractClipBlendNode is the base class for types used to construct animation blend + trees. + + Animation blend trees are used with a BlendedClipAnimator to dynamically blend a set of + animation clips together. The way in which the blending of animation clips is performed is + controlled by the structure of the blend tree and the properties on the nodes it contains. + + The leaf nodes in a blend tree are containers for the input animation clips. These clips can be + baked clips read from file via AnimationClipLoader, or they can be clips that you build within + your application with AnimatitonClip and AnimationClipData. To include a clip in your blend + tree, wrap it in a ClipBlendValue node. + + The interior nodes of a blend tree represent blending operations that will be applied to their + arguments which hold the input clips or even entire sub-trees of other blend tree nodes. + + At present, the Qt 3D Animation module provides the following blend tree node types: + + \list + \li Qt3D.Animation.ClipBlendValue + \li Qt3D.Animation.LerpClipBlend + \li Qt3D.Animation.QAdditiveClipBlend + \endlist + + Additional node types representing other blending operations will be added in the future. + + \sa BlendedClipAnimator +*/ + +/*! + \class Qt3DAnimation::QAbstractClipBlendNode + \inherits Qt3DCore::QNode + + \inmodule Qt3DAnimation + \since 5.9 + + \brief QAbstractClipBlendNode is the base class for types used to construct animation blend + trees. + + Animation blend trees are used with a QBlendedClipAnimator to dynamically blend a set of + animation clips together. The way in which the blending of animation clips is performed is + controlled by the structure of the blend tree and the properties on the nodes it contains. + + The leaf nodes in a blend tree are containers for the input animation clips. These clips can be + baked clips read from file via QAnimationClipLoader, or they can be clips that you build within + your application with QAnimatitonClip and QAnimationClipData. To include a clip in your blend + tree, wrap it in a QClipBlendValue node. + + The interior nodes of a blend tree represent blending operations that will be applied to their + arguments which hold the input clips or even entire sub-trees of other blend tree nodes. + + At present, the Qt 3D Animation module provides the following blend tree node types: + + \list + \li Qt3DAnimation::QClipBlendValue + \li Qt3DAnimation::QLerpClipBlend + \li Qt3DAnimation::QAdditiveClipBlend + \endlist + + Additional node types representing other blending operations will be added in the future. + + \sa QBlendedClipAnimator +*/ + +/*! \internal */ QAbstractClipBlendNode::QAbstractClipBlendNode(Qt3DCore::QNode *parent) : Qt3DCore::QNode(*new QAbstractClipBlendNodePrivate(), parent) { } +/*! \internal */ QAbstractClipBlendNode::QAbstractClipBlendNode(QAbstractClipBlendNodePrivate &dd, Qt3DCore::QNode *parent) : Qt3DCore::QNode(dd, parent) { @@ -63,62 +131,6 @@ QAbstractClipBlendNode::~QAbstractClipBlendNode() { } -void QAbstractClipBlendNode::addClip(QAnimationClip *clip) -{ - Q_D(QAbstractClipBlendNode); - if (!d->m_clips.contains(clip)) { - d->m_clips.push_back(clip); - - // Ensures proper bookkeeping - d->registerDestructionHelper(clip, &QAbstractClipBlendNode::removeClip, d->m_clips); - - // We need to add it as a child of the current node if it has been declared inline - // Or not previously added as a child of the current node so that - // 1) The backend gets notified about it's creation - // 2) When the current node is destroyed, it gets destroyed as well - if (!clip->parent()) - clip->setParent(this); - - if (d->m_changeArbiter != nullptr) { - const auto change = Qt3DCore::QPropertyNodeAddedChangePtr::create(id(), clip); - change->setPropertyName("clip"); - d->notifyObservers(change); - } - } -} - -void QAbstractClipBlendNode::removeClip(QAnimationClip *clip) -{ - Q_D(QAbstractClipBlendNode); - if (d->m_changeArbiter != nullptr) { - const auto change = Qt3DCore::QPropertyNodeRemovedChangePtr::create(id(), clip); - change->setPropertyName("clip"); - d->notifyObservers(change); - } - d->m_clips.removeOne(clip); - // Remove bookkeeping connection - d->unregisterDestructionHelper(clip); -} - -QVector<QAnimationClip *> QAbstractClipBlendNode::clips() const -{ - Q_D(const QAbstractClipBlendNode); - return d->m_clips; -} - -QAbstractClipBlendNode *QAbstractClipBlendNode::parentClipBlendNode() const -{ - QAbstractClipBlendNode *parentBlendClipNode = nullptr; - QNode *parentN = parentNode(); - while (parentN != nullptr) { - parentBlendClipNode = qobject_cast<QAbstractClipBlendNode *>(parentN); - if (parentBlendClipNode != nullptr) - break; - parentN = parentN->parentNode(); - } - return parentBlendClipNode; -} - } // Qt3DAnimation QT_END_NAMESPACE |