From fc3fb7d3f041559e0e8e87344a46f33134b7f0ea Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Mon, 10 Jun 2013 11:46:06 -0700 Subject: [PATCH 1/2] fixed bug with loading of corrupt settings file where NaN returned for avatar position details --- interface/src/Application.cpp | 40 ++++++++++++++++++++++++++--------- interface/src/Avatar.cpp | 24 ++++++++++----------- interface/src/Util.cpp | 10 +++++++++ interface/src/Util.h | 4 ++++ 4 files changed, 55 insertions(+), 23 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index eb03e1f592..5aafd9f4a6 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2573,20 +2573,40 @@ void Application::saveAction(QSettings* set, QAction* action) { set->setValue(action->text(), action->isChecked()); } -void Application::loadSettings(QSettings* set) { - if (!set) set = getSettings(); +void Application::loadSettings(QSettings* settings) { + if (!settings) settings = getSettings(); - _headCameraPitchYawScale = set->value("headCameraPitchYawScale", 0.0f).toFloat(); - scanMenuBar(&Application::loadAction, set); - getAvatar()->loadData(set); + _headCameraPitchYawScale = settings->value("headCameraPitchYawScale", 0.0f).toFloat(); + + settings->beginGroup("View Frustum Offset Camera"); + // in case settings is corrupt or missing loadSetting() will check for NaN + _viewFrustumOffsetYaw = loadSetting(settings, "viewFrustumOffsetYaw" , 0.0f); + _viewFrustumOffsetPitch = loadSetting(settings, "viewFrustumOffsetPitch" , 0.0f); + _viewFrustumOffsetRoll = loadSetting(settings, "viewFrustumOffsetRoll" , 0.0f); + _viewFrustumOffsetDistance = loadSetting(settings, "viewFrustumOffsetDistance", 0.0f); + _viewFrustumOffsetUp = loadSetting(settings, "viewFrustumOffsetUp" , 0.0f); + settings->endGroup(); + + scanMenuBar(&Application::loadAction, settings); + getAvatar()->loadData(settings); } -void Application::saveSettings(QSettings* set) { - if (!set) set = getSettings(); - set->setValue("headCameraPitchYawScale", _headCameraPitchYawScale); - scanMenuBar(&Application::saveAction, set); - getAvatar()->saveData(set); +void Application::saveSettings(QSettings* settings) { + if (!settings) settings = getSettings(); + + settings->setValue("headCameraPitchYawScale", _headCameraPitchYawScale); + + settings->beginGroup("View Frustum Offset Camera"); + settings->setValue("viewFrustumOffsetYaw", _viewFrustumOffsetYaw); + settings->setValue("viewFrustumOffsetPitch", _viewFrustumOffsetPitch); + settings->setValue("viewFrustumOffsetRoll", _viewFrustumOffsetRoll); + settings->setValue("viewFrustumOffsetDistance", _viewFrustumOffsetDistance); + settings->setValue("viewFrustumOffsetUp", _viewFrustumOffsetUp); + settings->endGroup(); + + scanMenuBar(&Application::saveAction, settings); + getAvatar()->saveData(settings); } void Application::importSettings() { diff --git a/interface/src/Avatar.cpp b/interface/src/Avatar.cpp index e5c5a76a70..32b35aebac 100644 --- a/interface/src/Avatar.cpp +++ b/interface/src/Avatar.cpp @@ -1212,22 +1212,20 @@ void Avatar::renderBody(bool lookingInMirror, bool renderAvatarBalls) { } +void Avatar::loadData(QSettings* settings) { + settings->beginGroup("Avatar"); - -void Avatar::loadData(QSettings* set) { - set->beginGroup("Avatar"); + // in case settings is corrupt or missing loadSetting() will check for NaN + _bodyYaw = loadSetting(settings, "bodyYaw" , 0.0f); + _bodyPitch = loadSetting(settings, "bodyPitch", 0.0f); + _bodyRoll = loadSetting(settings, "bodyRoll" , 0.0f); + _position.x = loadSetting(settings, "position_x", 0.0f); + _position.y = loadSetting(settings, "position_y", 0.0f); + _position.z = loadSetting(settings, "position_z", 0.0f); - _bodyYaw = set->value("bodyYaw", _bodyYaw).toFloat(); - _bodyPitch = set->value("bodyPitch", _bodyPitch).toFloat(); - _bodyRoll = set->value("bodyRoll", _bodyRoll).toFloat(); + _voxels.setVoxelURL(settings->value("voxelURL").toUrl()); - _position.x = set->value("position_x", _position.x).toFloat(); - _position.y = set->value("position_y", _position.y).toFloat(); - _position.z = set->value("position_z", _position.z).toFloat(); - - _voxels.setVoxelURL(set->value("voxelURL").toUrl()); - - set->endGroup(); + settings->endGroup(); } void Avatar::getBodyBallTransform(AvatarJointID jointID, glm::vec3& position, glm::quat& rotation) const { diff --git a/interface/src/Util.cpp b/interface/src/Util.cpp index 9a31af93f4..5c9d0c8984 100644 --- a/interface/src/Util.cpp +++ b/interface/src/Util.cpp @@ -498,6 +498,16 @@ void runTimingTests() { } +float loadSetting(QSettings* settings, const char* name, float defaultValue) { + float value = settings->value(name, 0.0f).toFloat(); + if (isnan(value)) { + value = defaultValue; + } + return value; +} + + + diff --git a/interface/src/Util.h b/interface/src/Util.h index 3e084fd16d..6cac785956 100644 --- a/interface/src/Util.h +++ b/interface/src/Util.h @@ -17,6 +17,7 @@ #include #include +#include // the standard sans serif font family #define SANS_FONT_FAMILY "Helvetica" @@ -66,4 +67,7 @@ void renderCircle(glm::vec3 position, float radius, glm::vec3 surfaceNormal, int void runTimingTests(); + +float loadSetting(QSettings* settings, const char* name, float defaultValue); + #endif From 27f8f5dcb8c16e4a00770de973597104de62914b Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Mon, 10 Jun 2013 14:50:04 -0700 Subject: [PATCH 2/2] fix CR feedback --- interface/src/Application.cpp | 11 +++++++---- interface/src/Util.cpp | 9 +-------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 5aafd9f4a6..01c97766c6 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2574,9 +2574,11 @@ void Application::saveAction(QSettings* set, QAction* action) { } void Application::loadSettings(QSettings* settings) { - if (!settings) settings = getSettings(); + if (!settings) { + settings = getSettings(); + } - _headCameraPitchYawScale = settings->value("headCameraPitchYawScale", 0.0f).toFloat(); + _headCameraPitchYawScale = loadSetting(settings, "headCameraPitchYawScale", 0.0f); settings->beginGroup("View Frustum Offset Camera"); // in case settings is corrupt or missing loadSetting() will check for NaN @@ -2593,10 +2595,11 @@ void Application::loadSettings(QSettings* settings) { void Application::saveSettings(QSettings* settings) { - if (!settings) settings = getSettings(); + if (!settings) { + settings = getSettings(); + } settings->setValue("headCameraPitchYawScale", _headCameraPitchYawScale); - settings->beginGroup("View Frustum Offset Camera"); settings->setValue("viewFrustumOffsetYaw", _viewFrustumOffsetYaw); settings->setValue("viewFrustumOffsetPitch", _viewFrustumOffsetPitch); diff --git a/interface/src/Util.cpp b/interface/src/Util.cpp index 5c9d0c8984..74fe5abd1c 100644 --- a/interface/src/Util.cpp +++ b/interface/src/Util.cpp @@ -497,17 +497,10 @@ void runTimingTests() { } - float loadSetting(QSettings* settings, const char* name, float defaultValue) { float value = settings->value(name, 0.0f).toFloat(); if (isnan(value)) { value = defaultValue; } return value; -} - - - - - - +} \ No newline at end of file