7 #include "imstkVTKViewer.h" 8 #include "imstkLogger.h" 9 #include "imstkScene.h" 10 #include "imstkVTKInteractorStyle.h" 11 #include "imstkVTKRenderer.h" 12 #include "imstkVTKScreenCaptureUtility.h" 14 #include <vtkRenderer.h> 15 #include <vtkRenderWindow.h> 16 #include <vtkTextActor.h> 17 #include <vtkOpenGLRenderWindow.h> 19 #include <vtkCamera.h> 22 #include <vtkWin32HardwareWindow.h> 23 #include <vtkWin32RenderWindowInteractor.h> 25 #ifdef iMSTK_USE_VTK_OSMESA 26 #include <vtkGenericRenderWindowInteractor.h> 28 #include <vtkXRenderWindowInteractor.h> 34 VTKViewer::VTKViewer(std::string name) : AbstractVTKViewer(name)
37 m_vtkInteractorStyle = vtkSmartPointer<VTKInteractorStyle>::New();
41 auto iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
43 #ifdef iMSTK_USE_VTK_OSMESA 44 auto iren = vtkSmartPointer<vtkGenericRenderWindowInteractor>::New();
46 vtkSmartPointer<vtkXRenderWindowInteractor> iren = vtkSmartPointer<vtkXRenderWindowInteractor>::New();
47 iren->SetInteractorStyle(m_vtkInteractorStyle.Get());
50 iren->SetInteractorStyle(m_vtkInteractorStyle);
53 m_vtkRenderWindow = vtkSmartPointer<vtkRenderWindow>::New();
54 m_vtkRenderWindow->SetInteractor(iren);
55 m_vtkRenderWindow->SetSize(m_config->m_renderWinWidth, m_config->m_renderWinHeight);
58 m_screenCapturer = std::make_shared<VTKScreenCaptureUtility>(m_vtkRenderWindow);
68 if (scene == m_activeScene)
70 LOG(WARNING) << scene->getName() <<
" already is the viewer current scene.";
75 if (m_activeScene !=
nullptr)
77 auto vtkRenderer = getActiveVtkRenderer()->getVtkRenderer();
78 if (m_vtkRenderWindow->HasRenderer(vtkRenderer))
80 m_vtkRenderWindow->RemoveRenderer(vtkRenderer);
85 m_activeScene = scene;
88 if (!m_rendererMap.count(m_activeScene))
90 m_rendererMap[m_activeScene] = std::make_shared<VTKRenderer>(m_activeScene,
false);
94 m_rendererMap[m_activeScene]->initialize();
99 auto vtkRenderer = getActiveVtkRenderer()->getVtkRenderer();
102 m_vtkRenderWindow->AddRenderer(vtkRenderer);
103 m_vtkInteractorStyle->SetCurrentRenderer(vtkRenderer);
106 m_vtkRenderWindow->SetWindowName(m_activeScene->getName().data());
114 LOG(WARNING) <<
"Missing scene, can not set rendering mode.\n" 115 <<
"Use Viewer::setActiveScene to set the scene.";
120 getActiveRenderer()->setMode(mode,
false);
122 if (mode == Renderer::Mode::Debug)
124 if (!m_activeScene->hasEntity(m_debugEntity))
126 m_activeScene->addSceneObject(m_debugEntity);
129 else if (mode == Renderer::Mode::Simulation)
131 if (m_activeScene->hasEntity(m_debugEntity))
133 m_activeScene->removeSceneObject(m_debugEntity);
139 if (m_config->m_hideCurzor)
141 m_vtkRenderWindow->HideCursor();
144 if (m_config->m_hideBorder)
146 m_vtkRenderWindow->BordersOff();
149 if (m_config->m_fullScreen)
151 m_vtkRenderWindow->FullScreenOn();
156 VTKViewer::initModule()
158 if (!AbstractVTKViewer::initModule())
163 std::shared_ptr<VTKRenderer> ren = getActiveVtkRenderer();
172 m_vtkRenderWindow->SetWindowName(m_config->m_windowName.c_str());
173 if (m_vtkRenderWindow->GetInteractor()->HasObserver(vtkCommand::StartEvent))
175 m_vtkRenderWindow->GetInteractor()->InvokeEvent(vtkCommand::StartEvent,
nullptr);
178 m_vtkRenderWindow->GetInteractor()->Initialize();
179 setUseVsync(m_useVsync);
180 m_vtkRenderWindow->Render();
185 std::shared_ptr<VTKScreenCaptureUtility>
191 std::shared_ptr<KeyboardDeviceClient>
194 return VTKInteractorStyle::SafeDownCast(m_vtkInteractorStyle)->getKeyboardDeviceClient();
197 std::shared_ptr<MouseDeviceClient>
200 return VTKInteractorStyle::SafeDownCast(m_vtkInteractorStyle)->getMouseDeviceClient();
206 std::shared_ptr<VTKRenderer> ren = std::dynamic_pointer_cast<
VTKRenderer>(getActiveRenderer());
216 getActiveScene()->updateVisuals(getDt());
218 ren->updateRenderDelegates();
226 m_vtkRenderWindow->Render();
void setActiveScene(std::shared_ptr< Scene > scene) override
Set scene to be rendered.
void updateCamera()
Updates the camera.
std::shared_ptr< KeyboardDeviceClient > getKeyboardDevice() const override
Returns the device that emits key events.
std::shared_ptr< VTKScreenCaptureUtility > getScreenCaptureUtility() const
Access screen shot utility.
Mode
Enumerations for the render mode.
void setRenderingMode(const Renderer::Mode mode) override
Set the rendering mode. In debug, debug actors will be shown.
void updateModule() override
last framerate value used for moving average estimate
Utility class to manage screen capture through VTK.
std::shared_ptr< MouseDeviceClient > getMouseDevice() const override
Returns the device that emits mouse events.