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>
85 Eigen::Vector4f &origin, Eigen::Quaternionf &orientation,
86 int &file_version,
int &data_type,
unsigned int &data_idx,
const int offset = 0) = 0;
102 Eigen::Vector4f &origin, Eigen::Quaternionf &orientation,
int &file_version,
103 const int offset = 0) = 0;
124 Eigen::Vector4f origin;
125 Eigen::Quaternionf orientation;
127 return (
read (file_name, cloud, origin, orientation, file_version, offset));
139 template<
typename Po
intT>
inline int
145 file_version, offset);
179 const Eigen::Vector4f &origin = Eigen::Vector4f::Zero (),
180 const Eigen::Quaternionf &orientation = Eigen::Quaternionf::Identity (),
181 const bool binary =
false) = 0;
193 const Eigen::Vector4f &origin = Eigen::Vector4f::Zero (),
194 const Eigen::Quaternionf &orientation = Eigen::Quaternionf::Identity (),
195 const bool binary =
false)
197 return (
write (file_name, *cloud, origin, orientation, binary));
206 template<
typename Po
intT>
inline int
207 write (
const std::string &file_name,
209 const bool binary =
false)
218 return (
write (file_name, blob, origin, orientation, binary));
233 template <
typename Type>
inline void
235 const unsigned int point_index,
236 const int point_size,
237 const unsigned int field_idx,
238 const unsigned int fields_count,
239 std::ostream &stream)
242 memcpy (&value, &cloud.
data[point_index * point_size + cloud.
fields[field_idx].offset + fields_count * sizeof (Type)],
sizeof (Type));
243 if (pcl_isnan (value))
246 stream << boost::numeric_cast<Type>(value);
248 template <>
inline void
250 const unsigned int point_index,
251 const int point_size,
252 const unsigned int field_idx,
253 const unsigned int fields_count,
254 std::ostream &stream)
257 memcpy (&value, &cloud.data[point_index * point_size + cloud.fields[field_idx].offset + fields_count * sizeof (int8_t)],
sizeof (int8_t));
258 if (pcl_isnan (value))
262 stream << boost::numeric_cast<int>(value);
264 template <>
inline void
266 const unsigned int point_index,
267 const int point_size,
268 const unsigned int field_idx,
269 const unsigned int fields_count,
270 std::ostream &stream)
273 memcpy (&value, &cloud.data[point_index * point_size + cloud.fields[field_idx].offset + fields_count * sizeof (uint8_t)],
sizeof (uint8_t));
274 if (pcl_isnan (value))
278 stream << boost::numeric_cast<int>(value);
291 template <
typename Type>
inline bool
293 const unsigned int point_index,
294 const int point_size,
295 const unsigned int field_idx,
296 const unsigned int fields_count)
299 memcpy (&value, &cloud.
data[point_index * point_size + cloud.
fields[field_idx].offset + fields_count * sizeof (Type)],
sizeof (Type));
300 if (!pcl_isfinite (value))
316 template <
typename Type>
inline void
318 unsigned int point_index,
unsigned int field_idx,
unsigned int fields_count)
323 value = std::numeric_limits<Type>::quiet_NaN ();
328 std::istringstream is (st);
329 is.imbue (std::locale::classic ());
331 value =
static_cast<Type
> (atof (st.c_str ()));
335 cloud.
fields[field_idx].offset +
336 fields_count * sizeof (Type)], reinterpret_cast<char*> (&value),
sizeof (Type));
339 template <>
inline void
341 unsigned int point_index,
unsigned int field_idx,
unsigned int fields_count)
346 value =
static_cast<int8_t
> (std::numeric_limits<int>::quiet_NaN ());
347 cloud.is_dense =
false;
352 std::istringstream is (st);
353 is.imbue (std::locale::classic ());
356 val =
static_cast<int> (atof (st.c_str ()));
357 value =
static_cast<int8_t
> (val);
360 memcpy (&cloud.data[point_index * cloud.point_step +
361 cloud.fields[field_idx].offset +
362 fields_count * sizeof (int8_t)], reinterpret_cast<char*> (&value),
sizeof (int8_t));
365 template <>
inline void
367 unsigned int point_index,
unsigned int field_idx,
unsigned int fields_count)
372 value =
static_cast<uint8_t
> (std::numeric_limits<int>::quiet_NaN ());
373 cloud.is_dense =
false;
378 std::istringstream is (st);
379 is.imbue (std::locale::classic ());
382 val =
static_cast<int> (atof (st.c_str ()));
383 value =
static_cast<uint8_t
> (val);
386 memcpy (&cloud.data[point_index * cloud.point_step +
387 cloud.fields[field_idx].offset +
388 fields_count * sizeof (uint8_t)], reinterpret_cast<char*> (&value),
sizeof (uint8_t));
392 #endif //#ifndef PCL_IO_FILE_IO_H_