From bc77630c5bbe885e155bd7e76328b58063e5a60f Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 30 Jul 2014 16:48:11 -0700 Subject: [PATCH] Extanded FBXService + moved ModelReferential --- .../src/avatar}/ModelReferential.cpp | 35 ++++++++++++++++++- .../src/avatar}/ModelReferential.h | 12 +++++++ interface/src/models/ModelTreeRenderer.cpp | 4 +++ interface/src/models/ModelTreeRenderer.h | 2 +- libraries/models/src/ModelTree.h | 4 +++ 5 files changed, 55 insertions(+), 2 deletions(-) rename {libraries/models/src => interface/src/avatar}/ModelReferential.cpp (66%) rename {libraries/models/src => interface/src/avatar}/ModelReferential.h (68%) diff --git a/libraries/models/src/ModelReferential.cpp b/interface/src/avatar/ModelReferential.cpp similarity index 66% rename from libraries/models/src/ModelReferential.cpp rename to interface/src/avatar/ModelReferential.cpp index e54b49a1e7..c681bb29da 100644 --- a/libraries/models/src/ModelReferential.cpp +++ b/interface/src/avatar/ModelReferential.cpp @@ -9,6 +9,8 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include + #include "ModelTree.h" #include "ModelReferential.h" @@ -19,7 +21,7 @@ _modelID(modelID), _tree(tree) { const ModelItem* item = _tree->findModelByID(_modelID); - if (!_isValid || item == NULL || _avatar == NULL) { + if (!_isValid || item == NULL) { _isValid = false; return; } @@ -58,3 +60,34 @@ void ModelReferential::update() { somethingChanged = true; } } + +JointReferential::JointReferential(uint32_t jointID, uint32_t modelID, ModelTree* tree, AvatarData* avatar) : + ModelReferential(modelID, tree, avatar), + _jointID(jointID) +{ + const Model* model = getModel(_tree->findModelByID(_modelID)); + + if (!_isValid || model == NULL || model->getJointStateCount() <= jointID) { + _isValid = false; + return; + } +} + +void JointReferential::update() { + const ModelItem* item = _tree->findModelByID(_modelID); + if (!_isValid || item == NULL) { + _isValid = false; + return; + } + + +} + +const Model* JointReferential::getModel(const ModelItem* item) { + ModelItemFBXService* fbxService = _tree->getFBXService(); + if (item != NULL && fbxService != NULL) { + return fbxService->getModelForModelItem(*item); + } + + return NULL; +} diff --git a/libraries/models/src/ModelReferential.h b/interface/src/avatar/ModelReferential.h similarity index 68% rename from libraries/models/src/ModelReferential.h rename to interface/src/avatar/ModelReferential.h index 8ae692568a..8f9333451a 100644 --- a/libraries/models/src/ModelReferential.h +++ b/interface/src/avatar/ModelReferential.h @@ -15,6 +15,7 @@ #include class ModelTree; +class Model; class ModelReferential : public Referential { public: @@ -26,4 +27,15 @@ protected: ModelTree* _tree; }; +class JointReferential : public ModelReferential { +public: + JointReferential(uint32_t jointID, uint32_t modelID, ModelTree* tree, AvatarData* avatar); + virtual void update(); + +protected: + const Model* getModel(const ModelItem* item); + + uint32_t _jointID; +}; + #endif // hifi_ModelReferential_h \ No newline at end of file diff --git a/interface/src/models/ModelTreeRenderer.cpp b/interface/src/models/ModelTreeRenderer.cpp index 78107db699..acbb373ffc 100644 --- a/interface/src/models/ModelTreeRenderer.cpp +++ b/interface/src/models/ModelTreeRenderer.cpp @@ -76,6 +76,10 @@ const FBXGeometry* ModelTreeRenderer::getGeometryForModel(const ModelItem& model return result; } +const Model* ModelTreeRenderer::getModelForModelItem(const ModelItem& modelItem) { + return getModel(modelItem); +} + Model* ModelTreeRenderer::getModel(const ModelItem& modelItem) { Model* model = NULL; diff --git a/interface/src/models/ModelTreeRenderer.h b/interface/src/models/ModelTreeRenderer.h index d69b85efe9..63363e4ce2 100644 --- a/interface/src/models/ModelTreeRenderer.h +++ b/interface/src/models/ModelTreeRenderer.h @@ -51,7 +51,7 @@ public: virtual void render(RenderMode renderMode = DEFAULT_RENDER_MODE); virtual const FBXGeometry* getGeometryForModel(const ModelItem& modelItem); - + virtual const Model* getModelForModelItem(const ModelItem& modelItem); /// clears the tree virtual void clear(); diff --git a/libraries/models/src/ModelTree.h b/libraries/models/src/ModelTree.h index a2a3c9cd28..41bcfcdcc3 100644 --- a/libraries/models/src/ModelTree.h +++ b/libraries/models/src/ModelTree.h @@ -15,6 +15,8 @@ #include #include "ModelTreeElement.h" +class Model; + class NewlyCreatedModelHook { public: virtual void modelCreated(const ModelItem& newModel, const SharedNodePointer& senderNode) = 0; @@ -23,6 +25,7 @@ public: class ModelItemFBXService { public: virtual const FBXGeometry* getGeometryForModel(const ModelItem& modelItem) = 0; + virtual const Model* getModelForModelItem(const ModelItem& modelItem) = 0; }; class ModelTree : public Octree { @@ -80,6 +83,7 @@ public: void processEraseMessage(const QByteArray& dataByteArray, const SharedNodePointer& sourceNode); void handleAddModelResponse(const QByteArray& packet); + ModelItemFBXService* getFBXService() const { return _fbxService; } void setFBXService(ModelItemFBXService* service) { _fbxService = service; } const FBXGeometry* getGeometryForModel(const ModelItem& modelItem) { return _fbxService ? _fbxService->getGeometryForModel(modelItem) : NULL;