From a9cf836cb047c4ed03b7457b5597812fb457e38c Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Fri, 22 Jan 2016 11:13:55 -0800 Subject: [PATCH] added isVec3NaN and isQuatNaN functions --- libraries/shared/src/AACube.cpp | 2 +- libraries/shared/src/GLMHelpers.cpp | 7 +++++++ libraries/shared/src/GLMHelpers.h | 4 ++++ libraries/shared/src/SharedUtil.cpp | 4 ++-- libraries/shared/src/SharedUtil.h | 1 + libraries/shared/src/SpatiallyNestable.cpp | 12 ++++++------ libraries/shared/src/Transform.cpp | 6 +++--- 7 files changed, 24 insertions(+), 12 deletions(-) diff --git a/libraries/shared/src/AACube.cpp b/libraries/shared/src/AACube.cpp index cdff048e71..8118d276d7 100644 --- a/libraries/shared/src/AACube.cpp +++ b/libraries/shared/src/AACube.cpp @@ -480,7 +480,7 @@ AACube& AACube::operator += (const glm::vec3& point) { } bool AACube::containsNaN() const { - if (isNaN(_corner.x) || isNaN(_corner.y) || isNaN(_corner.z)) { + if (isVec3NaN(_corner)) { return true; } if (isNaN(_scale)) { diff --git a/libraries/shared/src/GLMHelpers.cpp b/libraries/shared/src/GLMHelpers.cpp index 101412bbf7..57bfff8b9d 100644 --- a/libraries/shared/src/GLMHelpers.cpp +++ b/libraries/shared/src/GLMHelpers.cpp @@ -425,3 +425,10 @@ void generateBasisVectors(const glm::vec3& primaryAxis, const glm::vec3& seconda vAxisOut = glm::cross(wAxisOut, uAxisOut); } +bool isVec3NaN(glm::vec3 value) { + return isNaN(value.x) || isNaN(value.y) || isNaN(value.z); +} + +bool isQuatNaN(glm::quat value) { + return isNaN(value.w) || isNaN(value.x) || isNaN(value.y) || isNaN(value.z); +} diff --git a/libraries/shared/src/GLMHelpers.h b/libraries/shared/src/GLMHelpers.h index 55458e98a2..b6a9af78c7 100644 --- a/libraries/shared/src/GLMHelpers.h +++ b/libraries/shared/src/GLMHelpers.h @@ -224,4 +224,8 @@ glm::vec3 transformVector(const glm::mat4& m, const glm::vec3& v); void generateBasisVectors(const glm::vec3& primaryAxis, const glm::vec3& secondaryAxis, glm::vec3& uAxisOut, glm::vec3& vAxisOut, glm::vec3& wAxisOut); + +bool isVec3NaN(glm::vec3 value); +bool isQuatNaN(glm::quat value); + #endif // hifi_GLMHelpers_h diff --git a/libraries/shared/src/SharedUtil.cpp b/libraries/shared/src/SharedUtil.cpp index 4c893e7074..8db66f3fca 100644 --- a/libraries/shared/src/SharedUtil.cpp +++ b/libraries/shared/src/SharedUtil.cpp @@ -624,8 +624,8 @@ void debug::checkDeadBeef(void* memoryVoid, int size) { assert(memcmp((unsigned char*)memoryVoid, DEADBEEF, std::min(size, DEADBEEF_SIZE)) != 0); } -bool isNaN(float value) { - return value != value; +bool isNaN(float value) { + return value != value; } QString formatUsecTime(float usecs, int prec) { diff --git a/libraries/shared/src/SharedUtil.h b/libraries/shared/src/SharedUtil.h index 1fae3bcff6..521a2738df 100644 --- a/libraries/shared/src/SharedUtil.h +++ b/libraries/shared/src/SharedUtil.h @@ -162,6 +162,7 @@ bool isBetween(int64_t value, int64_t max, int64_t min); /// \return bool is the float NaN bool isNaN(float value); + QString formatUsecTime(float usecs, int prec = 3); QString formatSecondsElapsed(float seconds); bool similarStrings(const QString& stringA, const QString& stringB); diff --git a/libraries/shared/src/SpatiallyNestable.cpp b/libraries/shared/src/SpatiallyNestable.cpp index cb29db47aa..591bf1d0cf 100644 --- a/libraries/shared/src/SpatiallyNestable.cpp +++ b/libraries/shared/src/SpatiallyNestable.cpp @@ -315,7 +315,7 @@ glm::vec3 SpatiallyNestable::getPosition(int jointIndex, bool& success) const { void SpatiallyNestable::setPosition(const glm::vec3& position, bool& success) { // guard against introducing NaN into the transform - if (isNaN(position.x) || isNaN(position.y) || isNaN(position.z)) { + if (isVec3NaN(position)) { success = false; return; } @@ -364,7 +364,7 @@ glm::quat SpatiallyNestable::getOrientation(int jointIndex, bool& success) const void SpatiallyNestable::setOrientation(const glm::quat& orientation, bool& success) { // guard against introducing NaN into the transform - if (isNaN(orientation.x) || isNaN(orientation.y) || isNaN(orientation.z) || isNaN(orientation.w)) { + if (isQuatNaN(orientation)) { success = false; return; } @@ -448,7 +448,7 @@ glm::vec3 SpatiallyNestable::getScale(int jointIndex) const { void SpatiallyNestable::setScale(const glm::vec3& scale) { // guard against introducing NaN into the transform - if (isNaN(scale.x) || isNaN(scale.y) || isNaN(scale.z)) { + if (isVec3NaN(scale)) { qDebug() << "SpatiallyNestable::setLocalScale -- scale contains NaN"; return; } @@ -489,7 +489,7 @@ glm::vec3 SpatiallyNestable::getLocalPosition() const { void SpatiallyNestable::setLocalPosition(const glm::vec3& position) { // guard against introducing NaN into the transform - if (isNaN(position.x) || isNaN(position.y) || isNaN(position.z)) { + if (isVec3NaN(position)) { qDebug() << "SpatiallyNestable::setLocalPosition -- position contains NaN"; return; } @@ -509,7 +509,7 @@ glm::quat SpatiallyNestable::getLocalOrientation() const { void SpatiallyNestable::setLocalOrientation(const glm::quat& orientation) { // guard against introducing NaN into the transform - if (isNaN(orientation.x) || isNaN(orientation.y) || isNaN(orientation.z) || isNaN(orientation.w)) { + if (isQuatNaN(orientation)) { qDebug() << "SpatiallyNestable::setLocalOrientation -- orientation contains NaN"; return; } @@ -530,7 +530,7 @@ glm::vec3 SpatiallyNestable::getLocalScale() const { void SpatiallyNestable::setLocalScale(const glm::vec3& scale) { // guard against introducing NaN into the transform - if (isNaN(scale.x) || isNaN(scale.y) || isNaN(scale.z)) { + if (isVec3NaN(scale)) { qDebug() << "SpatiallyNestable::setLocalScale -- scale contains NaN"; return; } diff --git a/libraries/shared/src/Transform.cpp b/libraries/shared/src/Transform.cpp index ff0e0a01c7..3e75b58816 100644 --- a/libraries/shared/src/Transform.cpp +++ b/libraries/shared/src/Transform.cpp @@ -152,13 +152,13 @@ QJsonObject Transform::toJson(const Transform& transform) { } bool Transform::containsNaN() const { - if (isNaN(_rotation.x) || isNaN(_rotation.y) || isNaN(_rotation.z) || isNaN(_rotation.w)) { + if (isQuatNaN(_rotation)) { return true; } - if (isNaN(_scale.x) || isNaN(_scale.y) || isNaN(_scale.z)) { + if (isVec3NaN(_scale)) { return true; } - if (isNaN(_translation.x) || isNaN(_translation.y) || isNaN(_translation.z)) { + if (isVec3NaN(_translation)) { return true; } return false;