47{
   48    if (argc < 2)
   49    {
   50        cout << "Usage: VtkStripsToPolys vtk-file" << endl;
   51        exit(-1);
   52    }
   53 
   54    vtkIdType npts;
   55#if VTK_MAJOR_VERSION >= 9 ||                                                  \
   56    (VTK_MAJOR_VERSION >= 8 && VTK_MINOR_VERSION >= 90)
   57    const vtkIdType *pts = nullptr;
   58#else
   59    vtkIdType *pts = 0;
   60#endif
   61 
   62    
   63    vtkPolyDataReader *vtkMeshReader = vtkPolyDataReader::New();
   64    vtkMeshReader->SetFileName(argv[1]);
   65    vtkMeshReader->Update();
   66    vtkPolyData *vtkMesh    = vtkMeshReader->GetOutput();
   67    vtkPoints *vtkPoints    = vtkMesh->GetPoints();
   68    vtkCellArray *vtkStrips = vtkMesh->GetStrips();
   69 
   70    
   71    ASSERTL0(vtkPoints, 
"ERROR: cannot get points from mesh.");
 
   72    ASSERTL0(vtkStrips, 
"ERROR: cannot get triangle strips from mesh.");
 
   73 
   74    
   75    vtkCellArray *vtkPolys = vtkCellArray::New();
   76 
   77    
   78    vtkStrips->InitTraversal();
   79    while (vtkStrips->GetNextCell(npts, pts))
   80    {
   81        for (int j = 0; j < npts - 2; ++j)
   82        {
   83            vtkPolys->InsertNextCell(3, &pts[j]);
   84        }
   85    }
   86 
   87    
   88    vtkPolyData *vtkNewMesh = vtkPolyData::New();
   89    vtkNewMesh->SetPoints(vtkPoints);
   90    vtkNewMesh->SetPolys(vtkPolys);
   91 
   92    
   93    for (int i = 0; i < vtkMesh->GetPointData()->GetNumberOfArrays(); ++i)
   94    {
   95        vtkNewMesh->GetPointData()->SetScalars(
   96            vtkMesh->GetPointData()->GetArray(i));
   97    }
   98 
   99    
  100    vtkPolyDataWriter *vtkMeshWriter = vtkPolyDataWriter::New();
  101    vtkMeshWriter->SetFileName(argv[2]);
  102#if VTK_MAJOR_VERSION <= 5
  103    vtkMeshWriter->SetInput(vtkNewMesh);
  104#else
  105    vtkMeshWriter->SetInputData(vtkNewMesh);
  106#endif
  107    vtkMeshWriter->Write();
  108}
#define ASSERTL0(condition, msg)