VTK_学习笔记

VTK学习笔记

VTK程序结构示例

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
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
//以上三行,必须要加,因为是用VS编译,否则无法显示
#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* [])
{
// Create a sphere
vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New();
sphereSource->SetCenter(0.0, 0.0, 0.0);
sphereSource->SetRadius(5.0);

//mapper
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(sphereSource->GetOutputPort());

//actor
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);

//renderer ,renderWindow, renderWindowInteractor.
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); // Background color green
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数据读写

将外部数据读入可视化管线,步骤如下:

  1. 实例化Reader对象;
  2. 指定所要读取的文件名;
  3. 调用Update()方法促使管线执行(若后面调用了Render()方法,这一步可以省略)。

将数据写盘,步骤如下:

  1. 实例化Writer对象;
  2. 输入要写盘的数据以及指定代写盘的文件名;
  3. 调用Write()方法促使Writer类开始写盘操作。
1
2
3
//读取模型
vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New();
reader->SetFileName("data/simple80_complete.STL");
1
2
3
4
5
//导出为STL格式
vtkSmartPointer<vtkSTLWriter> stlWriter = vtkSmartPointer<vtkSTLWriter>::New();
stlWriter->SetFileName(file_path_str);
stlWriter->SetInputConnection(stlFilter->GetOutputPort());
stlWriter->Write();

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!