diff --git a/Web/WebAssembly/vtkWasmSceneManager.cxx b/Web/WebAssembly/vtkWasmSceneManager.cxx index 9259a31880daedb498b27f1dcfb79932517ebf24..b3df8043cc746367887f2c41b354f92cd6deab20 100644 --- a/Web/WebAssembly/vtkWasmSceneManager.cxx +++ b/Web/WebAssembly/vtkWasmSceneManager.cxx @@ -9,6 +9,7 @@ #include "vtkRenderWindow.h" #include "vtkRenderWindowInteractor.h" #include "vtkRenderer.h" +#include "vtkWebAssemblyRenderWindowInteractor.h" // Init factories. #ifdef VTK_MODULE_ENABLE_VTK_RenderingContextOpenGL2 @@ -16,6 +17,7 @@ #endif #ifdef VTK_MODULE_ENABLE_VTK_RenderingOpenGL2 #include "vtkOpenGLPolyDataMapper.h" // needed to remove unused mapper, also includes vtkRenderingOpenGL2Module.h +#include "vtkWebAssemblyOpenGLRenderWindow.h" #endif #ifdef VTK_MODULE_ENABLE_VTK_RenderingUI #include "vtkRenderingUIModule.h" @@ -100,13 +102,30 @@ bool vtkWasmSceneManager::StartEventLoop(vtkTypeUInt32 identifier) { vtkRenderWindowInteractor::InteractorManagesTheEventLoop = false; auto object = this->GetObjectAtId(identifier); - if (auto renderWindow = vtkRenderWindow::SafeDownCast(object)) + if (auto* renderWindow = vtkRenderWindow::SafeDownCast(object)) { - auto interactor = renderWindow->GetInteractor(); - std::cout << "Started event loop id=" << identifier - << ", interactor=" << interactor->GetObjectDescription() << '\n'; - interactor->Start(); - return true; + if (auto* interactor = + vtkWebAssemblyRenderWindowInteractor::SafeDownCast(renderWindow->GetInteractor())) + { + if (auto* wasmGLWindow = vtkWebAssemblyOpenGLRenderWindow::SafeDownCast(renderWindow)) + { + // copy canvas selector from the render window to the interactor. + interactor->SetCanvasSelector(wasmGLWindow->GetCanvasSelector()); + std::cout << "Started event loop id=" << identifier + << ", interactor=" << interactor->GetObjectDescription() << '\n'; + interactor->Start(); + return true; + } + else + { + std::cerr << "Render window class " << renderWindow->GetClassName() + << " is not recognized!\n"; + } + } + else + { + std::cerr << "Interactor class " << renderWindow->GetClassName() << " is not recognized!\n"; + } } return false; }