diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2017-08-21 22:13:43 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-08-30 12:59:18 +0000 |
commit | dab7c73e04cf850819827c3e4c4e7bea6e1a223c (patch) | |
tree | 4bc7f15f15f13c5e06304be33e943cefa7919cad /src/render | |
parent | 2a772a50b6001b1e12dd3cdee4128f5b534c36c3 (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.cpp | 10 | ||||
-rw-r--r-- | src/render/geometry/skeleton.cpp | 14 | ||||
-rw-r--r-- | src/render/geometry/skeleton_p.h | 2 |
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(); |