38 #ifndef PCL_IO_FILE_IO_H_
39 #define PCL_IO_FILE_IO_H_
41 #include <pcl/pcl_macros.h>
42 #include <pcl/common/io.h>
43 #include <pcl/io/boost.h>
46 #include <pcl/PolygonMesh.h>
47 #include <pcl/TextureMesh.h>
87 Eigen::Vector4f &origin, Eigen::Quaternionf &orientation,
88 int &file_version,
int &data_type,
unsigned int &data_idx,
const int offset = 0) = 0;
104 Eigen::Vector4f &origin, Eigen::Quaternionf &orientation,
int &file_version,
105 const int offset = 0) = 0;
126 Eigen::Vector4f origin;
127 Eigen::Quaternionf orientation;
129 return (
read (file_name, cloud, origin, orientation, file_version, offset));
141 template<
typename Po
intT>
inline int
147 file_version, offset);
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)
199 return (
write (file_name, *cloud, origin, orientation, binary));
208 template<
typename Po
intT>
inline int
209 write (
const std::string &file_name,
211 const bool binary =
false)
220 return (
write (file_name, blob, origin, orientation, binary));
235 template <
typename Type>
inline void
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 (pcl_isnan (value))
248 stream << boost::numeric_cast<Type>(value);
250 template <>
inline void
252 const unsigned int point_index,
253 const int point_size,
254 const unsigned int field_idx,
255 const unsigned int fields_count,
256 std::ostream &stream)
259 memcpy (&value, &cloud.data[point_index * point_size + cloud.fields[field_idx].offset + fields_count * sizeof (int8_t)],
sizeof (int8_t));
260 if (pcl_isnan (value))
264 stream << boost::numeric_cast<int>(value);
266 template <>
inline void
268 const unsigned int point_index,
269 const int point_size,
270 const unsigned int field_idx,
271 const unsigned int fields_count,
272 std::ostream &stream)
275 memcpy (&value, &cloud.data[point_index * point_size + cloud.fields[field_idx].offset + fields_count * sizeof (uint8_t)],
sizeof (uint8_t));
276 if (pcl_isnan (value))
280 stream << boost::numeric_cast<int>(value);
293 template <
typename Type>
inline bool
295 const unsigned int point_index,
296 const int point_size,
297 const unsigned int field_idx,
298 const unsigned int fields_count)
301 memcpy (&value, &cloud.
data[point_index * point_size + cloud.
fields[field_idx].offset + fields_count * sizeof (Type)],
sizeof (Type));
302 if (!pcl_isfinite (value))
318 template <
typename Type>
inline void
320 unsigned int point_index,
unsigned int field_idx,
unsigned int fields_count)
325 value = std::numeric_limits<Type>::quiet_NaN ();
330 std::istringstream is (st);
331 is.imbue (std::locale::classic ());
333 value =
static_cast<Type
> (atof (st.c_str ()));
337 cloud.
fields[field_idx].offset +
338 fields_count * sizeof (Type)], reinterpret_cast<char*> (&value),
sizeof (Type));
341 template <>
inline void
343 unsigned int point_index,
unsigned int field_idx,
unsigned int fields_count)
348 value =
static_cast<int8_t
> (std::numeric_limits<int>::quiet_NaN ());
349 cloud.is_dense =
false;
354 std::istringstream is (st);
355 is.imbue (std::locale::classic ());
358 val =
static_cast<int> (atof (st.c_str ()));
359 value =
static_cast<int8_t
> (val);
362 memcpy (&cloud.data[point_index * cloud.point_step +
363 cloud.fields[field_idx].offset +
364 fields_count * sizeof (int8_t)], reinterpret_cast<char*> (&value),
sizeof (int8_t));
367 template <>
inline void
369 unsigned int point_index,
unsigned int field_idx,
unsigned int fields_count)
374 value =
static_cast<uint8_t
> (std::numeric_limits<int>::quiet_NaN ());
375 cloud.is_dense =
false;
380 std::istringstream is (st);
381 is.imbue (std::locale::classic ());
384 val =
static_cast<int> (atof (st.c_str ()));
385 value =
static_cast<uint8_t
> (val);
388 memcpy (&cloud.data[point_index * cloud.point_step +
389 cloud.fields[field_idx].offset +
390 fields_count * sizeof (uint8_t)], reinterpret_cast<char*> (&value),
sizeof (uint8_t));
408 template<
typename Po
intT>
int
442 template<
typename Po
intT>
int
465 #endif //#ifndef PCL_IO_FILE_IO_H_
void fromPCLPointCloud2(const pcl::PCLPointCloud2 &msg, pcl::PointCloud< PointT > &cloud, const MsgFieldMap &field_map)
Convert a PCLPointCloud2 binary data blob into a pcl::PointCloud object using a field_map...
void copyStringValue< uint8_t >(const std::string &st, pcl::PCLPointCloud2 &cloud, unsigned int point_index, unsigned int field_idx, unsigned int fields_count)
PCL_EXPORTS int load(const std::string &file_name, pcl::PCLPointCloud2 &blob)
Load a file into a PointCloud2 according to extension.
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, ...) is finite or not.
void copyStringValue< int8_t >(const std::string &st, pcl::PCLPointCloud2 &cloud, unsigned int point_index, unsigned int field_idx, unsigned int fields_count)
FileWriter()
Empty constructor.
void 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)
insers a value of type Type (uchar, char, uint, int, float, double, ...) into a stringstream.
void read(std::istream &stream, Type &value)
Function for reading data from a stream.
Point Cloud Data (FILE) file format writer.
virtual ~FileReader()
empty destructor
Eigen::Vector4f sensor_origin_
Sensor acquisition pose (origin/translation).
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 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.
void copyValueString< int8_t >(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)
Point Cloud Data (FILE) file format reader interface.
Eigen::Quaternionf sensor_orientation_
Sensor acquisition pose (rotation).
boost::shared_ptr< ::pcl::PCLPointCloud2 const > ConstPtr
PointCloud represents the base class in PCL for storing collections of 3D points. ...
std::vector< ::pcl::PCLPointField > fields
virtual ~FileWriter()
Empty destructor.
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 toPCLPointCloud2(const pcl::PointCloud< PointT > &cloud, pcl::PCLPointCloud2 &msg)
Convert a pcl::PointCloud object to a PCLPointCloud2 binary data blob.
void write(std::ostream &stream, Type value)
Function for writing data to a stream.
PCL_EXPORTS int save(const std::string &file_name, const pcl::PCLPointCloud2 &blob, unsigned precision=5)
Save point cloud data to a binary file when available else to ASCII.
FileReader()
empty constructor
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.
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...
std::vector< pcl::uint8_t > data
void copyValueString< uint8_t >(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)