diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 1ea9891732..fc4ca306af 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -2475,6 +2475,14 @@ glm::vec3 MyAvatar::getAbsoluteJointTranslationInObjectFrame(int index) const { } } +void MyAvatar::pintJointInWorldSpace(int index, const glm::vec3& position, const glm::quat& orientation) { + +} + +void MyAvatar::clearPinOnJoint(int index) { + +} + // thread-safe void MyAvatar::addHoldAction(AvatarActionHold* holdAction) { std::lock_guard guard(_holdActionsMutex); diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 4f86256a2f..21c40bd370 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -216,6 +216,9 @@ public: virtual void clearJointData(int index) override; virtual void clearJointsData() override; + Q_INVOKABLE void pintJointInWorldSpace(int index, const glm::vec3& position, const glm::quat& orientation); + Q_INVOKABLE void clearPinOnJoint(int index); + Q_INVOKABLE void useFullAvatarURL(const QUrl& fullAvatarURL, const QString& modelName = QString()); Q_INVOKABLE QUrl getFullAvatarURLFromPreferences() const { return _fullAvatarURLFromPreferences; } Q_INVOKABLE QString getFullAvatarModelName() const { return _fullAvatarModelName; } diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index 07462e9878..311623a002 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -319,6 +319,24 @@ void Rig::clearIKJointLimitHistory() { } } +void Rig::setMaxHipsOffsetLength(float maxLength) { + _maxHipsOffsetLength = maxLength; + + if (_animNode) { + _animNode->traverse([&](AnimNode::Pointer node) { + auto ikNode = std::dynamic_pointer_cast(node); + if (ikNode) { + ikNode->setMaxHipsOffsetLength(_maxHipsOffsetLength); + } + return true; + }); + } +} + +float Rig::getMaxHipsOffsetLength() const { + return _maxHipsOffsetLength; +} + int Rig::getJointParentIndex(int childIndex) const { if (_animSkeleton && isIndexValid(childIndex)) { return _animSkeleton->getParentIndex(childIndex); diff --git a/libraries/animation/src/Rig.h b/libraries/animation/src/Rig.h index 78a669b249..5d1831345b 100644 --- a/libraries/animation/src/Rig.h +++ b/libraries/animation/src/Rig.h @@ -104,6 +104,8 @@ public: void clearJointAnimationPriority(int index); void clearIKJointLimitHistory(); + void setMaxHipsOffsetLength(float maxLength); + float getMaxHipsOffsetLength() const; int getJointParentIndex(int childIndex) const; @@ -318,6 +320,7 @@ protected: bool _enabledAnimations { true }; mutable uint32_t _jointNameWarningCount { 0 }; + float _maxHipsOffsetLength { 1.0f }; private: QMap _stateHandlers;