我是VTK的新手。
我正在阅读 VTK 源代码并在Rendering/vtkInteractorStyleTrackballActor.cxx中找到了这个方法:
void vtkInteractorStyleTrackballActor::OnLeftButtonDown()
{
int x = this->Interactor->GetEventPosition()[0];
int y = this->Interactor->GetEventPosition()[1];
this->FindPokedRenderer(x, y);
this->FindPickedActor(x, y);
if (this->CurrentRenderer == NULL || this->InteractionProp == NULL)
{
return;
}
this->GrabFocus(this->EventCallbackCommand);
if (this->Interactor->GetShiftKey())
{
this->StartPan();
}
else if (this->Interactor->GetControlKey())
{
this->StartSpin();
}
else
{
this->StartRotate();
}
}
你能解释一下什么叫 this->GrabFocus(this->EventCallbackCommand); 实际上呢?
在我发现的文档中
void vtkInteractorObserver::GrabFocus(vtkCommand *mouseEvents,
vtkCommand *keypressEvents = NULL)
这些方法使交互器观察者能够独占地获取由其关联的 vtkRenderWindowInteractor 调用的所有事件。(一旦事件序列开始,小部件通常使用此方法来抓取事件。) GrabFocus() 签名最多需要两个对应于鼠标事件和按键事件的 vtkCommand。(这两个命令是分开的,因此小部件可以侦听其激活按键,以及侦听 DeleteEvents,而无需实际处理鼠标事件。)
但我真的不明白他们的意思。请给我一些简单的例子,这个方法通常是如何使用的。