From d287817829ef932d4961cc8653fd10bbdece27db Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Fri, 17 Jul 2015 14:52:37 -0700 Subject: [PATCH] give SkeletonModel created by MyAvatar a Rig pointer --- interface/src/avatar/MyAvatar.cpp | 11 ++++++----- interface/src/avatar/MyAvatar.h | 2 +- interface/src/avatar/SkeletonModel.cpp | 4 ++-- interface/src/avatar/SkeletonModel.h | 2 +- libraries/render-utils/src/Model.cpp | 13 ++++++++----- libraries/render-utils/src/Model.h | 8 +++++--- 6 files changed, 23 insertions(+), 17 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 537b6f339a..896128aee8 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -79,7 +79,7 @@ const float MyAvatar::ZOOM_MAX = 25.0f; const float MyAvatar::ZOOM_DEFAULT = 1.5f; MyAvatar::MyAvatar() : - Avatar(), + Avatar(), _gravity(0.0f, 0.0f, 0.0f), _wasPushing(false), _isPushing(false), @@ -102,7 +102,8 @@ MyAvatar::MyAvatar() : _eyeContactTarget(LEFT_EYE), _realWorldFieldOfView("realWorldFieldOfView", DEFAULT_REAL_WORLD_FIELD_OF_VIEW_DEGREES), - _firstPersonSkeletonModel(this), + _rig(), + _firstPersonSkeletonModel(this, nullptr, _rig), _prevShouldDrawHead(true) { _firstPersonSkeletonModel.setIsFirstPerson(true); @@ -488,7 +489,7 @@ void MyAvatar::loadLastRecording() { } AnimationHandlePointer MyAvatar::addAnimationHandle() { - AnimationHandlePointer handle = _rig.createAnimationHandle(); + AnimationHandlePointer handle = _rig->createAnimationHandle(); _animationHandles.append(handle); return handle; } @@ -506,7 +507,7 @@ void MyAvatar::startAnimation(const QString& url, float fps, float priority, Q_ARG(float, lastFrame), Q_ARG(const QStringList&, maskedJoints)); return; } - AnimationHandlePointer handle = _rig.createAnimationHandle(); + AnimationHandlePointer handle = _rig->createAnimationHandle(); handle->setURL(url); handle->setFPS(fps); handle->setPriority(priority); @@ -534,7 +535,7 @@ void MyAvatar::startAnimationByRole(const QString& role, const QString& url, flo } } // no joy; use the parameters provided - AnimationHandlePointer handle = _rig.createAnimationHandle(); + AnimationHandlePointer handle = _rig->createAnimationHandle(); handle->setRole(role); handle->setURL(url); handle->setFPS(fps); diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 0d94d327a9..8ad2f946ec 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -286,7 +286,7 @@ private: QString _bodyModelName; QString _fullAvatarModelName; - Rig _rig; + RigPointer _rig; // used for rendering when in first person view or when in an HMD. SkeletonModel _firstPersonSkeletonModel; bool _prevShouldDrawHead; diff --git a/interface/src/avatar/SkeletonModel.cpp b/interface/src/avatar/SkeletonModel.cpp index 0a981706da..0347e217a3 100644 --- a/interface/src/avatar/SkeletonModel.cpp +++ b/interface/src/avatar/SkeletonModel.cpp @@ -29,8 +29,8 @@ enum StandingFootState { NO_FOOT }; -SkeletonModel::SkeletonModel(Avatar* owningAvatar, QObject* parent) : - Model(parent), +SkeletonModel::SkeletonModel(Avatar* owningAvatar, QObject* parent, RigPointer rig) : + Model(parent, rig), _triangleFanID(DependencyManager::get()->allocateID()), _owningAvatar(owningAvatar), _boundingShape(), diff --git a/interface/src/avatar/SkeletonModel.h b/interface/src/avatar/SkeletonModel.h index 3d63238cf2..6d33b3da7b 100644 --- a/interface/src/avatar/SkeletonModel.h +++ b/interface/src/avatar/SkeletonModel.h @@ -25,7 +25,7 @@ class SkeletonModel : public Model { public: - SkeletonModel(Avatar* owningAvatar, QObject* parent = NULL); + SkeletonModel(Avatar* owningAvatar, QObject* parent = nullptr, RigPointer rig = nullptr); ~SkeletonModel(); virtual void initJointStates(QVector states); diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 409d24652c..7bb96a9082 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -62,7 +62,7 @@ static int weakNetworkGeometryPointerTypeId = qRegisterMetaType >(); float Model::FAKE_DIMENSION_PLACEHOLDER = -1.0f; -Model::Model(QObject* parent) : +Model::Model(QObject* parent, RigPointer rig) : QObject(parent), _scale(1.0f, 1.0f, 1.0f), _scaleToFit(false), @@ -83,7 +83,8 @@ Model::Model(QObject* parent) : _calculatedMeshTrianglesValid(false), _meshGroupsKnown(false), _isWireframe(false), - _renderCollisionHull(false) { + _renderCollisionHull(false), + _rig(rig) { // we may have been created in the network thread, but we live in the main thread if (_viewState) { @@ -1518,8 +1519,9 @@ void Model::updateVisibleJointStates() { } } -bool Model::setJointPosition(int jointIndex, const glm::vec3& position, const glm::quat& rotation, bool useRotation, - int lastFreeIndex, bool allIntermediatesFree, const glm::vec3& alignment, float priority) { +bool Model::setJointPosition(int jointIndex, const glm::vec3& position, const glm::quat& rotation, + bool useRotation, int lastFreeIndex, bool allIntermediatesFree, const glm::vec3& alignment, + float priority) { if (jointIndex == -1 || _jointStates.isEmpty()) { return false; } @@ -1604,7 +1606,8 @@ bool Model::setJointPosition(int jointIndex, const glm::vec3& position, const gl return true; } -void Model::inverseKinematics(int endIndex, glm::vec3 targetPosition, const glm::quat& targetRotation, float priority) { +void Model::inverseKinematics(int endIndex, glm::vec3 targetPosition, + const glm::quat& targetRotation, float priority) { // NOTE: targetRotation is from bind- to model-frame if (endIndex == -1 || _jointStates.isEmpty()) { diff --git a/libraries/render-utils/src/Model.h b/libraries/render-utils/src/Model.h index 2d9bf7f146..f34690e570 100644 --- a/libraries/render-utils/src/Model.h +++ b/libraries/render-utils/src/Model.h @@ -67,7 +67,7 @@ public: static void setAbstractViewStateInterface(AbstractViewStateInterface* viewState) { _viewState = viewState; } - Model(QObject* parent = NULL); + Model(QObject* parent = NULL, RigPointer rig = nullptr); virtual ~Model(); /// enables/disables scale to fit behavior, the model will be automatically scaled to the specified largest dimension @@ -296,8 +296,8 @@ protected: /// \param alignment /// \return true if joint exists bool setJointPosition(int jointIndex, const glm::vec3& position, const glm::quat& rotation = glm::quat(), - bool useRotation = false, int lastFreeIndex = -1, bool allIntermediatesFree = false, - const glm::vec3& alignment = glm::vec3(0.0f, -1.0f, 0.0f), float priority = 1.0f); + bool useRotation = false, int lastFreeIndex = -1, bool allIntermediatesFree = false, + const glm::vec3& alignment = glm::vec3(0.0f, -1.0f, 0.0f), float priority = 1.0f); /// Restores the indexed joint to its default position. /// \param fraction the fraction of the default position to apply (i.e., 0.25f to slerp one fourth of the way to @@ -524,6 +524,8 @@ private: QMap _renderItems; bool _readyWhenAdded = false; bool _needsReload = true; + + RigPointer _rig; }; Q_DECLARE_METATYPE(QPointer)