VTK学习笔记
VTK程序结构示例
| 12
 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
 
 | #include <vtkAutoInit.h>VTK_MODULE_INIT(vtkRenderingOpenGL2);
 VTK_MODULE_INIT(vtkInteractionStyle);
 
 #include <vtkSphereSource.h>
 #include <vtkPolyData.h>
 #include <vtkSmartPointer.h>
 #include <vtkPolyDataMapper.h>
 #include <vtkActor.h>
 #include <vtkRenderWindow.h>
 #include <vtkRenderer.h>
 #include <vtkRenderWindowInteractor.h>
 
 int main(int, char* [])
 {
 
 vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New();
 sphereSource->SetCenter(0.0, 0.0, 0.0);
 sphereSource->SetRadius(5.0);
 
 
 vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
 mapper->SetInputConnection(sphereSource->GetOutputPort());
 
 
 vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
 actor->SetMapper(mapper);
 
 
 vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
 vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
 renderWindow->AddRenderer(renderer);
 vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
 renderWindowInteractor->SetRenderWindow(renderWindow);
 
 renderer->AddActor(actor);
 renderer->SetBackground(.3, .6, .3);
 renderWindow->Render();
 renderWindowInteractor->Start();
 return EXIT_SUCCESS;
 }
 
 | 
vtkSmartPointer
VTK智能指针类,构造vtk对象时,通过智能指针进行实例化。
使用New()定义变量后,需在其生命周期结束前使用Delete()释放内存。
vtkRenderWindow
渲染窗口,显示的窗口对象
vtkSphereSource
生成柱体。派生自vtkPolyDataAlgorithm,其生成的数据类型为vtkPolyData。    
vtkPolyDataMapper
该类用于渲染多边形几何数据(vtkPolyData),派生自vtkMapper,将输入的数据转换为几何图元(点、线、多边形)进行渲染。
vtkPolyDataMapper::SetInputConnection():VTK可视化管线的输入数据接口,对应可视化管线的输出数据接口为GetOutputPort()
vtkActor
派生自vtkProp类,渲染场景中数据的可视化表达通过vtkProp的子类负责。
vtkActor::SetMapper():用于设置生成几何图元的Mapper,即连接一个Actor到可视化管线的末端(即Mapper)。
VTK数据读写
将外部数据读入可视化管线,步骤如下:
- 实例化Reader对象;
- 指定所要读取的文件名;
- 调用Update()方法促使管线执行(若后面调用了Render()方法,这一步可以省略)。
将数据写盘,步骤如下:
- 实例化Writer对象;
- 输入要写盘的数据以及指定代写盘的文件名;
- 调用Write()方法促使Writer类开始写盘操作。
| 12
 3
 
 | vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New();
 reader->SetFileName("data/simple80_complete.STL");
 
 | 
| 12
 3
 4
 5
 
 | vtkSmartPointer<vtkSTLWriter> stlWriter = vtkSmartPointer<vtkSTLWriter>::New();
 stlWriter->SetFileName(file_path_str);
 stlWriter->SetInputConnection(stlFilter->GetOutputPort());
 stlWriter->Write();
 
 |