VTK vtkpolydata图形着色

颜色可以直接作为一种标量属性数据,设置到相应的点或者单元数据中,这是最直接的一种图形着色方式。

1.需求

根据vtkLookupTable为点设置相对应的颜色,在这里我们需要首先为点设置标量属性值。

2.代码

 1 #include <vtkSmartPointer.h>
 2 #include <vtkPolyData.h>
 3 #include <vtkFloatArray.h>
 4 #include <vtkCellData.h>
 5 #include <vtkLookupTable.h>
 6 #include <vtkPolyDataMapper.h>
 7 #include <vtkActor.h>
 8 #include <vtkProperty.h>
 9 #include <vtkRenderer.h>
10 #include <vtkRenderWindow.h>
11 #include <vtkRenderWindowInteractor.h>
12 
13 int main(){
14 
15     vtkSmartPointer<vtkPoints> pts = vtkSmartPointer<vtkPoints>::New();
16 
17     pts->InsertNextPoint(0.0, 0.0, 0.0);
18     pts->InsertNextPoint(1.0, 0.0, 0.0);
19     pts->InsertNextPoint(1.0, 1.0, 0.0);
20     pts->InsertNextPoint(0.0, 1.0, 0.0);
21     pts->InsertNextPoint(2.0, 0.0, 0.0);
22 
23     vtkSmartPointer<vtkCellArray> vertices = vtkSmartPointer<vtkCellArray>::New();
24 
25     for (int i = 0; i < 5; i++) {
26         vtkIdType pt[1] = { i };
27         vertices->InsertNextCell(1, pt);
28     }
29 
30     vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
31     polyData->SetPoints(pts);
32     polyData->SetVerts(vertices);
33 
34     //标量属性
35     vtkSmartPointer<vtkFloatArray> cellScalars = vtkSmartPointer<vtkFloatArray>::New();
36 
37     for (int i = 0; i < 9; i++)    {
38         cellScalars->InsertNextValue(i + 1); //九个索引
39     }
40 
41     polyData->GetCellData()->SetScalars(cellScalars);
42 
43     vtkSmartPointer<vtkLookupTable> lut = vtkSmartPointer<vtkLookupTable>::New();
44     lut->SetNumberOfTableValues(10);
45     lut->Build();
46     lut->SetTableValue(0, 0, 0, 0, 1);
47     lut->SetTableValue(1, 0.8900, 0.8100, 0.3400, 1);
48     lut->SetTableValue(2, 1.0000, 0.3882, 0.2784, 1);
49     lut->SetTableValue(3, 0.9608, 0.8706, 0.7020, 1);
50     lut->SetTableValue(4, 0.9020, 0.9020, 0.9804, 1);
51     lut->SetTableValue(5, 1.0000, 0.4900, 0.2500, 1);
52 
53     vtkSmartPointer<vtkPolyDataMapper> mapper =vtkSmartPointer<vtkPolyDataMapper>::New();
54     mapper->SetInputData(polyData);
55     mapper->SetScalarRange(0, 5);
56     mapper->SetLookupTable(lut);
57 
58     vtkSmartPointer<vtkActor> actor =vtkSmartPointer<vtkActor>::New();
59     actor->SetMapper(mapper);
60     actor->GetProperty()->SetPointSize(3);
61 
62     vtkSmartPointer<vtkRenderer> render =vtkSmartPointer<vtkRenderer>::New();
63     render->AddActor(actor);
64     render->SetBackground(0.0, 0.0, 0.0);
65 
66     vtkSmartPointer<vtkRenderWindow> rw =vtkSmartPointer<vtkRenderWindow>::New();
67     rw->AddRenderer(render);
68     rw->SetSize(320, 320);
69 
70     vtkSmartPointer<vtkRenderWindowInteractor> rwi = vtkSmartPointer<vtkRenderWindowInteractor>::New();
71     rwi->SetRenderWindow(rw);
72     rwi->Start();
73 
74     return 0;
75 }

3.结果
在这里插入图片描述

如果什么也没有显示可以用鼠标滚轮进行缩放一下

原文地址:https://www.cnblogs.com/ybqjymy/p/13984770.html