#include <vtkSmartPointer.h>
#include <vtkPoints.h>
#include <vtkCellArray.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkLookupTable.h>
#include <vtkFloatArray.h>
int main()
{
// 创建点坐标
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
points->InsertNextPoint(0, 0, 0);
points->InsertNextPoint(1, 1, 1);
points->InsertNextPoint(2, 2, 2);
// 创建Cell数组
vtkSmartPointer<vtkCellArray> lines = vtkSmartPointer<vtkCellArray>::New();
lines->InsertNextCell(2);//一个Cell中点的个数
lines->InsertCellPoint(0);
lines->InsertCellPoint(1);
lines->InsertNextCell(2);//一个Cell中点的个数
lines->InsertCellPoint(1);
lines->InsertCellPoint(2);
// 创建PolyData对象,并将点坐标和Cell数组设置为其数据
vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
polyData->SetPoints(points);
polyData->SetLines(lines);
// 创建数值数组
vtkSmartPointer<vtkFloatArray> values = vtkSmartPointer<vtkFloatArray>::New();
values->SetName("Values");
values->SetNumberOfComponents(1);
values->SetNumberOfTuples(lines->GetNumberOfCells());
values->InsertTuple1(0, 0.5); // 第一个Cell的数值为0.5
values->InsertTuple1(1, 1.5); // 第二个Cell的数值为1.5
// 创建颜色映射
vtkSmartPointer<vtkLookupTable> colorMap = vtkSmartPointer<vtkLookupTable>::New();
colorMap->SetTableRange(0.0, 2.0); // 数值范围
colorMap->SetHueRange(0.0, 1.0); // 色调范围
colorMap->Build();
// 将数值数组关联到PolyData对象的Cell数据上
// polyData->GetCellData()->SetScalars(values);
polyData->GetCellData()->AddArray(values);
polyData->GetCellData()->SetActiveScalars("Values");
// 创建PolyDataMapper对象,并将PolyData对象设置为其输入
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputData(polyData);
mapper->SetScalarRange(0.0, 2.0); // 数值范围
// 设置颜色映射到Mapper
mapper->SetLookupTable(colorMap);
mapper->ScalarVisibilityOn();
// 创建Actor对象,并将PolyDataMapper对象设置为其Mapper
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
// 创建Renderer和RenderWindow
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
// 创建RenderWindowInteractor并将其关联到RenderWindow
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
// 将Actor添加到Renderer中
renderer->AddActor(actor);
// 渲染并启动交互
renderWindow->Render();
renderWindowInteractor->Start();
return 0;
}