VTK学习记录2-交互机制

交互机制类就是vtkRenderWindowInteractor,可以使用这个类实现观众和actor的交互,比如让actor移动或者旋转等等。

机制说明:

  vtkRenderWindowInteractor会截取与之相关的vtkRenderWindow上的事件(这里是通过vtkRenderWindowInteractor里的SetRenderWindow()方法关联的)。

  当vtkRenderWindowInteractor::Start()会激活事件截取功能。

  所有截取的事件会被vtkRenderWindowInteractor::InterStyle这个实例处理,它的类型是vtkInteractorObserver。

  而vtkInteractorObserver作用就是用来检测发生的时间,这样截取的消息就可以处理了。

代码:

 1 //tips:如果不是用cmake编译,而是用vs编译的,需要加这三行。
 2 #include "vtkAutoInit.h" 
 3 VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2
 4 VTK_MODULE_INIT(vtkInteractionStyle);
 5 
 6 #include <vtkConeSource.h>
 7 #include <vtkRenderer.h>
 8 #include <vtkPolyDataMapper.h>
 9 #include <vtkRenderWindow.h> 
10 #include <vtkActor.h>
11 #include <vtkCamera.h>
12 #include <vtkRenderWindowInteractor.h>
13 #include <vtkInteractorStyleTrackballCamera.h>
14 #include <vtkInteractorStyleTrackballActor.h>
15 
16 int main()
17 {
18     vtkConeSource *cone = vtkConeSource::New();
19     cone->SetResolution(8);
20     cone->SetHeight(5);
21     cone->SetRadius(6);
22 
23     vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New();
24     coneMapper->SetInputData(cone->GetOutput());
25     coneMapper->SetInputConnection(cone->GetOutputPort());
26     
27     vtkActor *vtkactor = vtkActor::New();
28     vtkactor->SetMapper(coneMapper);
29 
30     vtkRenderer *render = vtkRenderer::New();
31     render->AddActor(vtkactor);
32     render->SetBackground(0.1, 0.2, 0.3);
33 
34     vtkRenderWindow *window = vtkRenderWindow::New();
35     window->SetSize(500, 500);
36     window->AddRenderer(render);
37 
38     vtkRenderWindowInteractor *interactor = vtkRenderWindowInteractor::New();
39     interactor->SetRenderWindow(window);//关联要交互的窗口
40 
41     //现在设置控制的是相机,也可以实现相同的效果。
42     vtkInteractorStyleTrackballCamera *style = vtkInteractorStyleTrackballCamera::New();
43     interactor->SetInteractorStyle(style);
44 
45     //用这个就是设置控制演员
46     /*vtkInteractorStyleTrackballActor *style2 = vtkInteractorStyleTrackballActor::New();
47     interactor->SetInteractorStyle(style2);*/
48 
49     //旋转代码
50     /*for (int i = 0; i < 1800; i++)
51     {
52         window->Render();
53         render->GetActiveCamera()->Azimuth(1);
54     }*/
55 
56     interactor->Initialize();
57     interactor->Start(); 
58 
59 
60     cone->Delete();
61     coneMapper->Delete();
62     vtkactor->Delete();
63     render->Delete();
64     window->Delete();
65     interactor->Delete();
66     style->Delete();
67     return 0;
68 }

 

注释:关于交互方式有很多种,可以换成下面这两行代码(记得加上对应的头文件)。那么鼠标滑动动的就是acctor了。具体还有别的交互方式可以自己去摸索。
1     //设置控制演员
2     vtkInteractorStyleTrackballActor *style2 = vtkInteractorStyleTrackballActor::New();
3     interactor->SetInteractorStyle(style2);

 

效果图:

 

 注释:点击actor,然后按键盘上的“P”按键,周围会出现一圈红色的包围盒。

  这里设置控制相机后,点击空白处就不会旋转了。注销掉那两行后,点击空白处actor会旋转。

 

posted @ 2021-07-15 10:00  QAQ_BIU  阅读(902)  评论(0)    收藏  举报