From 1b1fdd3dc4a901454598e5d85224c8d6a4499637 Mon Sep 17 00:00:00 2001 From: Philip Rosedale Date: Fri, 13 Dec 2013 15:21:32 -0800 Subject: [PATCH] add menu option for sixense filter --- interface/src/Application.cpp | 3 +++ interface/src/Application.h | 1 + interface/src/Menu.cpp | 14 ++++++++++---- interface/src/Menu.h | 1 + interface/src/devices/SixenseManager.cpp | 13 ++++++++++++- interface/src/devices/SixenseManager.h | 8 +++++++- 6 files changed, 34 insertions(+), 6 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index f12cd94578..90d7fdb22a 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -240,6 +240,9 @@ Application::Application(int& argc, char** argv, timeval &startup_time) : // probably not the right long term solution. But for now, we're going to do this to // allow you to move a particle around in your hand _particleEditSender.setPacketsPerSecond(3000); // super high!! + + // Set the sixense filtering + _sixenseManager.setFilter(Menu::getInstance()->isOptionChecked(MenuOption::FilterSixense)); } Application::~Application() { diff --git a/interface/src/Application.h b/interface/src/Application.h index a37e13147a..b3b8ebf8f5 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -151,6 +151,7 @@ public: SerialInterface* getSerialHeadSensor() { return &_serialHeadSensor; } Webcam* getWebcam() { return &_webcam; } Faceshift* getFaceshift() { return &_faceshift; } + SixenseManager* getSixenseManager() { return &_sixenseManager; } BandwidthMeter* getBandwidthMeter() { return &_bandwidthMeter; } QSettings* getSettings() { return _settings; } Swatch* getSwatch() { return &_swatch; } diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 13510067cd..646fcadc40 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -357,11 +357,17 @@ Menu::Menu() : appInstance->getWebcam()->getGrabber(), SLOT(setDepthOnly(bool))); - QMenu* raveGloveOptionsMenu = developerMenu->addMenu("Hand Options"); + QMenu* handOptionsMenu = developerMenu->addMenu("Hand Options"); - addCheckableActionToQMenuAndActionHash(raveGloveOptionsMenu, MenuOption::SimulateLeapHand); - addCheckableActionToQMenuAndActionHash(raveGloveOptionsMenu, MenuOption::DisplayLeapHands, 0, true); - addCheckableActionToQMenuAndActionHash(raveGloveOptionsMenu, MenuOption::LeapDrive, 0, false); + addCheckableActionToQMenuAndActionHash(handOptionsMenu, + MenuOption::FilterSixense, + 0, + true, + appInstance->getSixenseManager(), + SLOT(setFilter(bool))); + addCheckableActionToQMenuAndActionHash(handOptionsMenu, MenuOption::SimulateLeapHand); + addCheckableActionToQMenuAndActionHash(handOptionsMenu, MenuOption::DisplayLeapHands, 0, true); + addCheckableActionToQMenuAndActionHash(handOptionsMenu, MenuOption::LeapDrive, 0, false); QMenu* trackingOptionsMenu = developerMenu->addMenu("Tracking Options"); diff --git a/interface/src/Menu.h b/interface/src/Menu.h index aa3b925517..aac503af6f 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -167,6 +167,7 @@ namespace MenuOption { const QString DisableLowRes = "Disable Lower Resolution While Moving"; const QString DisplayFrustum = "Display Frustum"; const QString DisplayLeapHands = "Display Leap Hands"; + const QString FilterSixense = "Smooth Sixense Movement"; const QString DontRenderVoxels = "Don't call _voxels.render()"; const QString DontCallOpenGLForVoxels = "Don't call glDrawRangeElementsEXT() for Voxels"; const QString EnableOcclusionCulling = "Enable Occlusion Culling"; diff --git a/interface/src/devices/SixenseManager.cpp b/interface/src/devices/SixenseManager.cpp index a76bed3ac9..3a5c2bf95c 100644 --- a/interface/src/devices/SixenseManager.cpp +++ b/interface/src/devices/SixenseManager.cpp @@ -16,7 +16,6 @@ SixenseManager::SixenseManager() { #ifdef HAVE_SIXENSE sixenseInit(); - sixenseSetFilterEnabled(1); #endif } @@ -26,6 +25,18 @@ SixenseManager::~SixenseManager() { #endif } +void SixenseManager::setFilter(bool filter) { +#ifdef HAVE_SIXENSE + if (filter) { + qDebug("Sixense Filter ON\n"); + sixenseSetFilterEnabled(1); + } else { + qDebug("Sixense Filter OFF\n"); + sixenseSetFilterEnabled(0); + } +#endif +} + void SixenseManager::update(float deltaTime) { #ifdef HAVE_SIXENSE if (sixenseGetNumActiveControllers() == 0) { diff --git a/interface/src/devices/SixenseManager.h b/interface/src/devices/SixenseManager.h index 43e11b682f..874f29fc34 100644 --- a/interface/src/devices/SixenseManager.h +++ b/interface/src/devices/SixenseManager.h @@ -10,13 +10,19 @@ #define __interface__SixenseManager__ /// Handles interaction with the Sixense SDK (e.g., Razer Hydra). -class SixenseManager { +class SixenseManager : public QObject { + Q_OBJECT public: SixenseManager(); ~SixenseManager(); void update(float deltaTime); + +public slots: + + void setFilter(bool filter); }; #endif /* defined(__interface__SixenseManager__) */ +