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);
#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
类开始写盘操作。
1 2 3
| vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New(); reader->SetFileName("data/simple80_complete.STL");
|
1 2 3 4 5
| vtkSmartPointer<vtkSTLWriter> stlWriter = vtkSmartPointer<vtkSTLWriter>::New(); stlWriter->SetFileName(file_path_str); stlWriter->SetInputConnection(stlFilter->GetOutputPort()); stlWriter->Write();
|