summaryrefslogtreecommitdiffstats
path: root/src/render
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2017-08-21 22:13:43 +0100
committerSean Harmer <sean.harmer@kdab.com>2017-08-30 12:59:18 +0000
commitdab7c73e04cf850819827c3e4c4e7bea6e1a223c (patch)
tree4bc7f15f15f13c5e06304be33e943cefa7919cad /src/render
parent2a772a50b6001b1e12dd3cdee4128f5b534c36c3 (diff)
Add name property to QJoint
And set it from the backend when creating frontend joints. Change-Id: I26d37c7f516944eb353af38716aab4c55bd2f79f Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render')
-rw-r--r--src/render/geometry/joint.cpp10
-rw-r--r--src/render/geometry/skeleton.cpp14
-rw-r--r--src/render/geometry/skeleton_p.h2
3 files changed, 17 insertions, 9 deletions
diff --git a/src/render/geometry/joint.cpp b/src/render/geometry/joint.cpp
index 541ab3302..9c53b8ef8 100644
--- a/src/render/geometry/joint.cpp
+++ b/src/render/geometry/joint.cpp
@@ -79,10 +79,9 @@ void Joint::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change
m_localPose.scale = data.scale;
m_localPose.translation = data.translation;
m_childJointIds = data.childJointIds;
+ m_name = data.name;
markDirty(AbstractRenderer::JointDirty);
m_jointManager->addDirtyJoint(peerId());
-
- // TODO: Add name property to QJoint
}
void Joint::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
@@ -108,8 +107,13 @@ void Joint::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
// the inverse bind matrix.
m_inverseBindMatrix = propertyChange->value().value<QMatrix4x4>();
m_skeletonManager->addDirtySkeleton(SkeletonManager::SkeletonDataDirty, m_owningSkeleton);
+ } else if (propertyChange->propertyName() == QByteArrayLiteral("name")) {
+ // Joint name doesn't affect anything in the render aspect so no need
+ // to mark anything as dirty.
+ m_name = propertyChange->value().toString();
+
+ // TODO: Notify other aspects (animation) about the name change.
}
- // TODO: Add name property to QJoint
} else if (e->type() == PropertyValueAdded) {
const auto addedChange = qSharedPointerCast<QPropertyNodeAddedChange>(e);
if (addedChange->propertyName() == QByteArrayLiteral("childJoint"))
diff --git a/src/render/geometry/skeleton.cpp b/src/render/geometry/skeleton.cpp
index 31bce7eb1..f1761bc18 100644
--- a/src/render/geometry/skeleton.cpp
+++ b/src/render/geometry/skeleton.cpp
@@ -294,9 +294,13 @@ Qt3DCore::QJoint *Skeleton::createFrontendJoints(const SkeletonData &skeletonDat
// Create frontend joints from the joint info objects
QVector<QJoint *> frontendJoints;
- frontendJoints.reserve(skeletonData.joints.size());
- for (const JointInfo &jointInfo : skeletonData.joints)
- frontendJoints.push_back(createFrontendJoint(jointInfo));
+ const int jointCount = skeletonData.joints.size();
+ frontendJoints.reserve(jointCount);
+ for (int i = 0; i < jointCount; ++i) {
+ const JointInfo &jointInfo = skeletonData.joints[i];
+ const QString &jointName = skeletonData.jointNames[i];
+ frontendJoints.push_back(createFrontendJoint(jointName, jointInfo));
+ }
// Now go through and resolve the parent for each joint
for (int i = 0; i < frontendJoints.size(); ++i) {
@@ -313,14 +317,14 @@ Qt3DCore::QJoint *Skeleton::createFrontendJoints(const SkeletonData &skeletonDat
return frontendJoints[0];
}
-Qt3DCore::QJoint *Skeleton::createFrontendJoint(const JointInfo &jointInfo) const
+Qt3DCore::QJoint *Skeleton::createFrontendJoint(const QString &jointName, const JointInfo &jointInfo) const
{
auto joint = QAbstractNodeFactory::createNode<QJoint>("QJoint");
joint->setTranslation(jointInfo.localPose.translation);
joint->setRotation(jointInfo.localPose.rotation);
joint->setScale(jointInfo.localPose.scale);
joint->setInverseBindMatrix(jointInfo.inverseBindPose);
- // TODO: Add name property to joint
+ joint->setName(jointName);
return joint;
}
diff --git a/src/render/geometry/skeleton_p.h b/src/render/geometry/skeleton_p.h
index 2a8ede17e..566304114 100644
--- a/src/render/geometry/skeleton_p.h
+++ b/src/render/geometry/skeleton_p.h
@@ -123,7 +123,7 @@ private:
void loadSkeletonFromUrl();
void loadSkeletonFromData();
Qt3DCore::QJoint *createFrontendJoints(const SkeletonData &skeletonData) const;
- Qt3DCore::QJoint *createFrontendJoint(const JointInfo &jointInfo) const;
+ Qt3DCore::QJoint *createFrontendJoint(const QString &jointName, const JointInfo &jointInfo) const;
void processJointHierarchy(Qt3DCore::QNodeId jointId, int parentJointIndex, SkeletonData &skeletonData);
void clearData();