7 #include "imstkKeyboardSceneControl.h" 8 #include "imstkCamera.h" 9 #include "imstkLogger.h" 10 #include "imstkModuleDriver.h" 11 #include "imstkRenderer.h" 12 #include "imstkScene.h" 13 #include "imstkSceneControlText.h" 14 #include "imstkSceneManager.h" 15 #include "imstkViewer.h" 22 LOG(INFO) <<
"Keyboard Scene Controls:";
23 LOG(INFO) <<
"----------------------------------------------------------------------";
24 LOG(INFO) <<
" | Space - pause/resume the scene";
25 LOG(INFO) <<
" | q/Q - stop both the scene and viewer";
26 LOG(INFO) <<
" | d/D - toggle debug/simulation mode";
27 LOG(INFO) <<
" | p/P - toggle visual/physics updates/second and task times display";
28 LOG(INFO) <<
" | r/R - reset the simulation";
29 LOG(INFO) <<
" | n/N - print camera pose of the active scene's camera";
30 LOG(INFO) <<
"----------------------------------------------------------------------";
34 KeyboardSceneControl::OnKeyPress(
const char key)
36 auto sceneManager = m_sceneManager.lock();
38 if (sceneManager ==
nullptr)
40 LOG(WARNING) <<
"Keyboard control disabled: No scene manager provided";
43 auto driver = m_driver.lock();
44 if (driver ==
nullptr)
46 LOG(WARNING) <<
"Keyboard control disabled: No driver provided";
54 const bool paused = sceneManager->getPaused();
57 if (m_sceneControlText !=
nullptr)
59 m_sceneControlText->setVisibility(m_sceneControlText->getUseTextStatus() ? !paused :
false);
63 for (
auto module : driver->getModules())
65 if (std::dynamic_pointer_cast<Viewer>(module) ==
nullptr)
67 module->setPaused(!paused);
71 paused ? sceneManager->resume() : sceneManager->pause();
74 else if (key ==
'q' || key ==
'Q' || key ==
'e' || key ==
'E')
76 driver->requestStatus(ModuleDriverStopped);
79 else if (key ==
'd' || key ==
'D')
82 const bool simModeOn = sceneManager->getMode() == SceneManager::Mode::Simulation ? true :
false;
84 for (
auto module : driver->getModules())
86 if (
auto subManager = std::dynamic_pointer_cast<SceneManager>(module))
90 subManager->setMode(SceneManager::Mode::Debug);
94 subManager->setMode(SceneManager::Mode::Simulation);
97 if (
auto viewer = std::dynamic_pointer_cast<Viewer>(module))
101 viewer->setRenderingMode(Renderer::Mode::Debug);
105 viewer->setRenderingMode(Renderer::Mode::Simulation);
110 simModeOn ? sceneManager->setMode(SceneManager::Mode::Debug) : sceneManager->setMode(SceneManager::Mode::Simulation);
113 else if (key ==
'p' || key ==
'P')
115 for (
auto module : driver->getModules())
117 std::shared_ptr<Viewer> viewer = std::dynamic_pointer_cast<
Viewer>(module);
118 if (viewer !=
nullptr)
120 viewer->
setInfoLevel((viewer->getInfoLevel() + 1) % viewer->getInfoLevelCount());
125 else if (key ==
'r' || key ==
'R')
127 sceneManager->getActiveScene()->reset();
129 else if (key ==
'n' || key ==
'N')
131 sceneManager->getActiveScene()->getActiveCamera()->print();
134 else if (key ==
'c' || key ==
'C')
136 if (m_sceneControlText !=
nullptr)
138 m_sceneControlText->setUseTextStatus(!m_sceneControlText->getUseTextStatus());
139 const bool paused = sceneManager->getPaused();
140 m_sceneControlText->setVisibility(m_sceneControlText->getUseTextStatus() ? !paused :
false);
virtual void setInfoLevel(const int level)
Set the info level, usually means display framerates and other viewer related information.
void printControls() override
Prints the controls.
Base class for viewer that manages render window and the renderers Creates backend-specific renderers...