VTK 实例52:曲率计算

发布时间 2023-08-16 08:39:52作者: 一杯清酒邀明月

 1 #include "vtkAutoInit.h" 
 2 //VTK_MODULE_INIT(vtkRenderingOpenGL2);
 3 //VTK_MODULE_INIT(vtkInteractionStyle);
 4 
 5 VTK_MODULE_INIT(vtkRenderingOpenGL2);
 6 VTK_MODULE_INIT(vtkInteractionStyle);
 7 VTK_MODULE_INIT(vtkRenderingFreeType);
 8 
 9 #include <vtkSmartPointer.h>
10 #include <vtkPolyDataReader.h>
11 #include <vtkCurvatures.h>
12 #include <vtkLookupTable.h>
13 #include <vtkPolyDataMapper.h>
14 #include <vtkActor.h>
15 #include <vtkScalarBarActor.h>
16 #include <vtkPointData.h>
17 #include <vtkRenderer.h>
18 #include <vtkRenderWindow.h>
19 #include <vtkRenderWindowInteractor.h>
20 
21     int main()
22     {
23         vtkSmartPointer<vtkPolyDataReader> reader =
24             vtkSmartPointer<vtkPolyDataReader>::New();
25         reader->SetFileName("C:\\Users\\Administrator\\Desktop\\VTK2\\hellovtk\\vtk_图像处理学习\\第六章_图像处理\\data\\fran_cut.vtk");
26         reader->Update();
27 
28         vtkSmartPointer<vtkCurvatures> curvaturesFilter =
29             vtkSmartPointer<vtkCurvatures>::New();
30         curvaturesFilter->SetInputConnection(reader->GetOutputPort());
31         //curvaturesFilter->SetCurvatureTypeToMinimum(); //最小曲率
32         curvaturesFilter->SetCurvatureTypeToMaximum();   //最大曲率
33         //curvaturesFilter->SetCurvatureTypeToGaussian();//高斯曲率
34         //curvaturesFilter->SetCurvatureTypeToMean();    //平均曲率
35         curvaturesFilter->Update();
36 
37         double scalarRange[2];
38         curvaturesFilter->GetOutput()->GetScalarRange(scalarRange);
39         //建立查找表 做颜色映射
40         vtkSmartPointer<vtkLookupTable> lut =
41             vtkSmartPointer<vtkLookupTable>::New();
42         lut->SetHueRange(0.0, 0.6);
43         lut->SetAlphaRange(1.0, 1.0);
44         lut->SetValueRange(1.0, 1.0);
45         lut->SetSaturationRange(1.0, 1.0);
46         lut->SetNumberOfTableValues(256);
47         lut->SetRange(scalarRange);
48         lut->Build();
49         ///
50         vtkSmartPointer<vtkPolyDataMapper> mapper =
51             vtkSmartPointer<vtkPolyDataMapper>::New();
52         mapper->SetInputData(curvaturesFilter->GetOutput());
53         mapper->SetLookupTable(lut);
54         mapper->SetScalarRange(scalarRange);
55 
56         vtkSmartPointer<vtkActor> actor =
57             vtkSmartPointer<vtkActor>::New();
58         actor->SetMapper(mapper);
59 
60         vtkSmartPointer<vtkScalarBarActor> scalarBar =
61             vtkSmartPointer<vtkScalarBarActor>::New();
62         scalarBar->SetLookupTable(mapper->GetLookupTable());
63         scalarBar->SetTitle(curvaturesFilter->GetOutput()->GetPointData()->GetScalars()->GetName());
64         scalarBar->SetNumberOfLabels(5); //设置5个标签
65 
66         vtkSmartPointer<vtkRenderer> render =
67             vtkSmartPointer<vtkRenderer>::New();
68         render->AddActor(actor);
69         render->AddActor2D(scalarBar);
70         render->SetBackground(0, 0, 0);
71 
72         vtkSmartPointer<vtkRenderWindow> rw =
73             vtkSmartPointer<vtkRenderWindow>::New();
74         rw->AddRenderer(render);
75         rw->SetSize(640, 480);
76         rw->SetWindowName("Calculating PolyData Curvature");
77 
78         vtkSmartPointer<vtkRenderWindowInteractor> rwi =
79             vtkSmartPointer<vtkRenderWindowInteractor>::New();
80         rwi->SetRenderWindow(rw);
81         rwi->Initialize();
82         rwi->Start();
83         return 0;
84     }