vtk处理外部事件

Command方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class CommandSubclass : public vtkCommand
{
public:
vtkTypeMacro(CommandSubclass , vtkCommand);

static CommandSubclass *New()
{
return new CommandSubclass ;
}

void Execute(vtkObject *caller, unsigned long eventId,void *callData)
{
// 过滤按键信息
if (eventId == vtkCommand::KeyPressEvent)
{
// 过滤ctrl
vtkRenderWindowInteractor* interactor =
dynamic_cast<vtkRenderWindowInteractor*>(caller);

if (interactor->GetControlKey())
{
std::string key = interactor->GetKeySym();
if(key == "a")
cout << "ctrl + a" << endl;
}
}
}
};

InteractorStyle方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class MouseInteractorStyleDoubleClick : public vtkInteractorStyleTrackballCamera
{
public:
// 先是interactor style进行处理
// 再是Command进行捕获处理
static MouseInteractorStyleDoubleClick* New();
vtkTypeMacro(MouseInteractorStyleDoubleClick, vtkInteractorStyleTrackballCamera);

MouseInteractorStyleDoubleClick() : NumberOfClicks(0), ResetPixelDistance(5)
{
this->PreviousPosition[0] = 0;
this->PreviousPosition[1] = 0;
}
//http://blog.sina.com.cn/s/blog_5e3a1bbb0100esv3.html
// keydown跟keypress区别
//virtual void OnKeyPress()
//{
// //// Get the keypress
// //vtkRenderWindowInteractor *rwi = this->Interactor;
// //std::string key = rwi->GetKeySym();
// //if (rwi->GetControlKey())
// //{
// // // ctrl+ a
// // if (key == "a")
// // {
// // std::cout << "Ctrl + a" << std::endl;
// // }
// // //rwi->get
// //}
// //vtkInteractorStyleTrackballCamera::OnKeyPress();
//}

virtual void OnLeftButtonUp()
{
vtkRenderWindowInteractor *rwi = this->Interactor;
std::cout << "left mouse" << std::endl;
if (rwi->GetControlKey())
{
std::cout << "Ctrl + left mouse" << std::endl;
}
vtkInteractorStyleTrackballCamera::OnLeftButtonUp();
}


private:
unsigned int NumberOfClicks;
int PreviousPosition[2];
int ResetPixelDistance;
};
vtkStandardNewMacro(MouseInteractorStyleDoubleClick);

坚持原创技术分享,您的支持将鼓励我继续创作!