Skip to content
Snippets Groups Projects
Commit 2cfc317e authored by Alexis Girault's avatar Alexis Girault
Browse files

ENH: Use VTK Interactor to command window

parent 87717570
No related branches found
No related tags found
No related merge requests found
......@@ -25,6 +25,7 @@
#include "vtkCamera.h"
#include "vtkLight.h"
#include "vtkAxesActor.h"
#include "vtkInteractorStyleTrackballCamera.h"
#include "g3log/g3log.hpp"
......@@ -41,13 +42,6 @@ Viewer::initRenderer()
return;
}
// Check RenderWindow
if (m_renderWindow == nullptr)
{
LOG(INFO) << "No render window specified, creating default render window.";
m_renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
}
// Create and add renderer
auto renderer = vtkSmartPointer<vtkRenderer>::New();
m_renderWindow->AddRenderer(renderer);
......@@ -83,6 +77,21 @@ Viewer::initRenderer()
renderer->AddActor(axes);
}
void
Viewer::startRenderingLoop()
{
auto style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
interactor->SetInteractorStyle( style );
interactor->SetRenderWindow( m_renderWindow );
interactor->Start();
}
void
Viewer::endRenderingLoop()
{
interactor->TerminateApp();
}
vtkSmartPointer<vtkRenderWindow>
Viewer::getRenderWindow() const
{
......@@ -106,26 +115,4 @@ Viewer::setCurrentScene(std::shared_ptr<Scene>scene)
{
m_currentScene = scene;
}
void
Viewer::initModule()
{
LOG(DEBUG) << m_name << " : init";
this->initRenderer();
m_renderWindow->SetWindowName(m_name.data());
m_renderWindow->Start();
}
void
Viewer::cleanUpModule()
{
LOG(DEBUG) << m_name << " : cleanUp";
m_renderWindow->Finalize();
}
void
Viewer::runModule()
{
m_renderWindow->Render();
}
}
......@@ -24,22 +24,28 @@
#include <memory>
#include "imstkModule.h"
#include "imstkScene.h"
#include "vtkSmartPointer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
namespace imstk {
class Viewer : public Module
class Viewer
{
public:
Viewer(std::string name = "iMSTK Viewer") : Module(name) {}
Viewer(std::string name = "iMSTK Viewer")
{
m_renderWindow->SetWindowName(name.data());
m_renderWindow->SetSize(1000,800);
}
~Viewer() = default;
void initRenderer();
void startRenderingLoop();
void endRenderingLoop();
vtkSmartPointer<vtkRenderWindow>getRenderWindow() const;
void setRenderWindow(vtkSmartPointer<vtkRenderWindow>renWin);
......@@ -49,11 +55,8 @@ public:
protected:
void initModule() override;
void runModule() override;
void cleanUpModule() override;
vtkSmartPointer<vtkRenderWindow> m_renderWindow;
vtkSmartPointer<vtkRenderWindow> m_renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
std::shared_ptr<Scene> m_currentScene;
};
}
......
......@@ -139,9 +139,9 @@ SimulationManager::startSimulation(std::string sceneName)
return;
}
// Start viewer
// Init viewer renderer
m_viewer->setCurrentScene(startingScene);
this->startModuleInNewThread(m_viewer);
m_viewer->initRenderer();
// Start scene
this->startModuleInNewThread(startingScene);
......@@ -149,6 +149,10 @@ SimulationManager::startSimulation(std::string sceneName)
// Update simulation status
m_status = SimulationStatus::RUNNING;
// Start Rendering
m_viewer->startRenderingLoop();
this->endSimulation();
}
void
......@@ -253,10 +257,6 @@ SimulationManager::endSimulation()
return;
}
// End viewer
m_viewer->end();
m_threadMap.at(m_viewer->getName()).join();
// End all scenes
for (auto pair : m_sceneMap)
{
......
......@@ -50,12 +50,6 @@ int main()
sceneTest->addSceneObject(sphereObj);
sdk->startSimulation("SceneTest");
std::this_thread::sleep_for(std::chrono::seconds(10));
sdk->pauseSimulation();
std::this_thread::sleep_for(std::chrono::seconds(5));
sdk->runSimulation();
std::this_thread::sleep_for(std::chrono::seconds(10));
sdk->endSimulation();
/*
//--------------------------------------------
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment