diff --git a/Base/SceneElements/Camera/imstkCamera.cpp b/Base/SceneElements/Camera/imstkCamera.cpp index 0811c8c6c1621ece471e55976a1d9b33ecc65ee8..2762ea0ee7456ef8bad6dc0ccb26d65c3ed8e5c6 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 b426206f8c17c445fc8f095477c453059e27a792..b0cda6d2642dafc6a28db06c6e42f48e0e19c157 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 0aa0705269ae123d513859e9797d13b72a3c5234..fb866cf4ea50ecadb8b2f964eb09c5880a5729d8 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 574a8c363ecb3f358427494cafacb26682e13588..a54023db998b558231d84d63eab86f6e46188c62 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 |