in modules/viz/src/vtk/vtkVizInteractorStyle.cpp [386:498]
void cv::viz::vtkVizInteractorStyle::OnKeyDown()
{
FindPokedRenderer(Interactor->GetEventPosition()[0], Interactor->GetEventPosition()[1]);
String key(Interactor->GetKeySym());
if (key.find("XF86ZoomIn") != String::npos)
zoomIn();
else if (key.find("XF86ZoomOut") != String::npos)
zoomOut();
else if (key.find("F5") != String::npos)
{
FlyMode = !FlyMode;
std::cout << (FlyMode ? "Fly mode: on" : "Fly mode: off") << std::endl;
}
// Save the initial windows width/height
if (win_size_[0] == -1 || win_size_[1] == -1)
win_size_ = Vec2i(Interactor->GetRenderWindow()->GetSize());
switch (Interactor->GetKeyCode())
{
case 'a': case 'A' : KeysDown |=16; break;
case 'z': case 'Z' : KeysDown |=32; break;
case 'h': case 'H' : printHelp(); break;
case 'p': case 'P' : setRepresentationToPoints(); break;
case 'k': case 'K' : exportScene(); break;
case 'j': case 'J' : saveScreenshot(cv::format("screenshot-%d.png", (unsigned int)time(0))); break;
case 'c': case 'C' : printCameraParams(); break;
case '=': zoomIn(); break;
case 43: // KEY_PLUS
{
if (FlyMode)
break;
if (Interactor->GetAltKey())
zoomIn();
else
changePointsSize(+1.f);
break;
}
case 45: // KEY_MINUS
{
if (FlyMode)
break;
if (Interactor->GetAltKey())
zoomOut();
else
changePointsSize(-1.f);
break;
}
// Switch between maximize and original window size
case 'f': case 'F':
{
if (Interactor->GetAltKey())
toggleFullScreen();
break;
}
// 's'/'S' w/out ALT
case 's': case 'S':
{
if (Interactor->GetAltKey())
toggleStereo();
break;
}
case 'o': case 'O':
{
vtkSmartPointer<vtkCamera> cam = CurrentRenderer->GetActiveCamera();
cam->SetParallelProjection(!cam->GetParallelProjection());
Interactor->Render();
break;
}
// Overwrite the camera reset
case 'r': case 'R':
{
if (Interactor->GetAltKey())
resetViewerPose();
break;
}
case 'q': case 'Q':
Interactor->ExitCallback(); return;
default:
Superclass::OnKeyDown(); break;
}
KeyboardEvent event(KeyboardEvent::KEY_DOWN, Interactor->GetKeySym(), Interactor->GetKeyCode(), getModifiers());
if (keyboardCallback_)
keyboardCallback_(event, keyboard_callback_cookie_);
if (FlyMode && (KeysDown & (32+16)) == (32+16))
{
if (State == VTKIS_FORWARDFLY || State == VTKIS_REVERSEFLY)
StopState();
}
else if (FlyMode && (KeysDown & 32) == 32)
{
if (State == VTKIS_FORWARDFLY)
StopState();
if (State == VTKIS_NONE)
StartState(VTKIS_REVERSEFLY);
}
else if (FlyMode && (KeysDown & 16) == 16)
{
if (State == VTKIS_REVERSEFLY)
StopState();
if (State == VTKIS_NONE)
StartState(VTKIS_FORWARDFLY);
}
Interactor->Render();
}