diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index f3c205dadc..2734d968a9 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -74,14 +74,16 @@ void RenderableModelEntityItem::loader() { void RenderableModelEntityItem::setDimensions(const glm::vec3& value) { _dimensionsInitialized = true; - ModelEntityItem::setDimensions(value); bool success; + AACube queryAACube = getQueryAACube(success); + + ModelEntityItem::setDimensions(value); + AACube maxAACube = getMaximumAACube(success); if (!success) { return; } - AACube queryAACube = getQueryAACube(success); if (!success || !queryAACube.contains(maxAACube)) { EntityItemProperties properties; diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 15d358475f..71be12682b 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -1202,11 +1202,35 @@ const Transform EntityItem::getTransformToCenter(bool& success) const { return result; } +void EntityItem::checkAndAdjustQueryAACube() { + bool maxAACubeSuccess; + AACube maxAACube = getMaximumAACube(maxAACubeSuccess); + if (maxAACubeSuccess) { + if (!_queryAACubeSet || !_queryAACube.contains(maxAACube)) { + // allow server to patch up broken queryAACubes + EntityTreePointer tree = getTree(); + if (tree) { + qDebug() << "EntityItem::checkAndAdjustQueryAACube" << getName(); + EntityItemProperties properties; + properties.setQueryAACube(maxAACube); + tree->updateEntity(getID(), properties); + } + } + } +} + +void EntityItem::setParentID(const QUuid& parentID) { + SpatiallyNestable::setParentID(parentID); + checkAndAdjustQueryAACube(); +} + + void EntityItem::setDimensions(const glm::vec3& value) { if (value.x <= 0.0f || value.y <= 0.0f || value.z <= 0.0f) { return; } setScale(value); + checkAndAdjustQueryAACube(); } /// The maximum bounding cube for the entity, independent of it's rotation. @@ -1299,26 +1323,6 @@ AABox EntityItem::getAABox(bool& success) const { return _cachedAABox; } -AACube EntityItem::getQueryAACube(bool& success) const { - AACube queryAACube = SpatiallyNestable::getQueryAACube(success); - bool maxAACubeSuccess; - AACube maxAACube = getMaximumAACube(maxAACubeSuccess); - if (success) { - // allow server to patch up broken queryAACubes - if (maxAACubeSuccess && !queryAACube.contains(maxAACube)) { - getThisPointer()->setQueryAACube(maxAACube); - } - return _queryAACube; - } - // this is for when we've loaded an older json file that didn't have queryAACube properties. - success = maxAACubeSuccess; - if (maxAACubeSuccess) { - getThisPointer()->setQueryAACube(maxAACube); - } - return _queryAACube; -} - - // NOTE: This should only be used in cases of old bitstreams which only contain radius data // 0,0,0 --> maxDimension,maxDimension,maxDimension // ... has a corner to corner distance of glm::length(maxDimension,maxDimension,maxDimension) diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 577bb406bc..7ce1d0c783 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -179,6 +179,10 @@ public: QString getDescription() const { return _description; } void setDescription(QString value) { _description = value; } + void checkAndAdjustQueryAACube(); + + virtual void setParentID(const QUuid& parentID); + /// Dimensions in meters (0.0 - TREE_SCALE) inline const glm::vec3 getDimensions() const { return getScale(); } virtual void setDimensions(const glm::vec3& value); @@ -238,9 +242,6 @@ public: AACube getMinimumAACube(bool& success) const; AABox getAABox(bool& success) const; /// axis aligned bounding box in world-frame (meters) - using SpatiallyNestable::getQueryAACube; - virtual AACube getQueryAACube(bool& success) const override; - const QString& getScript() const { return _script; } void setScript(const QString& value) { _script = value; }