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);