#include <vtkActor.h>
#include <vtkFloatArray.h>
#include <vtkPoints.h>
#include <vtkCellArray.h>
#include <vtkPolyLine.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <QList>
#include <QVector3D>
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);
int main()
{
// 四条线的数据
QList<QList<QVector3D>> pointData = {
{ {0,0,1}, {0,0,2}, {0,0,3}, {0,0,4} }, // Line1
{ {1,1,1}, {2,2,2}, {3,3,3} }, // Line2
{ {3,1,2}, {4,0,1} }, // Line3
{ {0,1,2}, {1,4,1} } // Line4
};
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New(); // 所有的点数据
vtkSmartPointer<vtkCellArray> cells = vtkSmartPointer<vtkCellArray>::New(); // 点的拓扑数据
for (int i = 0; i < pointData.size(); ++i)
{
vtkSmartPointer<vtkPolyLine> line = vtkSmartPointer<vtkPolyLine>::New();
line->GetPointIds()->SetNumberOfIds(pointData[i].size());
for (int j = 0; j < pointData[i].size(); ++j)
{
vtkIdType pid[1];
pid[0] = points->InsertNextPoint(pointData[i][j].x(), pointData[i][j].y(), pointData[i][j].z());
line->GetPointIds()->SetId(j, pid[0]);
}
cells->InsertNextCell(line);
}
vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
polyData->SetPoints(points);
polyData->SetLines(cells);
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputData(polyData);
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
vtkSmartPointer<vtkRenderer> render = vtkSmartPointer<vtkRenderer>::New();
render->AddActor(actor);
vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
renWin->AddRenderer(render);
vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(renWin);
vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
iren->SetInteractorStyle(style);
renWin->Render();
iren->Start();
style->Delete();
return 0;
}