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.结果
在这里插入图片描述

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM