From 618f538be54a68cd1dfbbc6f0dcc938c6d684c3a Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 19 Jun 2014 10:40:38 -0700 Subject: [PATCH] mostly working, but some blinking when setting glow --- libraries/models/src/ModelTree.cpp | 6 ++++++ libraries/models/src/ModelTreeElement.cpp | 17 ++++------------- libraries/models/src/ModelTreeElement.h | 3 --- tests/octree/src/AABoxCubeTests.cpp | 6 +++--- tests/octree/src/AABoxCubeTests.h | 4 ++-- tests/octree/src/main.cpp | 4 +++- 6 files changed, 18 insertions(+), 22 deletions(-) diff --git a/libraries/models/src/ModelTree.cpp b/libraries/models/src/ModelTree.cpp index 420d467588..35aaf96895 100644 --- a/libraries/models/src/ModelTree.cpp +++ b/libraries/models/src/ModelTree.cpp @@ -182,6 +182,7 @@ bool StoreModelOperator::PreRecursion(OctreeElement* element) { // Note: updateModel() will only operate on correctly found models and/or add them // to the element if they SHOULD be stored there. if (modelTreeElement->updateModel(_newModel)) { + qDebug() << "model was updated!"; _foundNew = true; // NOTE: don't change the keepSearching here, if it came in here // false then we stay false, if it came in here true, then it @@ -227,8 +228,11 @@ OctreeElement* StoreModelOperator::PossiblyCreateChildAt(OctreeElement* element, void ModelTree::storeModel(const ModelItem& model, const SharedNodePointer& senderNode) { + // NOTE: callers must lock the tree before using this method + // First, look for the existing model in the tree.. StoreModelOperator theOperator(this, model); + recurseTreeWithOperator(&theOperator); _isDirty = true; @@ -498,7 +502,9 @@ int ModelTree::processEditPacketData(PacketType packetType, const unsigned char* bool isValid; ModelItem newModel = ModelItem::fromEditPacket(editData, maxLength, processedBytes, this, isValid); if (isValid) { + lockForWrite(); storeModel(newModel, senderNode); + unlock(); if (newModel.isNewlyCreated()) { notifyNewlyCreatedModel(newModel, senderNode); } diff --git a/libraries/models/src/ModelTreeElement.cpp b/libraries/models/src/ModelTreeElement.cpp index 29276073f4..f9aecb1e5a 100644 --- a/libraries/models/src/ModelTreeElement.cpp +++ b/libraries/models/src/ModelTreeElement.cpp @@ -363,6 +363,9 @@ bool ModelTreeElement::updateModel(const ModelItem& model) { for (uint16_t i = 0; i < numberOfModels; i++) { ModelItem& thisModel = (*_modelItems)[i]; if (thisModel.getID() == model.getID()) { + if (wantDebug) { + qDebug() << "found model with id"; + } int difference = thisModel.getLastUpdated() - model.getLastUpdated(); bool changedOnServer = thisModel.getLastEdited() <= model.getLastEdited(); bool localOlder = thisModel.getLastUpdated() < model.getLastUpdated(); @@ -401,6 +404,7 @@ bool ModelTreeElement::updateModel(const ModelItem& model) { // TODO: can this be optimized to only set the containing element in cases where it could have // changed or has not been set? _myTree->setContainingElement(model.getModelItemID(), this); + return true; } return false; @@ -640,16 +644,3 @@ bool ModelTreeElement::collapseChildren() { // nothing to do here yet... return false; } - - -/* -void ModelTreeElement::storeModel(const ModelItem& model) { - _modelItems->push_back(model); - markWithChangedTime(); - - // TODO: can this be optimized to only set the containing element in cases where it could have - // changed or has not been set? - _myTree->setContainingElement(model.getModelItemID(), this); - -} -*/ diff --git a/libraries/models/src/ModelTreeElement.h b/libraries/models/src/ModelTreeElement.h index 9ad982b526..760711e98a 100644 --- a/libraries/models/src/ModelTreeElement.h +++ b/libraries/models/src/ModelTreeElement.h @@ -148,9 +148,6 @@ public: protected: virtual void init(unsigned char * octalCode); - - void storeModel(const ModelItem& model); - ModelTree* _myTree; QList* _modelItems; }; diff --git a/tests/octree/src/AABoxCubeTests.cpp b/tests/octree/src/AABoxCubeTests.cpp index 85787e279b..7318c40657 100644 --- a/tests/octree/src/AABoxCubeTests.cpp +++ b/tests/octree/src/AABoxCubeTests.cpp @@ -16,7 +16,7 @@ #include "AABoxCubeTests.h" -void AABoxCubeTests::AABoxCubeTests() { +void AABoxCubeTests::AABoxCubeTests(bool verbose) { qDebug() << "******************************************************************************************"; qDebug() << "AABoxCubeTests::AABoxCubeTests()"; @@ -95,6 +95,6 @@ void AABoxCubeTests::AABoxCubeTests() { qDebug() << "******************************************************************************************"; } -void AABoxCubeTests::runAllTests() { - AABoxCubeTests(); +void AABoxCubeTests::runAllTests(bool verbose) { + AABoxCubeTests(verbose); } diff --git a/tests/octree/src/AABoxCubeTests.h b/tests/octree/src/AABoxCubeTests.h index 8d1ece51f8..7f5ff05ed9 100644 --- a/tests/octree/src/AABoxCubeTests.h +++ b/tests/octree/src/AABoxCubeTests.h @@ -13,8 +13,8 @@ #define hifi_AABoxCubeTests_h namespace AABoxCubeTests { - void AABoxCubeTests(); - void runAllTests(); + void AABoxCubeTests(bool verbose); + void runAllTests(bool verbose); } #endif // hifi_AABoxCubeTests_h diff --git a/tests/octree/src/main.cpp b/tests/octree/src/main.cpp index a48ea7400d..44ec485a52 100644 --- a/tests/octree/src/main.cpp +++ b/tests/octree/src/main.cpp @@ -9,6 +9,7 @@ // #include "AABoxCubeTests.h" +#include "ModelTests.h" #include "OctreeTests.h" #include "SharedUtil.h" @@ -17,6 +18,7 @@ int main(int argc, const char* argv[]) { bool verbose = cmdOptionExists(argc, argv, VERBOSE); qDebug() << "OctreeTests::runAllTests()"; OctreeTests::runAllTests(verbose); - AABoxCubeTests::runAllTests(); + AABoxCubeTests::runAllTests(verbose); + ModelTests::runAllTests(verbose); return 0; }