diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index ed8f083a41..74b60bee13 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -938,6 +938,10 @@ glm::vec3 Avatar::getDefaultJointTranslation(int index) const { } glm::quat Avatar::getAbsoluteJointRotationInObjectFrame(int index) const { + if (index < 0) { + index += 65536; + } + switch(index) { case SENSOR_TO_WORLD_MATRIX_INDEX: { glm::mat4 sensorToWorldMatrix = getSensorToWorldMatrix(); @@ -974,6 +978,10 @@ glm::quat Avatar::getAbsoluteJointRotationInObjectFrame(int index) const { } glm::vec3 Avatar::getAbsoluteJointTranslationInObjectFrame(int index) const { + if (index < 0) { + index += 65536; + } + switch(index) { case SENSOR_TO_WORLD_MATRIX_INDEX: { glm::mat4 sensorToWorldMatrix = getSensorToWorldMatrix(); diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 4f24b46ece..47297c6bdb 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -2394,6 +2394,10 @@ glm::mat4 MyAvatar::computeCameraRelativeHandControllerMatrix(const glm::mat4& c } glm::quat MyAvatar::getAbsoluteJointRotationInObjectFrame(int index) const { + if (index < 0) { + index += 65536; + } + switch (index) { case CONTROLLER_LEFTHAND_INDEX: { return getLeftHandControllerPoseInAvatarFrame().getRotation(); @@ -2427,6 +2431,10 @@ glm::quat MyAvatar::getAbsoluteJointRotationInObjectFrame(int index) const { } glm::vec3 MyAvatar::getAbsoluteJointTranslationInObjectFrame(int index) const { + if (index < 0) { + index += 65536; + } + switch (index) { case CONTROLLER_LEFTHAND_INDEX: { return getLeftHandControllerPoseInAvatarFrame().getTranslation(); diff --git a/interface/src/ui/overlays/Base3DOverlay.cpp b/interface/src/ui/overlays/Base3DOverlay.cpp index 2aec029041..10378ff858 100644 --- a/interface/src/ui/overlays/Base3DOverlay.cpp +++ b/interface/src/ui/overlays/Base3DOverlay.cpp @@ -56,21 +56,23 @@ QVariantMap convertOverlayLocationFromScriptSemantics(const QVariantMap& propert // make "position" and "orientation" be relative-to-parent if (result["localPosition"].isValid()) { - result.remove("localPosition"); result["position"] = result["localPosition"]; } else if (result["position"].isValid()) { glm::vec3 localPosition = SpatiallyNestable::worldToLocal(vec3FromVariant(result["position"]), parentID, parentJointIndex, success); - result["position"] = vec3toVariant(localPosition); + if (success) { + result["position"] = vec3toVariant(localPosition); + } } if (result["localOrientation"].isValid()) { result["orientation"] = result["localOrientation"]; - result.remove("localOrientation"); } else if (result["orientation"].isValid()) { glm::quat localOrientation = SpatiallyNestable::worldToLocal(quatFromVariant(result["orientation"]), - parentID, parentJointIndex, success); - result["orientation"] = quatToVariant(localOrientation); + parentID, parentJointIndex, success); + if (success) { + result["orientation"] = quatToVariant(localOrientation); + } } return result;