Point Cloud Library (PCL)  1.14.0-dev
List of all members | Public Types | Public Member Functions
pcl::PCDReader Class Reference

Point Cloud Data (PCD) file format reader. More...

#include <pcl/io/pcd_io.h>

+ Inheritance diagram for pcl::PCDReader:
+ Collaboration diagram for pcl::PCDReader:

Public Types

enum  { PCD_V6 = 0 , PCD_V7 = 1 }
 Various PCD file versions. More...
 

Public Member Functions

 PCDReader ()=default
 Empty constructor. More...
 
 ~PCDReader () override=default
 Empty destructor. More...
 
int readHeader (std::istream &binary_istream, pcl::PCLPointCloud2 &cloud, Eigen::Vector4f &origin, Eigen::Quaternionf &orientation, int &pcd_version, int &data_type, unsigned int &data_idx)
 Read a point cloud data header from a PCD-formatted, binary istream. More...
 
int readHeader (const std::string &file_name, pcl::PCLPointCloud2 &cloud, Eigen::Vector4f &origin, Eigen::Quaternionf &orientation, int &pcd_version, int &data_type, unsigned int &data_idx, const int offset=0) override
 Read a point cloud data header from a PCD file. More...
 
int readHeader (const std::string &file_name, pcl::PCLPointCloud2 &cloud, const int offset=0)
 Read a point cloud data header from a PCD file. More...
 
int readBodyASCII (std::istream &stream, pcl::PCLPointCloud2 &cloud, int pcd_version)
 Read the point cloud data (body) from a PCD stream. More...
 
int readBodyBinary (const unsigned char *data, pcl::PCLPointCloud2 &cloud, int pcd_version, bool compressed, unsigned int data_idx)
 Read the point cloud data (body) from a block of memory. More...
 
int read (const std::string &file_name, pcl::PCLPointCloud2 &cloud, Eigen::Vector4f &origin, Eigen::Quaternionf &orientation, int &pcd_version, const int offset=0) override
 Read a point cloud data from a PCD file and store it into a pcl/PCLPointCloud2. More...
 
int read (const std::string &file_name, pcl::PCLPointCloud2 &cloud, const int offset=0)
 Read a point cloud data from a PCD (PCD_V6) and store it into a pcl/PCLPointCloud2. More...
 
template<typename PointT >
int read (const std::string &file_name, pcl::PointCloud< PointT > &cloud, const int offset=0)
 Read a point cloud data from any PCD file, and convert it to the given template format. More...
 
- Public Member Functions inherited from pcl::FileReader
 FileReader ()=default
 empty constructor More...
 
virtual ~FileReader ()=default
 empty destructor More...
 
int read (const std::string &file_name, pcl::PCLPointCloud2 &cloud, const int offset=0)
 Read a point cloud data from a FILE file (FILE_V6 only!) and store it into a pcl/PCLPointCloud2. More...
 
template<typename PointT >
int read (const std::string &file_name, pcl::PointCloud< PointT > &cloud, const int offset=0)
 Read a point cloud data from any FILE file, and convert it to the given template format. More...
 

Detailed Description

Point Cloud Data (PCD) file format reader.

Author
Radu B. Rusu

Definition at line 54 of file pcd_io.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum

Various PCD file versions.

PCD_V6 represents PCD files with version 0.6, which contain the following fields:

  • lines beginning with # are treated as comments
  • FIELDS ...
  • SIZE ...
  • TYPE ...
  • COUNT ...
  • WIDTH ...
  • HEIGHT ...
  • POINTS ...
  • DATA ascii/binary

Everything that follows DATA is interpreted as data points and will be read accordingly.

PCD_V7 represents PCD files with version 0.7 and has an important addon: it adds sensor origin/orientation (aka viewpoint) information to a dataset through the use of a new header field:

  • VIEWPOINT tx ty tz qw qx qy qz
Enumerator
PCD_V6 
PCD_V7 

Definition at line 83 of file pcd_io.h.

Constructor & Destructor Documentation

◆ PCDReader()

pcl::PCDReader::PCDReader ( )
default

Empty constructor.

◆ ~PCDReader()

pcl::PCDReader::~PCDReader ( )
overridedefault

Empty destructor.

Member Function Documentation

◆ read() [1/3]

int pcl::PCDReader::read ( const std::string &  file_name,
pcl::PCLPointCloud2 cloud,
const int  offset = 0 
)

Read a point cloud data from a PCD (PCD_V6) and store it into a pcl/PCLPointCloud2.

Note
This function is provided for backwards compatibility only and it can only read PCD_V6 files correctly, as pcl::PCLPointCloud2 does not contain a sensor origin/orientation. Reading any file

PCD_V6 will generate a warning.

Parameters
[in]file_namethe name of the file containing the actual PointCloud data
[out]cloudthe resultant PointCloud message read from disk
[in]offsetthe offset of where to expect the PCD Header in the file (optional parameter). One usage example for setting the offset parameter is for reading data from a TAR "archive containing multiple PCD files: TAR files always add a 512 byte header in front of the actual file, so set the offset to the next byte after the header (e.g., 513).
Returns
  • < 0 (-1) on error
  • == 0 on success

◆ read() [2/3]

int pcl::PCDReader::read ( const std::string &  file_name,
pcl::PCLPointCloud2 cloud,
Eigen::Vector4f &  origin,
Eigen::Quaternionf &  orientation,
int &  pcd_version,
const int  offset = 0 
)
overridevirtual

Read a point cloud data from a PCD file and store it into a pcl/PCLPointCloud2.

Parameters
[in]file_namethe name of the file containing the actual PointCloud data
[out]cloudthe resultant PointCloud message read from disk
[out]originthe sensor acquisition origin (only for > PCD_V7 - null if not present)
[out]orientationthe sensor acquisition orientation (only for > PCD_V7 - identity if not present)
[out]pcd_versionthe PCD version of the file (either PCD_V6 or PCD_V7)
[in]offsetthe offset of where to expect the PCD Header in the file (optional parameter). One usage example for setting the offset parameter is for reading data from a TAR "archive containing multiple PCD files: TAR files always add a 512 byte header in front of the actual file, so set the offset to the next byte after the header (e.g., 513).
Returns
  • < 0 (-1) on error
  • == 0 on success

Implements pcl::FileReader.

Referenced by pcl::gpu::DataSource::DataSource(), pcl::outofcore::OutofcoreOctreeDiskContainer< PointT >::insertRange(), pcl::io::loadPCDFile(), pcl::LineRGBD< PointXYZT, PointRGBT >::loadTemplates(), and pcl::outofcore::OutofcoreOctreeDiskContainer< PointT >::readRange().

◆ read() [3/3]

template<typename PointT >
int pcl::PCDReader::read ( const std::string &  file_name,
pcl::PointCloud< PointT > &  cloud,
const int  offset = 0 
)
inline

Read a point cloud data from any PCD file, and convert it to the given template format.

Parameters
[in]file_namethe name of the file containing the actual PointCloud data
[out]cloudthe resultant PointCloud message read from disk
[in]offsetthe offset of where to expect the PCD Header in the file (optional parameter). One usage example for setting the offset parameter is for reading data from a TAR "archive containing multiple PCD files: TAR files always add a 512 byte header in front of the actual file, so set the offset to the next byte after the header (e.g., 513).
Returns
  • < 0 (-1) on error
  • == 0 on success

Definition at line 277 of file pcd_io.h.

References pcl::fromPCLPointCloud2(), pcl::read(), pcl::PointCloud< PointT >::sensor_orientation_, and pcl::PointCloud< PointT >::sensor_origin_.

◆ readBodyASCII()

int pcl::PCDReader::readBodyASCII ( std::istream &  stream,
pcl::PCLPointCloud2 cloud,
int  pcd_version 
)

Read the point cloud data (body) from a PCD stream.

Reads the cloud points from a text-formatted stream. For use after readHeader(), when the resulting data_type == 0.

Attention
This assumes the stream has been seeked to the position indicated by the data_idx result of readHeader().
Parameters
[in]streamthe stream from which to read the body.
[out]cloudthe resultant point cloud dataset to be filled.
[in]pcd_versionthe PCD version of the stream (from readHeader()).
Returns
  • < 0 (-1) on error
  • == 0 on success

◆ readBodyBinary()

int pcl::PCDReader::readBodyBinary ( const unsigned char *  data,
pcl::PCLPointCloud2 cloud,
int  pcd_version,
bool  compressed,
unsigned int  data_idx 
)

Read the point cloud data (body) from a block of memory.

Reads the cloud points from a binary-formatted memory block. For use after readHeader(), when the resulting data_type is nonzero.

Parameters
[in]datathe memory location from which to read the body.
[out]cloudthe resultant point cloud dataset to be filled.
[in]pcd_versionthe PCD version of the stream (from readHeader()).
[in]compressedindicates whether the PCD block contains compressed data. This should be true if the data_type returned by readHeader() == 2.
[in]data_idxthe offset of the body, as reported by readHeader().
Returns
  • < 0 (-1) on error
  • == 0 on success

◆ readHeader() [1/3]

int pcl::PCDReader::readHeader ( const std::string &  file_name,
pcl::PCLPointCloud2 cloud,
const int  offset = 0 
)

Read a point cloud data header from a PCD file.

Load only the meta information (number of points, their types, etc), and not the points themselves, from a given PCD file. Useful for fast evaluation of the underlying data structure.

Attention
The PCD data is always stored in ROW major format! The read/write PCD methods will detect column major input and automatically convert it.
Parameters
[in]file_namethe name of the file to load
[out]cloudthe resultant point cloud dataset (only these members will be filled: width, height, point_step, row_step, fields[]; data is resized but not written)
[in]offsetthe offset of where to expect the PCD Header in the file (optional parameter). One usage example for setting the offset parameter is for reading data from a TAR "archive containing multiple PCD files: TAR files always add a 512 byte header in front of the actual file, so set the offset to the next byte after the header (e.g., 513).
Returns
  • < 0 (-1) on error
  • == 0 on success

◆ readHeader() [2/3]

int pcl::PCDReader::readHeader ( const std::string &  file_name,
pcl::PCLPointCloud2 cloud,
Eigen::Vector4f &  origin,
Eigen::Quaternionf &  orientation,
int &  pcd_version,
int &  data_type,
unsigned int &  data_idx,
const int  offset = 0 
)
overridevirtual

Read a point cloud data header from a PCD file.

Load only the meta information (number of points, their types, etc), and not the points themselves, from a given PCD file. Useful for fast evaluation of the underlying data structure.

Attention
The PCD data is always stored in ROW major format! The read/write PCD methods will detect column major input and automatically convert it.
Parameters
[in]file_namethe name of the file to load
[out]cloudthe resultant point cloud dataset (only these members will be filled: width, height, point_step, row_step, fields[]; data is resized but not written)
[out]originthe sensor acquisition origin (only for > PCD_V7 - null if not present)
[out]orientationthe sensor acquisition orientation (only for > PCD_V7 - identity if not present)
[out]pcd_versionthe PCD version of the file (i.e., PCD_V6, PCD_V7)
[out]data_typethe type of data (0 = ASCII, 1 = Binary, 2 = Binary compressed)
[out]data_idxthe offset of cloud data within the file
[in]offsetthe offset of where to expect the PCD Header in the file (optional parameter). One usage example for setting the offset parameter is for reading data from a TAR "archive containing multiple PCD files: TAR files always add a 512 byte header in front of the actual file, so set the offset to the next byte after the header (e.g., 513).
Returns
  • < 0 (-1) on error
  • == 0 on success

Implements pcl::FileReader.

◆ readHeader() [3/3]

int pcl::PCDReader::readHeader ( std::istream &  binary_istream,
pcl::PCLPointCloud2 cloud,
Eigen::Vector4f &  origin,
Eigen::Quaternionf &  orientation,
int &  pcd_version,
int &  data_type,
unsigned int &  data_idx 
)

Read a point cloud data header from a PCD-formatted, binary istream.

Load only the meta information (number of points, their types, etc), and not the points themselves, from a given PCD stream. Useful for fast evaluation of the underlying data structure.

Attention
The PCD data is always stored in ROW major format! The read/write PCD methods will detect column major input and automatically convert it.
Parameters
[in]binary_istreama std::istream with openmode set to std::ios::binary.
[out]cloudthe resultant point cloud dataset (only these members will be filled: width, height, point_step, row_step, fields[]; data is resized but not written)
[out]originthe sensor acquisition origin (only for > PCD_V7 - null if not present)
[out]orientationthe sensor acquisition orientation (only for > PCD_V7 - identity if not present)
[out]pcd_versionthe PCD version of the file (i.e., PCD_V6, PCD_V7)
[out]data_typethe type of data (0 = ASCII, 1 = Binary, 2 = Binary compressed)
[out]data_idxthe offset of cloud data within the file
Returns
  • < 0 (-1) on error
  • == 0 on success

Referenced by pcl::outofcore::OutofcoreOctreeDiskContainer< PointT >::getDataSize(), and pcl::outofcore::OutofcoreOctreeDiskContainer< PointT >::OutofcoreOctreeDiskContainer().


The documentation for this class was generated from the following file: