vtk中使用按键响应 vtkCallbackCommand + Lambda

    auto callbackData =  std::tuple<vtkPolyDataMapper*, vtkScalarBarActor*>(mapper, scalarBar);

    // 创建一个回调命令来处理键盘事件
    vtkSmartPointer<vtkCallbackCommand> keypressCallback = vtkSmartPointer<vtkCallbackCommand>::New();
    keypressCallback->SetCallback([](vtkObject* caller, long unsigned int eventId, void* clientData, void* callData) 
        {
        vtkRenderWindowInteractor* interactor = static_cast<vtkRenderWindowInteractor*>(caller);

        auto* data = static_cast<std::tuple<vtkPolyDataMapper*, vtkScalarBarActor*>*>(clientData);
        auto* mapper = std::get<0>(*data);
        auto* scalarBar = std::get<1>(*data);

        std::string key = interactor->GetKeySym();
        if (key == "k")
        {
            if (mapper->GetScalarVisibility())
            {
                mapper->ScalarVisibilityOff();
                scalarBar->VisibilityOff();
            }
            else
            {
                mapper->ScalarVisibilityOn();
                scalarBar->VisibilityOn();
            }
            interactor->GetRenderWindow()->Render();
        }
        });

    // 将 mapper 和 scalarBar 传递给回调函数
    keypressCallback->SetClientData(&callbackData);
    interactor->AddObserver(vtkCommand::KeyPressEvent, keypressCallback);

 

posted @ 2025-03-28 14:12  小丧美如画  阅读(58)  评论(0)    收藏  举报