40#include <pcl/conversions.h>
41#include <pcl/point_cloud.h>
42#include <pcl/PCLPointCloud2.h>
45#include <Eigen/Geometry>
46#include <boost/numeric/conversion/cast.hpp>
47#include <boost/algorithm/string/predicate.hpp>
87 Eigen::Vector4f &
origin, Eigen::Quaternionf &orientation,
105 const int offset = 0) = 0;
127 Eigen::Quaternionf orientation;
141 template<
typename Po
intT>
inline int
146 int res =
read (file_name,
blob, cloud.sensor_origin_, cloud.sensor_orientation_,
181 const Eigen::Vector4f &
origin = Eigen::Vector4f::Zero (),
182 const Eigen::Quaternionf &orientation = Eigen::Quaternionf::Identity (),
183 const bool binary =
false) = 0;
195 const Eigen::Vector4f &
origin = Eigen::Vector4f::Zero (),
196 const Eigen::Quaternionf &orientation = Eigen::Quaternionf::Identity (),
197 const bool binary =
false)
208 template<
typename Po
intT>
inline int
209 write (
const std::string &file_name,
211 const bool binary =
false)
213 Eigen::Vector4f
origin = cloud.sensor_origin_;
214 Eigen::Quaternionf orientation = cloud.sensor_orientation_;
235 template <
typename Type>
inline
236 std::enable_if_t<std::is_floating_point<Type>::value>
246 if (std::isnan (value))
252 template <
typename Type>
inline
253 std::enable_if_t<std::is_integral<Type>::value>
266 template <>
inline void
280 template <>
inline void
304 template <
typename Type>
inline
305 std::enable_if_t<std::is_floating_point<Type>::value,
bool>
314 return std::isfinite (value);
317 template <
typename Type>
inline
318 std::enable_if_t<std::is_integral<Type>::value,
bool>
329 template <
typename Type>
336 std::istringstream&
is)
339 if (boost::iequals(
st,
"nan")) {
340 value = std::numeric_limits<Type>::quiet_NaN();
346 value =
static_cast<Type
>(
atof(
st.c_str()));
351 reinterpret_cast<char*
>(&value),
362 std::istringstream&
is)
369 val =
static_cast<int>(
atof(
st.c_str()));
371 value =
static_cast<std::int8_t
>(
val);
375 reinterpret_cast<char*
>(&value),
376 sizeof(std::int8_t));
386 std::istringstream&
is)
394 val =
static_cast<int>(
atof(
st.c_str()));
396 value =
static_cast<std::uint8_t
>(
val);
400 reinterpret_cast<char*
>(&value),
401 sizeof(std::uint8_t));
416 template <
typename Type>
inline void
420 std::istringstream
is;
421 is.imbue (std::locale::classic ());
436 template <
typename Type>
inline void
439 std::istringstream&
is)
Iterator class for point clouds with or without given indices.
ConstCloudIterator(const PointCloud< PointT > &cloud)
Point Cloud Data (FILE) file format reader interface.
virtual int read(const std::string &file_name, pcl::PCLPointCloud2 &cloud, Eigen::Vector4f &origin, Eigen::Quaternionf &orientation, int &file_version, const int offset=0)=0
Read a point cloud data from a FILE file and store it into a pcl/PCLPointCloud2.
virtual ~FileReader()
empty destructor
FileReader()
empty constructor
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.
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.
virtual int readHeader(const std::string &file_name, pcl::PCLPointCloud2 &cloud, Eigen::Vector4f &origin, Eigen::Quaternionf &orientation, int &file_version, int &data_type, unsigned int &data_idx, const int offset=0)=0
Read a point cloud data header from a FILE file.
Point Cloud Data (FILE) file format writer.
virtual int write(const std::string &file_name, const pcl::PCLPointCloud2 &cloud, const Eigen::Vector4f &origin=Eigen::Vector4f::Zero(), const Eigen::Quaternionf &orientation=Eigen::Quaternionf::Identity(), const bool binary=false)=0
Save point cloud data to a FILE file containing n-D points.
int write(const std::string &file_name, const pcl::PointCloud< PointT > &cloud, const bool binary=false)
Save point cloud data to a FILE file containing n-D points.
virtual ~FileWriter()
Empty destructor.
FileWriter()
Empty constructor.
int write(const std::string &file_name, const pcl::PCLPointCloud2::ConstPtr &cloud, const Eigen::Vector4f &origin=Eigen::Vector4f::Zero(), const Eigen::Quaternionf &orientation=Eigen::Quaternionf::Identity(), const bool binary=false)
Save point cloud data to a FILE file containing n-D points.
void copyStringValue< std::int8_t >(const std::string &st, pcl::PCLPointCloud2 &cloud, pcl::index_t point_index, unsigned int field_idx, unsigned int fields_count, std::istringstream &is)
void copyStringValue(const std::string &st, pcl::PCLPointCloud2 &cloud, pcl::index_t point_index, unsigned int field_idx, unsigned int fields_count, std::istringstream &is)
void copyStringValue< std::uint8_t >(const std::string &st, pcl::PCLPointCloud2 &cloud, pcl::index_t point_index, unsigned int field_idx, unsigned int fields_count, std::istringstream &is)
void read(std::istream &stream, Type &value)
Function for reading data from a stream.
detail::int_type_t< detail::index_type_size, detail::index_type_signed > index_t
Type used for an index in PCL.
void copyStringValue(const std::string &st, pcl::PCLPointCloud2 &cloud, pcl::index_t point_index, unsigned int field_idx, unsigned int fields_count)
Copy one single value of type T (uchar, char, uint, int, float, double, ...) from a string.
void toPCLPointCloud2(const pcl::PointCloud< PointT > &cloud, pcl::PCLPointCloud2 &msg)
Convert a pcl::PointCloud<T> object to a PCLPointCloud2 binary data blob.
void copyValueString< std::uint8_t >(const pcl::PCLPointCloud2 &cloud, const pcl::index_t point_index, const int point_size, const unsigned int field_idx, const unsigned int fields_count, std::ostream &stream)
void copyValueString< std::int8_t >(const pcl::PCLPointCloud2 &cloud, const pcl::index_t point_index, const int point_size, const unsigned int field_idx, const unsigned int fields_count, std::ostream &stream)
void write(std::ostream &stream, Type value)
Function for writing data to a stream.
std::enable_if_t< std::is_floating_point< Type >::value > copyValueString(const pcl::PCLPointCloud2 &cloud, const pcl::index_t point_index, const int point_size, const unsigned int field_idx, const unsigned int fields_count, std::ostream &stream)
inserts a value of type Type (uchar, char, uint, int, float, double, ...) into a stringstream.
void fromPCLPointCloud2(const pcl::PCLPointCloud2 &msg, pcl::PointCloud< PointT > &cloud, const MsgFieldMap &field_map)
Convert a PCLPointCloud2 binary data blob into a pcl::PointCloud<T> object using a field_map.
std::enable_if_t< std::is_floating_point< Type >::value, bool > isValueFinite(const pcl::PCLPointCloud2 &cloud, const pcl::index_t point_index, const int point_size, const unsigned int field_idx, const unsigned int fields_count)
Check whether a given value of type Type (uchar, char, uint, int, float, double, ....
std::vector<::pcl::PCLPointField > fields
std::vector< std::uint8_t > data
shared_ptr< const ::pcl::PCLPointCloud2 > ConstPtr