玩转VTK图形处理:理解颜色映射的实战应用
最编程
2024-07-22 16:02:40
...
1 #include "vtkActor.h"
2 #include "vtkCellArray.h"
3 #include "vtkFloatArray.h"
4 #include "vtkPointData.h"
5 #include "vtkPoints.h"
6 #include "vtkPolyData.h"
7 #include "vtkPolyDataMapper.h"
8 #include "vtkRenderWindow.h"
9 #include "vtkRenderWindowInteractor.h"
10 #include "vtkRenderer.h"
11 #include <vtkLookupTable.h>
12 #include "vtkSmartPointer.h"
13
14 int main()
15 {
16 int i;
17 //定义立方体的顶点坐标
18 static float x[8][3] = { { 0, 0, 0 }, { 1, 0, 0 }, { 1, 1, 0 }, { 0, 1, 0 },
19 { 0, 0, 1 }, { 1, 0, 1 }, { 1, 1, 1 }, { 0, 1, 1 } };
20 //定义单元,每4个顶点建立一个四边形单元,共计6个单元
21 static vtkIdType pts[6][4] = { { 0, 1, 2, 3 }, { 4, 5, 6, 7 }, { 0, 1, 5, 4 },
22 { 1, 2, 6, 5 }, { 2, 3, 7, 6 }, { 3, 0, 4, 7 } };
23 //创建对象
24 vtkSmartPointer<vtkPolyData> cube = vtkSmartPointer<vtkPolyData>::New();
25 vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
26 vtkSmartPointer<vtkCellArray> polys = vtkSmartPointer<vtkCellArray>::New();
27 //存储顶点
28 for (i = 0; i < 8; i++)
29 points->InsertPoint(i, x[i]);
30 //设定单元
31 for (i = 0; i < 6; i++)
32 polys->InsertNextCell(4, pts[i]);
33
34 //存储标量值
35 vtkSmartPointer<vtkFloatArray> scalars = vtkSmartPointer<vtkFloatArray>::New();
36 //设定每个顶点的标量值
37 for (i = 0; i < 8; i++)
38 scalars->InsertTuple1(i, i*4);
39 //创建多边形数据
40 cube->SetPoints(points);
41 //设定单元类型为多边形
42 cube->SetPolys(polys);
43 //设定每个顶点的标量值
44 cube->GetPointData()->SetScalars(scalars);
45 //定义颜色映射表
46 vtkSmartPointer<vtkLookupTable> pColorTable = vtkSmartPointer<vtkLookupTable>::New();
47 //设置颜色表中的颜色
48 pColorTable->SetNumberOfColors(256);
49 pColorTable->SetHueRange(0.67, 0.0); //色调范围从红色到蓝色
50 pColorTable->Build();
51 //数据映射
52 vtkSmartPointer<vtkPolyDataMapper> cubeMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
53 cubeMapper->SetInputData(cube);
54 cubeMapper->SetScalarRange(0, 7);
55 cubeMapper->SetLookupTable(pColorTable);
56 vtkSmartPointer<vtkActor> cubeActor = vtkSmartPointer<vtkActor>::New();
57 cubeActor->SetMapper(cubeMapper);
58
59 vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
60 vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
61 renWin->AddRenderer(renderer);
62 vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
63 iren->SetRenderWindow(renWin);
64 renderer->AddActor(cubeActor);
65 renderer->SetBackground(1, 1, 1);
66 renWin->SetSize(500, 500);
67 renWin->Render();
68 iren->Start();
69 return 0;
70 }