スポンサーリンク

VTKで平行移動・Roll・ズームができるインタラクタ作成

#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(); //イベントループへ入る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: