#include <vtkInteractorStyleTrackballCamera.h> // 移動・視線方向回転・ズームのみできるインタラクタスタイル class InteractorStylePanRollZoom final : public vtkInteractorStyleTrackballCamera { public: static InteractorStylePanRollZoom* New(); vtkTypeMacro(InteractorStylePanRollZoom, vtkInteractorStyleTrackballCamera); // 左ドラッグ開始 void OnLeftButtonDown() override { // 分割ビューなどを想定し、マウス位置からレンダラーを特定 // マウス位置にあるレンダラーをCurrentRendererにセット this->FindPokedRenderer( this->Interactor->GetEventPosition()[0], this->Interactor->GetEventPosition()[1] ); if (!this->CurrentRenderer) { return; } // vtkInteractorStyleTrackballCameraの機能を使って 視線方向基準のRollを開始 this->StartSpin(); } // 左ドラッグ終了 void OnLeftButtonUp() override { this->EndSpin(); if (this->Interactor) { this->ReleaseFocus(); } } // 不要なキーボード操作を無効化 void OnChar() override { // 何もしない 既定のキーバインドを殺す } }; vtkStandardNewMacro(InteractorStylePanRollZoom);
auto renderer = vtkSmartPointer<vtkRenderer>::New(); renderer->AddActor(actor); ////////////////////////////////////// auto interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); auto style = vtkSmartPointer<InteractorStylePanRollZoom>::New(); interactor->SetInteractorStyle(style); ////////////////////////////////////// auto renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->AddRenderer(renderer); renderWindow->SetInteractor(interactor); interactor->Start(); //イベントループへ入る
