From 969251c8bbf6080e01134919712a349814415541 Mon Sep 17 00:00:00 2001
From: Sam Horvath <sam.horvath@kitware.com>
Date: Thu, 11 May 2017 14:30:12 -0400
Subject: [PATCH] ENH:  Setting custom controllers for imstkCamera

---
 Base/SceneElements/Camera/imstkCamera.cpp             | 11 ++---------
 Base/SceneElements/Camera/imstkCamera.h               |  2 +-
 .../Controllers/imstkFLSCameraController.cpp          |  5 ++++-
 Examples/Sandbox/main.cpp                             |  4 +++-
 4 files changed, 10 insertions(+), 12 deletions(-)

diff --git a/Base/SceneElements/Camera/imstkCamera.cpp b/Base/SceneElements/Camera/imstkCamera.cpp
index 0811c8c6c..2762ea0ee 100644
--- a/Base/SceneElements/Camera/imstkCamera.cpp
+++ b/Base/SceneElements/Camera/imstkCamera.cpp
@@ -106,16 +106,9 @@ Camera::getController() const
 }
 
 std::shared_ptr<CameraController>
-Camera::setupController(std::shared_ptr<DeviceClient> deviceClient)
+Camera::setController(std::shared_ptr<CameraController> controller)
 {
-    if(m_controller == nullptr)
-    {
-        m_controller = std::make_shared<CameraController>(*this, deviceClient);
-    }
-    else
-    {
-        m_controller->setDeviceClient(deviceClient);
-    }
+    m_controller = controller;
     return m_controller;
 }
 } // imstk
diff --git a/Base/SceneElements/Camera/imstkCamera.h b/Base/SceneElements/Camera/imstkCamera.h
index b426206f8..b0cda6d26 100644
--- a/Base/SceneElements/Camera/imstkCamera.h
+++ b/Base/SceneElements/Camera/imstkCamera.h
@@ -110,7 +110,7 @@ public:
     ///
     /// \brief
     ///
-    std::shared_ptr<CameraController> setupController(std::shared_ptr<DeviceClient> deviceClient);
+    std::shared_ptr<CameraController> setController(std::shared_ptr<CameraController> controller);
 
 protected:
     std::shared_ptr<CameraController> m_controller;   ///>
diff --git a/Base/SceneElements/Controllers/imstkFLSCameraController.cpp b/Base/SceneElements/Controllers/imstkFLSCameraController.cpp
index 0aa070526..fb866cf4e 100644
--- a/Base/SceneElements/Controllers/imstkFLSCameraController.cpp
+++ b/Base/SceneElements/Controllers/imstkFLSCameraController.cpp
@@ -76,7 +76,10 @@ FLSCameraController::getCameraAngulationTranslationOffset() const
 void
 FLSCameraController::runModule()
 {
-    this->setCameraHeadAngleOffset(arduinoClient->getRoll());
+    if (arduinoActive)
+    {
+      this->setCameraHeadAngleOffset(arduinoClient->getRoll() - m_rollOffset);
+    }
     auto roff = Quatd(Eigen::AngleAxisd(m_cameraHeadAngleOffset*PI / 180., Vec3d(0., 0., 1.)));
     roff *= m_cameraAngulationRotOffset;
     this->setCameraRotationOffset(roff);
diff --git a/Examples/Sandbox/main.cpp b/Examples/Sandbox/main.cpp
index 574a8c363..a54023db9 100644
--- a/Examples/Sandbox/main.cpp
+++ b/Examples/Sandbox/main.cpp
@@ -697,9 +697,11 @@ void testCameraController()
     cam->setPosition(imstk::Vec3d(0, 0, 10));
 
 #ifdef iMSTK_USE_OPENHAPTICS
+    
+    auto camControllerInput = std::make_shared<CameraController>(*cam, client);
 
     // Set camera controller
-    auto camController = cam->setupController(client);
+    auto camController = cam->setController(camControllerInput);
     //camController->setTranslationScaling(100);
     //LOG(INFO) << camController->getTranslationOffset(); // should be the same than initial cam position
     camController->setInversionFlags(imstk::CameraController::InvertFlag::rotY |
-- 
GitLab