Read a PointSet#

Synopsis#

Read a PointSet

Results#

Print all points

Code#

C++#

#include "itkVTKPolyDataReader.h"

#include "itkImage.h"
#include "itkPointSet.h"

#include <string>
#include <iostream>

int
main(int argc, char * argv[])
{
  if (argc < 2)
  {
    std::cout << "Usage: " << argv[0] << " Input(.vtk)" << std::endl;
    return EXIT_FAILURE;
  }

  std::string InputFilename = argv[1];
  std::cout << "Input file: " << InputFilename << std::endl;

  // using PointSetType = itk::PointSet<double, 3 >;
  // auto pointsSet = PointSetType::New();
  // using PointType = PointSetType::PointType;

  constexpr unsigned int Dimension = 3;

  using CoordType = float;
  using MeshType = itk::Mesh<CoordType, Dimension>;

  using ReaderType = itk::VTKPolyDataReader<MeshType>;
  auto polyDataReader = ReaderType::New();

  using PointType = ReaderType::PointType;
  using VectorType = ReaderType::VectorType;

  polyDataReader->SetFileName(InputFilename.c_str());

  try
  {
    polyDataReader->Update();
  }
  catch (const itk::ExceptionObject & error)
  {
    std::cerr << "Error: " << error << std::endl;
    return EXIT_FAILURE;
  }

  std::cout << "polyDataReader:" << std::endl;
  std::cout << polyDataReader << std::endl;

  MeshType::Pointer mesh = polyDataReader->GetOutput();

  PointType point;

  std::cout << "Testing itk::VTKPolyDataReader" << std::endl;

  unsigned int numberOfPoints = mesh->GetNumberOfPoints();
  unsigned int numberOfCells = mesh->GetNumberOfCells();

  std::cout << "numberOfPoints= " << numberOfPoints << std::endl;
  std::cout << "numberOfCells= " << numberOfCells << std::endl;

  if (!numberOfPoints)
  {
    std::cerr << "ERROR: numberOfPoints= " << numberOfPoints << std::endl;
    return EXIT_FAILURE;
  }

  if (!numberOfCells)
  {
    std::cerr << "ERROR: numberOfCells= " << numberOfCells << std::endl;
    return EXIT_FAILURE;
  }

  // Retrieve points
  for (unsigned int i = 0; i < numberOfPoints; ++i)
  {
    PointType pp;
    bool      pointExists = mesh->GetPoint(i, &pp);

    if (pointExists)
    {
      std::cout << "Point is = " << pp << std::endl;
    }
  }
  return EXIT_SUCCESS;
}

Classes demonstrated#

template<typename TPixelType, unsigned int VDimension = 3, typename TMeshTraits = DefaultStaticMeshTraits<TPixelType, VDimension, VDimension>>
class PointSet : public itk::DataObject

A superclass of the N-dimensional mesh structure; supports point (geometric coordinate and attribute) definition.

PointSet is a superclass of the N-dimensional mesh structure (itk::Mesh). It provides the portion of the mesh definition for geometric coordinates (and associated attribute or pixel information). The defined API provides operations on points but does not tie down the underlying implementation and storage. A “MeshTraits” structure is used to define the container and identifier to access the points. See DefaultStaticMeshTraits for the set of type definitions needed. All types that are defined in the “MeshTraits” structure will have duplicate type alias in the resulting mesh itself.

PointSet has two template parameters. The first is the pixel type, or the type of data stored (optionally) with the points. The second is the “MeshTraits” structure controlling type information characterizing the point set. Most users will be happy with the defaults, and will not have to worry about this second argument.

Template parameters for PointSet:

TPixelType = The type stored as data for the point.

TMeshTraits = Type information structure for the point set.

ITK Sphinx Examples:

Subclassed by itk::Mesh< TPixelType, VDimension, TMeshTraits >

See itk::PointSet for additional documentation.