From 283beab05daab56a7aac116e708adfaa3e1369ea Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 5 Aug 2014 12:03:16 -0700 Subject: [PATCH] ModelReferential copy constructor --- interface/src/avatar/ModelReferential.cpp | 38 ++++++++++++++++------- interface/src/avatar/ModelReferential.h | 2 +- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/interface/src/avatar/ModelReferential.cpp b/interface/src/avatar/ModelReferential.cpp index 8f1360a705..fb80d7f2ef 100644 --- a/interface/src/avatar/ModelReferential.cpp +++ b/interface/src/avatar/ModelReferential.cpp @@ -16,8 +16,26 @@ #include "ModelReferential.h" -ModelReferential::ModelReferential(Referential* referential, AvatarData* avatar) : Referential(MODEL, avatar) { - +ModelReferential::ModelReferential(Referential* referential, ModelTree* tree, AvatarData* avatar) : + Referential(MODEL, avatar), + _tree(tree) { + unpackExtraData(reinterpret_cast(referential->getExtraData().data()), + referential->getExtraData().size()); + if (!isValid()) { + qDebug() << "ModelReferential::copyConstructo(): Not Valid"; + return; + } + + const ModelItem* item = _tree->findModelByID(_modelID); + if (item != NULL) { + _refScale = item->getRadius(); + _refRotation = item->getModelRotation(); + _refPosition = item->getPosition() * (float)TREE_SCALE; + } + + _scale = referential->getScale(); + _rotation = referential->getRotation(); + _translation = referential->getTranslation(); } ModelReferential::ModelReferential(uint32_t modelID, ModelTree* tree, AvatarData* avatar) : @@ -26,8 +44,8 @@ _modelID(modelID), _tree(tree) { const ModelItem* item = _tree->findModelByID(_modelID); - if (!_isValid || item == NULL) { - qDebug() << "Not Validd"; + if (!isValid() || item == NULL) { + qDebug() << "ModelReferential::constructor(): Not Valid"; _isValid = false; return; } @@ -44,9 +62,8 @@ _tree(tree) void ModelReferential::update() { const ModelItem* item = _tree->findModelByID(_modelID); - if (item == NULL || _avatar == NULL) { - qDebug() << "Not Valid"; - _isValid = false; + if (!isValid() || item == NULL || _avatar == NULL) { + //qDebug() << "ModelReferential::update(): Not Valid"; return; } @@ -58,13 +75,12 @@ void ModelReferential::update() { } if (item->getModelRotation() != _refRotation) { _refRotation = item->getModelRotation(); - _avatar->setOrientation(_refRotation * _rotation); + _avatar->setOrientation(_refRotation * _rotation, true); somethingChanged = true; } if (item->getPosition() != _refPosition || somethingChanged) { _refPosition = item->getPosition(); - _avatar->setPosition(_refPosition * (float)TREE_SCALE + _refRotation * (_translation * _refScale)); - //qDebug() << "Ref: " << item->getLastUpdated() << " " << item->getLastEdited(); + _avatar->setPosition(_refPosition * (float)TREE_SCALE + _refRotation * (_translation * _refScale), true); somethingChanged = true; } } @@ -87,7 +103,7 @@ JointReferential::JointReferential(uint32_t jointIndex, uint32_t modelID, ModelT const ModelItem* item = _tree->findModelByID(_modelID); const Model* model = getModel(item); if (!_isValid || model == NULL || _jointIndex >= model->getJointStateCount()) { - qDebug() << "Not Validd"; + qDebug() << "Not Valid"; _isValid = false; return; } diff --git a/interface/src/avatar/ModelReferential.h b/interface/src/avatar/ModelReferential.h index 806e4edfcb..53170bcf41 100644 --- a/interface/src/avatar/ModelReferential.h +++ b/interface/src/avatar/ModelReferential.h @@ -19,7 +19,7 @@ class Model; class ModelReferential : public Referential { public: - ModelReferential(Referential* ref, AvatarData* avatar); + ModelReferential(Referential* ref, ModelTree* tree, AvatarData* avatar); ModelReferential(uint32_t modelID, ModelTree* tree, AvatarData* avatar); virtual void update();