欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

玩转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 }