Point Cloud Library (PCL)
1.11.0
|
41 #include <pcl/common/io.h>
42 #include <pcl/io/boost.h>
45 #include <pcl/PolygonMesh.h>
46 #include <pcl/TextureMesh.h>
86 Eigen::Vector4f &origin, Eigen::Quaternionf &orientation,
87 int &file_version,
int &data_type,
unsigned int &data_idx,
const int offset = 0) = 0;
103 Eigen::Vector4f &origin, Eigen::Quaternionf &orientation,
int &file_version,
104 const int offset = 0) = 0;
125 Eigen::Vector4f origin;
126 Eigen::Quaternionf orientation;
128 return (
read (file_name, cloud, origin, orientation, file_version, offset));
140 template<
typename Po
intT>
inline int
146 file_version, offset);
180 const Eigen::Vector4f &origin = Eigen::Vector4f::Zero (),
181 const Eigen::Quaternionf &orientation = Eigen::Quaternionf::Identity (),
182 const bool binary =
false) = 0;
194 const Eigen::Vector4f &origin = Eigen::Vector4f::Zero (),
195 const Eigen::Quaternionf &orientation = Eigen::Quaternionf::Identity (),
196 const bool binary =
false)
198 return (
write (file_name, *cloud, origin, orientation, binary));
207 template<
typename Po
intT>
inline int
208 write (
const std::string &file_name,
210 const bool binary =
false)
219 return (
write (file_name, blob, origin, orientation, binary));
234 template <
typename Type>
inline
235 std::enable_if_t<std::is_floating_point<Type>::value>
237 const unsigned int point_index,
238 const int point_size,
239 const unsigned int field_idx,
240 const unsigned int fields_count,
241 std::ostream &stream)
244 memcpy (&value, &cloud.
data[point_index * point_size + cloud.
fields[field_idx].offset + fields_count * sizeof (Type)],
sizeof (Type));
245 if (std::isnan (value))
251 template <
typename Type>
inline
252 std::enable_if_t<std::is_integral<Type>::value>
254 const unsigned int point_index,
255 const int point_size,
256 const unsigned int field_idx,
257 const unsigned int fields_count,
258 std::ostream &stream)
261 memcpy (&value, &cloud.
data[point_index * point_size + cloud.
fields[field_idx].offset + fields_count * sizeof (Type)],
sizeof (Type));
265 template <>
inline void
267 const unsigned int point_index,
268 const int point_size,
269 const unsigned int field_idx,
270 const unsigned int fields_count,
271 std::ostream &stream)
276 stream << boost::numeric_cast<int>(value);
279 template <>
inline void
281 const unsigned int point_index,
282 const int point_size,
283 const unsigned int field_idx,
284 const unsigned int fields_count,
285 std::ostream &stream)
290 stream << boost::numeric_cast<unsigned int>(value);
303 template <
typename Type>
inline
304 std::enable_if_t<std::is_floating_point<Type>::value,
bool>
306 const unsigned int point_index,
307 const int point_size,
308 const unsigned int field_idx,
309 const unsigned int fields_count)
312 memcpy (&value, &cloud.
data[point_index * point_size + cloud.
fields[field_idx].offset + fields_count * sizeof (Type)],
sizeof (Type));
313 return std::isfinite (value);
316 template <
typename Type>
inline
317 std::enable_if_t<std::is_integral<Type>::value,
bool>
338 template <
typename Type>
inline void
340 unsigned int point_index,
unsigned int field_idx,
unsigned int fields_count)
343 if (boost::iequals(st,
"nan"))
345 value = std::numeric_limits<Type>::quiet_NaN ();
350 std::istringstream is (st);
351 is.imbue (std::locale::classic ());
353 value =
static_cast<Type
> (atof (st.c_str ()));
357 cloud.
fields[field_idx].offset +
358 fields_count * sizeof (Type)],
reinterpret_cast<char*
> (&value),
sizeof (Type));
361 template <>
inline void
363 unsigned int point_index,
unsigned int field_idx,
unsigned int fields_count)
366 if (boost::iequals(st,
"nan"))
368 value =
static_cast<std::int8_t> (std::numeric_limits<int>::quiet_NaN ());
374 std::istringstream is (st);
375 is.imbue (std::locale::classic ());
378 val =
static_cast<int> (atof (st.c_str ()));
383 cloud.
fields[field_idx].offset +
387 template <>
inline void
389 unsigned int point_index,
unsigned int field_idx,
unsigned int fields_count)
392 if (boost::iequals(st,
"nan"))
394 value =
static_cast<std::uint8_t> (std::numeric_limits<int>::quiet_NaN ());
400 std::istringstream is (st);
401 is.imbue (std::locale::classic ());
404 val =
static_cast<int> (atof (st.c_str ()));
409 cloud.
fields[field_idx].offset +
virtual ~FileReader()
empty destructor
Defines all the PCL and non-PCL macros used.
FileReader()
empty constructor
virtual ~FileWriter()
Empty destructor.
PointCloud represents the base class in PCL for storing collections of 3D points.
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.
FileWriter()
Empty constructor.
void read(std::istream &stream, Type &value)
Function for reading data from a stream.
std::vector<::pcl::PCLPointField > fields
shared_ptr< const ::pcl::PCLPointCloud2 > ConstPtr
std::enable_if_t< std::is_floating_point< Type >::value > copyValueString(const pcl::PCLPointCloud2 &cloud, const unsigned int 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.
Point Cloud Data (FILE) file format reader interface.
Eigen::Vector4f sensor_origin_
Sensor acquisition pose (origin/translation).
Eigen::Quaternionf sensor_orientation_
Sensor acquisition pose (rotation).
std::vector< std::uint8_t > data
void write(std::ostream &stream, Type value)
Function for writing data to a stream.
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(const std::string &st, pcl::PCLPointCloud2 &cloud, unsigned int 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.
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.
void toPCLPointCloud2(const pcl::PointCloud< PointT > &cloud, pcl::PCLPointCloud2 &msg)
Convert a pcl::PointCloud<T> object to a PCLPointCloud2 binary data blob.
std::enable_if_t< std::is_floating_point< Type >::value, bool > isValueFinite(const pcl::PCLPointCloud2 &cloud, const unsigned int 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, ....
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.