summaryrefslogtreecommitdiffstats
path: root/src/animation/frontend/qabstractclipblendnode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/animation/frontend/qabstractclipblendnode.cpp')
-rw-r--r--src/animation/frontend/qabstractclipblendnode.cpp130
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