Read a VTP file

From KitwarePublic
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

As VTP is a very flexible format, there is no way to make a generic reader. You must read the data that you are interested in. A generic reader can only look for points and triangles.

<source lang="cpp">

  1. include <iostream>
  2. include <vector>
  1. include "vtkCellArray.h"
  2. include "vtkPoints.h"
  3. include "vtkXMLPolyDataReader.h"
  4. include "vtkPolyData.h"

struct Point { double x,y,z; Point(const double xin, const double yin, const double zin) : x(xin), y(yin), z(zin) {} };

int main() { //get all data from the file vtkXMLPolyDataReader* reader = vtkXMLPolyDataReader::New(); reader->SetFileName("Triangle.vtp"); reader->Update(); vtkPolyData* polydata = reader->GetOutput();

//get the number of points the file contains vtkIdType NumPoints = polydata->GetNumberOfPoints();

//if there are no points, quit if(!(NumPoints > 0) ) { exit(-1); }

//read in all of the points std::vector<Point> Points; double point[3]; for(vtkIdType i = 0; i < NumPoints; i++) { polydata->GetPoint(i, point); Points.push_back(Point(point[0], point[1], point[2])); }

//get the triangles (if there are any) std::vector<std::vector<int> > VertexLists; vtkIdType NumPolys = polydata->GetNumberOfPolys(); if(NumPolys > 0) { vtkCellArray* TriangleCells = polydata->GetPolys(); vtkIdType npts; vtkIdType *pts;

while(TriangleCells->GetNextCell(npts, pts)) { std::vector<int> List(3); List[0] = pts[0]; List[1] = pts[1]; List[2] = pts[2];

VertexLists.push_back(List); } }

std::cout << "Points: " << Points.size() << std::endl; for(unsigned int i = 0; i < Points.size(); i++) { std::cout << Points[i].x << " " << Points[i].y << " " << Points[i].z << std::endl; }

std::cout << std::endl;

std::cout << "Triangles: " << VertexLists.size() << std::endl; for(unsigned int i = 0; i < VertexLists.size(); i++) { std::cout << VertexLists[i][0] << " " << VertexLists[i][1] << " " << VertexLists[i][2] << std::endl; } return 0; } </source>