diff --git a/src/Vtk/uLibVtkViewer.cpp b/src/Vtk/uLibVtkViewer.cpp index a6c3701..668afc7 100644 --- a/src/Vtk/uLibVtkViewer.cpp +++ b/src/Vtk/uLibVtkViewer.cpp @@ -37,9 +37,29 @@ #include #include #include +#include +#include #include "uLibVtkViewer.h" +// Custom interactor style: disables spin/inertia so the scene only +// rotates while the mouse is actively being moved with the button held. +class vtkInteractorStyleNoSpin : public vtkInteractorStyleTrackballCamera +{ +public: + static vtkInteractorStyleNoSpin *New(); + vtkTypeMacro(vtkInteractorStyleNoSpin, vtkInteractorStyleTrackballCamera); + + // Override: when the left button is released, immediately stop any + // ongoing motion (rotation/spin) so no momentum is carried over. + void OnLeftButtonUp() override + { + this->StopState(); + vtkInteractorStyleTrackballCamera::OnLeftButtonUp(); + } +}; +vtkStandardNewMacro(vtkInteractorStyleNoSpin); + namespace uLib { namespace Vtk { @@ -75,6 +95,11 @@ void Viewer::InstallPipe() vtkSmartPointer::New(); renderWindowInteractor->SetRenderWindow(m_RenderWindow); + // Use a custom style with no spin/inertia + vtkSmartPointer style = + vtkSmartPointer::New(); + renderWindowInteractor->SetInteractorStyle(style); + // annotation // m_Annotation->GetTextProperty()->SetColor(1,1,1); m_Annotation->GetTextProperty()->SetFontFamilyToArial();