2

我是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,而无需实际处理鼠标事件。)

但我真的不明白他们的意思。请给我一些简单的例子,这个方法通常是如何使用的。

4

0 回答 0