Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qquick3dxrcontroller.cpp
Go to the documentation of this file.
1// Copyright (C) 2024 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
5
7
8#if !defined(Q_OS_VISIONOS)
10#endif
11
12#include "qquick3dxrview_p.h"
14
16
29
45
47{
48 if (m_controller == newController)
49 return;
50 m_controller = newController;
53
54 disconnect(m_posePositionConnection);
55 disconnect(m_poseRotationConnection);
56 disconnect(m_isActiveConnection);
57 disconnect(m_inputActionConnection);
58
59 auto *input = handInput();
60 if (input) {
61 input->setPoseSpace(static_cast<QQuick3DXrHandInput::HandPoseSpace>(m_poseSpace));
62 setPosition(input->posePosition());
63 setRotation(input->poseRotation());
64 setVisible(input->isActive());
65
66 m_posePositionConnection = connect(input, &QQuick3DXrHandInput::posePositionChanged, this, [this, input]{
67 setPosition(input->posePosition());
68 });
69 m_poseRotationConnection = connect(input, &QQuick3DXrHandInput::poseRotationChanged, this, [this, input]{
70 setRotation(input->poseRotation());
71 });
72 m_isActiveConnection = connect(input, &QQuick3DXrHandInput::isActiveChanged, this, [this, input]{
73 setVisible(input->isActive());
74 });
75
80
81 //### TODO invoke the action mapper directly from input manager
82 m_inputActionConnection = connect(input, &QQuick3DXrHandInput::inputValueChange,
83 this, [this](int id, const char *shortName, float value) {
85 });
86
87 } else {
88 setVisible(false);
89 }
90}
91
98{
99 if (m_inputManager && m_inputManager->isValid()) {
100 if (m_controller == ControllerRight)
101 return m_inputManager->rightHandInput();
102 else if (m_controller == ControllerLeft)
103 return m_inputManager->leftHandInput();
104 }
105
106 return nullptr;
107}
108
113
115{
116 if (m_poseSpace == newPoseSpace)
117 return;
118 m_poseSpace = newPoseSpace;
119 auto *input = handInput();
120 if (input)
121 input->setPoseSpace(static_cast<QQuick3DXrHandInput::HandPoseSpace>(m_poseSpace));
123}
124
126{
127 auto *input = handInput();
128 if (input)
129 return input->pokePosition();
130 return {};
131}
132
134{
135 auto *input = handInput();
136 if (input)
137 return input->jointPositions();
138 return {};
139}
140
141QList<QQuaternion> QQuick3DXrController::jointRotations() const
142{
143 auto *input = handInput();
144 if (input)
145 return input->jointRotations();
146 return {};
147}
148
150{
151 return m_isActive;
152}
153
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
Definition qobject.cpp:2960
void setRotation(const QQuaternion &rotation)
void setVisible(bool visible)
static void handleInput(QQuick3DXrInputAction::Action id, QQuick3DXrInputAction::Hand hand, const char *shortName, float value)
void setController(QQuick3DXrController::Controller newController)
void setPoseSpace(HandPoseSpace newPoseSpace)
QQuick3DXrHandInput * handInput() const
\qmlproperty XrHandInput XrController::handInput The hand input associated with this controller.
QList< QVector3D > jointPositions
QList< QQuaternion > jointRotations
QQuick3DXrController()
\qmltype XrController \inherits Node \inqmlmodule QtQuick3D.Xr
void jointPositionsChanged()
void inputValueChange(int id, const char *shortName, float value)
void jointRotationsChanged()
QQuick3DXrHandInput * leftHandInput() const
QQuick3DXrHandInput * rightHandInput() const
static QQuick3DXrInputManager * instance()
The QVector3D class represents a vector or vertex in 3D space.
Definition qvectornd.h:171
Combined button and popup list for selecting options.
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
n void setPosition(void) \n\
GLenum GLenum GLenum input
#define emit
myObject disconnect()
[26]