From 836f810c419b1981da284aead6df1187910a7bc0 Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Thu, 6 Sep 2018 14:11:42 -0700 Subject: [PATCH] Have OverlayTransformNode and similar define scale relative to nestable scale on creation time, and refactor code --- .../src/raypick/PickScriptingInterface.cpp | 4 ++ .../src/ui/overlays/OverlayTransformNode.cpp | 22 +--------- .../src/ui/overlays/OverlayTransformNode.h | 11 ++--- .../avatars-renderer/AvatarTransformNode.cpp | 22 +--------- .../avatars-renderer/AvatarTransformNode.h | 11 ++--- .../entities/src/EntityTransformNode.cpp | 22 +--------- libraries/entities/src/EntityTransformNode.h | 11 ++--- .../shared/src/NestableTransformNode.cpp | 22 +--------- libraries/shared/src/NestableTransformNode.h | 44 +++++++++++++++++-- 9 files changed, 61 insertions(+), 108 deletions(-) diff --git a/interface/src/raypick/PickScriptingInterface.cpp b/interface/src/raypick/PickScriptingInterface.cpp index b892c6da8e..247df2b11e 100644 --- a/interface/src/raypick/PickScriptingInterface.cpp +++ b/interface/src/raypick/PickScriptingInterface.cpp @@ -383,6 +383,10 @@ std::shared_ptr PickScriptingInterface::createTransformNode(const if (propMap["parentJointIndex"].isValid()) { parentJointIndex = propMap["parentJointIndex"].toInt(); } + glm::vec3 baseScale = glm::vec3(1); + if (propMap["baseScale"].isValid()) { + baseScale = vec3FromVariant(propMap["baseScale"]); + } auto sharedNestablePointer = nestablePointer.lock(); if (success && sharedNestablePointer) { NestableType nestableType = sharedNestablePointer->getNestableType(); diff --git a/interface/src/ui/overlays/OverlayTransformNode.cpp b/interface/src/ui/overlays/OverlayTransformNode.cpp index d0a6618e37..fa499b3ce3 100644 --- a/interface/src/ui/overlays/OverlayTransformNode.cpp +++ b/interface/src/ui/overlays/OverlayTransformNode.cpp @@ -7,24 +7,6 @@ // #include "OverlayTransformNode.h" -OverlayTransformNode::OverlayTransformNode(std::weak_ptr overlay, int jointIndex) : - _overlay(overlay), - _jointIndex(jointIndex) -{} - -Transform OverlayTransformNode::getTransform() { - auto overlay = _overlay.lock(); - if (!overlay) { - return Transform(); - } - - bool success; - Transform jointWorldTransform = overlay->getTransform(_jointIndex, success); - if (!success) { - return Transform(); - } - - jointWorldTransform.setScale(overlay->getBounds().getScale()); - - return jointWorldTransform; +glm::vec3 BaseNestableTransformNode::getActualScale(const std::shared_ptr& nestablePointer) const { + return nestablePointer->getBounds().getScale(); } \ No newline at end of file diff --git a/interface/src/ui/overlays/OverlayTransformNode.h b/interface/src/ui/overlays/OverlayTransformNode.h index b9ea9f72c4..11c3415828 100644 --- a/interface/src/ui/overlays/OverlayTransformNode.h +++ b/interface/src/ui/overlays/OverlayTransformNode.h @@ -8,19 +8,14 @@ #ifndef hifi_OverlayTransformNode_h #define hifi_OverlayTransformNode_h -#include "TransformNode.h" +#include "NestableTransformNode.h" #include "Base3DOverlay.h" // For 3D overlays only -class OverlayTransformNode : public TransformNode { +class OverlayTransformNode : public BaseNestableTransformNode { public: - OverlayTransformNode(std::weak_ptr overlay, int jointIndex); - Transform getTransform() override; - -protected: - std::weak_ptr _overlay; - int _jointIndex; + OverlayTransformNode(std::weak_ptr spatiallyNestable, int jointIndex) : BaseNestableTransformNode(spatiallyNestable, jointIndex) {}; }; #endif // hifi_OverlayTransformNode_h \ No newline at end of file diff --git a/libraries/avatars-renderer/src/avatars-renderer/AvatarTransformNode.cpp b/libraries/avatars-renderer/src/avatars-renderer/AvatarTransformNode.cpp index fc5ba5bc1a..bc24b8a570 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/AvatarTransformNode.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/AvatarTransformNode.cpp @@ -7,24 +7,6 @@ // #include "AvatarTransformNode.h" -AvatarTransformNode::AvatarTransformNode(AvatarWeakPointer avatar, int jointIndex) : - _avatar(avatar), - _jointIndex(jointIndex) -{} - -Transform AvatarTransformNode::getTransform() { - auto avatar = _avatar.lock(); - if (!avatar) { - return Transform(); - } - - bool success; - Transform jointWorldTransform = avatar->getTransform(_jointIndex, success); - if (!success) { - return Transform(); - } - - jointWorldTransform.setScale(avatar->scaleForChildren()); - - return jointWorldTransform; +glm::vec3 BaseNestableTransformNode::getActualScale(const std::shared_ptr& nestablePointer) const { + return nestablePointer->scaleForChildren(); } \ No newline at end of file diff --git a/libraries/avatars-renderer/src/avatars-renderer/AvatarTransformNode.h b/libraries/avatars-renderer/src/avatars-renderer/AvatarTransformNode.h index 03191b8dbe..183e4ab05c 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/AvatarTransformNode.h +++ b/libraries/avatars-renderer/src/avatars-renderer/AvatarTransformNode.h @@ -8,18 +8,13 @@ #ifndef hifi_AvatarTransformNode_h #define hifi_AvatarTransformNode_h -#include "TransformNode.h" +#include "NestableTransformNode.h" #include "Avatar.h" -class AvatarTransformNode : public TransformNode { +class AvatarTransformNode : public BaseNestableTransformNode { public: - AvatarTransformNode(AvatarWeakPointer avatar, int jointIndex); - Transform getTransform() override; - -protected: - AvatarWeakPointer _avatar; - int _jointIndex; + AvatarTransformNode(std::weak_ptr spatiallyNestable, int jointIndex) : BaseNestableTransformNode(spatiallyNestable, jointIndex) {}; }; #endif // hifi_AvatarTransformNode_h \ No newline at end of file diff --git a/libraries/entities/src/EntityTransformNode.cpp b/libraries/entities/src/EntityTransformNode.cpp index 5b0a690619..35f4d8e52f 100644 --- a/libraries/entities/src/EntityTransformNode.cpp +++ b/libraries/entities/src/EntityTransformNode.cpp @@ -7,24 +7,6 @@ // #include "EntityTransformNode.h" -EntityTransformNode::EntityTransformNode(EntityItemWeakPointer entity, int jointIndex) : - _entity(entity), - _jointIndex(jointIndex) -{} - -Transform EntityTransformNode::getTransform() { - auto entity = _entity.lock(); - if (!entity) { - return Transform(); - } - - bool success; - Transform jointWorldTransform = entity->getTransform(_jointIndex, success); - if (!success) { - return Transform(); - } - - jointWorldTransform.setScale(entity->getScaledDimensions()); - - return jointWorldTransform; +glm::vec3 BaseNestableTransformNode::getActualScale(const std::shared_ptr& nestablePointer) const { + return nestablePointer->getScaledDimensions(); } \ No newline at end of file diff --git a/libraries/entities/src/EntityTransformNode.h b/libraries/entities/src/EntityTransformNode.h index b7388600df..07818f99f3 100644 --- a/libraries/entities/src/EntityTransformNode.h +++ b/libraries/entities/src/EntityTransformNode.h @@ -8,18 +8,13 @@ #ifndef hifi_EntityTransformNode_h #define hifi_EntityTransformNode_h -#include "TransformNode.h" +#include "NestableTransformNode.h" #include "EntityItem.h" -class EntityTransformNode : public TransformNode { +class EntityTransformNode : public BaseNestableTransformNode { public: - EntityTransformNode(EntityItemWeakPointer entity, int jointIndex); - Transform getTransform() override; - -protected: - EntityItemWeakPointer _entity; - int _jointIndex; + EntityTransformNode(std::weak_ptr spatiallyNestable, int jointIndex) : BaseNestableTransformNode(spatiallyNestable, jointIndex) {}; }; #endif // hifi_EntityTransformNode_h \ No newline at end of file diff --git a/libraries/shared/src/NestableTransformNode.cpp b/libraries/shared/src/NestableTransformNode.cpp index 17456d69ce..9da2c85aa3 100644 --- a/libraries/shared/src/NestableTransformNode.cpp +++ b/libraries/shared/src/NestableTransformNode.cpp @@ -8,24 +8,6 @@ #include "NestableTransformNode.h" -NestableTransformNode::NestableTransformNode(SpatiallyNestableWeakPointer spatiallyNestable, int jointIndex) : - _spatiallyNestable(spatiallyNestable), - _jointIndex(jointIndex) -{ -} - -Transform NestableTransformNode::getTransform() { - auto nestable = _spatiallyNestable.lock(); - if (!nestable) { - return Transform(); - } - - bool success; - Transform jointWorldTransform = nestable->getTransform(_jointIndex, success); - - if (success) { - return jointWorldTransform; - } else { - return Transform(); - } +glm::vec3 BaseNestableTransformNode::getActualScale(const std::shared_ptr& nestablePointer) const { + return nestablePointer->getAbsoluteJointScaleInObjectFrame(_jointIndex); } \ No newline at end of file diff --git a/libraries/shared/src/NestableTransformNode.h b/libraries/shared/src/NestableTransformNode.h index 131de9e786..21efd1c690 100644 --- a/libraries/shared/src/NestableTransformNode.h +++ b/libraries/shared/src/NestableTransformNode.h @@ -12,14 +12,50 @@ #include "SpatiallyNestable.h" -class NestableTransformNode : public TransformNode { +template +class BaseNestableTransformNode : public TransformNode { public: - NestableTransformNode(SpatiallyNestableWeakPointer spatiallyNestable, int jointIndex); - Transform getTransform() override; + BaseNestableTransformNode(std::weak_ptr spatiallyNestable, int jointIndex) : + _spatiallyNestable(spatiallyNestable), + _jointIndex(jointIndex) { + auto nestablePointer = _spatiallyNestable.lock(); + if (nestablePointer) { + glm::vec3 nestableDimensions = getActualScale(nestablePointer); + if (!glm::any(glm::equal(nestableDimensions, glm::vec3(0.0f)))) { + _baseScale = nestableDimensions; + } + } + } + + Transform getTransform() { + std::shared_ptr nestable = _spatiallyNestable.lock(); + if (!nestable) { + return Transform(); + } + + bool success; + Transform jointWorldTransform = nestable->getTransform(_jointIndex, success); + + if (!success) { + return Transform(); + } + + jointWorldTransform.setScale(getActualScale(nestable) / _baseScale); + + return jointWorldTransform; + } + + glm::vec3 getActualScale(const std::shared_ptr& nestablePointer) const; protected: - SpatiallyNestableWeakPointer _spatiallyNestable; + std::weak_ptr _spatiallyNestable; int _jointIndex; + glm::vec3 _baseScale { 1.0f }; +}; + +class NestableTransformNode : public BaseNestableTransformNode { +public: + NestableTransformNode(std::weak_ptr spatiallyNestable, int jointIndex) : BaseNestableTransformNode(spatiallyNestable, jointIndex) {}; }; #endif // hifi_NestableTransformNode_h \ No newline at end of file