顏色可以直接作為一種標量屬性數據,設置到相應的點或者單元數據中,這是最直接的一種圖形着色方式。
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.結果
如果什么也沒有顯示可以用鼠標滾輪進行縮放一下