1// Copyright (C) 2017 Klaralvdalens Datakonsult AB (KDAB).
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QT3DRENDER_RENDER_JOINT_H
5#define QT3DRENDER_RENDER_JOINT_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists for the convenience
12// of other Qt classes. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <Qt3DRender/private/backendnode_p.h>
19#include <Qt3DCore/private/sqt_p.h>
20#include <Qt3DRender/private/handle_types_p.h>
21
22#include <QtGui/qquaternion.h>
23
24QT_BEGIN_NAMESPACE
25
26namespace Qt3DRender {
27namespace Render {
28
29class JointManager;
30class SkeletonManager;
31
32class Q_3DRENDERSHARED_PRIVATE_EXPORT Joint : public BackendNode
33{
34public:
35 Joint();
36
37 void cleanup();
38 void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override;
39
40 Qt3DCore::Sqt localPose() const { return m_localPose; }
41 QMatrix4x4 inverseBindMatrix() const { return m_inverseBindMatrix; }
42 QString name() const { return m_name; }
43 QList<Qt3DCore::QNodeId> childJointIds() const { return m_childJointIds; }
44
45 QVector3D translation() const { return m_localPose.translation; }
46 QQuaternion rotation() const { return m_localPose.rotation; }
47 QVector3D scale() const { return m_localPose.scale; }
48
49 void setOwningSkeleton(HSkeleton skeletonHandle) { m_owningSkeleton = skeletonHandle; }
50 HSkeleton owningSkeleton() const { return m_owningSkeleton; }
51
52 void setJointManager(JointManager *jointManager) { m_jointManager = jointManager; }
53 JointManager *jointManager() const { return m_jointManager; }
54
55 void setSkeletonManager(SkeletonManager *skeletonManager) { m_skeletonManager = skeletonManager; }
56 SkeletonManager *skeletonManager() const { return m_skeletonManager; }
57
58private:
59 QMatrix4x4 m_inverseBindMatrix;
60 Qt3DCore::Sqt m_localPose;
61 QList<Qt3DCore::QNodeId> m_childJointIds;
62 QString m_name;
63 JointManager *m_jointManager;
64 SkeletonManager *m_skeletonManager;
65 HSkeleton m_owningSkeleton;
66};
67
68class JointFunctor : public Qt3DCore::QBackendNodeMapper
69{
70public:
71 explicit JointFunctor(AbstractRenderer *renderer,
72 JointManager *jointManager,
73 SkeletonManager *skeletonManager);
74 Qt3DCore::QBackendNode *create(Qt3DCore::QNodeId id) const final;
75 Qt3DCore::QBackendNode *get(Qt3DCore::QNodeId id) const final;
76 void destroy(Qt3DCore::QNodeId id) const final;
77
78private:
79 AbstractRenderer *m_renderer;
80 JointManager *m_jointManager;
81 SkeletonManager *m_skeletonManager;
82};
83
84} // namespace Render
85} // namespace Qt3DRender
86
87
88QT_END_NAMESPACE
89
90#endif // QT3DRENDER_RENDER_JOINT_H
91

source code of qt3d/src/render/geometry/joint_p.h