44#include <pcl/io/file_io.h>
45#include <pcl/io/ply/ply_parser.h>
46#include <pcl/PolygonMesh.h>
93 , vertex_offset_before_ (0)
95 , rgb_offset_before_ (0)
107 , vertex_offset_before_ (0)
109 , rgb_offset_before_ (0)
112 , r_(0), g_(0), b_(0)
122 orientation_ = p.orientation_;
123 range_grid_ = p.range_grid_;
124 polygons_ = p.polygons_;
153 Eigen::Vector4f &
origin, Eigen::Quaternionf &orientation,
170 Eigen::Vector4f &
origin, Eigen::Quaternionf &orientation,
int&
ply_version,
const int offset = 0)
override;
186 Eigen::Quaternionf orientation;
200 template<
typename Po
intT>
inline int
205 int res =
read (file_name,
blob, cloud.sensor_origin_, cloud.sensor_orientation_,
230 Eigen::Vector4f &
origin, Eigen::Quaternionf &orientation,
280 errorCallback (
const std::string& filename, std::size_t line_number,
const std::string& message)
282 PCL_ERROR (
"[pcl::PLYReader] %s:%lu: %s\n", filename.c_str (), line_number, message.c_str ());
289 std::tuple<std::function<void ()>, std::function<void ()> >
290 elementDefinitionCallback (
const std::string& element_name, std::size_t count);
293 endHeaderCallback ();
299 template <
typename ScalarType> std::function<void (ScalarType)>
300 scalarPropertyDefinitionCallback (
const std::string& element_name,
const std::string& property_name);
306 template <
typename SizeType,
typename ScalarType>
307 std::tuple<std::function<void (SizeType)>, std::function<void (ScalarType)>, std::function<void ()> >
308 listPropertyDefinitionCallback (
const std::string& element_name,
const std::string& property_name);
313 template <
typename SizeType>
void
314 vertexListPropertyBeginCallback (
const std::string& property_name, SizeType size);
319 template <
typename ContentType>
void
320 vertexListPropertyContentCallback (ContentType value);
324 vertexListPropertyEndCallback ();
330 template<
typename Scalar>
void
331 vertexScalarPropertyCallback (Scalar value);
360 originXCallback (
const float& value) { origin_[0] = value; }
366 originYCallback (
const float& value) { origin_[1] = value; }
372 originZCallback (
const float& value) { origin_[2] = value; }
378 orientationXaxisXCallback (
const float& value) { orientation_ (0,0) = value; }
384 orientationXaxisYCallback (
const float& value) { orientation_ (0,1) = value; }
390 orientationXaxisZCallback (
const float& value) { orientation_ (0,2) = value; }
396 orientationYaxisXCallback (
const float& value) { orientation_ (1,0) = value; }
402 orientationYaxisYCallback (
const float& value) { orientation_ (1,1) = value; }
408 orientationYaxisZCallback (
const float& value) { orientation_ (1,2) = value; }
414 orientationZaxisXCallback (
const float& value) { orientation_ (2,0) = value; }
420 orientationZaxisYCallback (
const float& value) { orientation_ (2,1) = value; }
426 orientationZaxisZCallback (
const float& value) { orientation_ (2,2) = value; }
432 cloudHeightCallback (
const int &height) { cloud_->height = height; }
438 cloudWidthCallback (
const int &width) { cloud_->width = width; }
445 template<
typename Scalar>
void
446 appendScalarProperty (
const std::string& name,
const std::size_t& count = 1);
454 amendProperty (
const std::string& old_name,
const std::string& new_name, std::uint8_t datatype = 0);
458 vertexBeginCallback ();
462 vertexEndCallback ();
466 rangeGridBeginCallback ();
482 rangeGridVertexIndicesEndCallback ();
486 rangeGridEndCallback ();
490 objInfoCallback (
const std::string& line);
494 faceBeginCallback ();
510 faceVertexIndicesEndCallback ();
517 Eigen::Vector4f origin_;
520 Eigen::Matrix3f orientation_;
524 std::size_t vertex_count_;
525 int vertex_offset_before_;
527 std::vector<std::vector <int> > *range_grid_;
528 std::size_t rgb_offset_before_;
531 std::vector<pcl::Vertices> *polygons_;
537 std::int32_t r_, g_, b_;
539 std::uint32_t a_, rgba_;
566 const Eigen::Vector4f &
origin,
567 const Eigen::Quaternionf &orientation,
585 const Eigen::Vector4f &
origin,
586 const Eigen::Quaternionf &orientation,
604 const Eigen::Vector4f &
origin = Eigen::Vector4f::Zero (),
605 const Eigen::Quaternionf &orientation = Eigen::Quaternionf::Identity (),
619 const Eigen::Vector4f &
origin = Eigen::Vector4f::Zero (),
620 const Eigen::Quaternionf &orientation = Eigen::Quaternionf::Identity (),
633 const Eigen::Vector4f &
origin = Eigen::Vector4f::Zero (),
634 const Eigen::Quaternionf &orientation = Eigen::Quaternionf::Identity (),
635 const bool binary =
false)
override
638 return (this->writeBinary (file_name, cloud,
origin, orientation,
true));
639 return (this->writeASCII (file_name, cloud,
origin, orientation, 8,
true));
654 const Eigen::Vector4f &
origin = Eigen::Vector4f::Zero (),
655 const Eigen::Quaternionf &orientation = Eigen::Quaternionf::Identity (),
660 return (this->writeBinary (file_name, cloud,
origin, orientation,
use_camera));
661 return (this->writeASCII (file_name, cloud,
origin, orientation, 8,
use_camera));
676 const Eigen::Vector4f &
origin = Eigen::Vector4f::Zero (),
677 const Eigen::Quaternionf &orientation = Eigen::Quaternionf::Identity (),
692 template<
typename Po
intT>
inline int
693 write (
const std::string &file_name,
698 Eigen::Vector4f
origin = cloud.sensor_origin_;
699 Eigen::Quaternionf orientation = cloud.sensor_orientation_;
715 const Eigen::Vector4f &
origin,
716 const Eigen::Quaternionf &orientation,
722 writeContentWithCameraASCII (
int nr_points,
725 const Eigen::Vector4f &
origin,
726 const Eigen::Quaternionf &orientation,
730 writeContentWithRangeGridASCII (
int nr_points,
733 std::ostringstream&
fs,
752 return (p.
read (file_name, cloud));
765 Eigen::Vector4f &
origin, Eigen::Quaternionf &orientation)
777 template<
typename Po
intT>
inline int
781 return (p.
read (file_name, cloud));
811 const Eigen::Vector4f &
origin = Eigen::Vector4f::Zero (),
812 const Eigen::Quaternionf &orientation = Eigen::Quaternionf::Identity (),
826 template<
typename Po
intT>
inline int
839 template<
typename Po
intT>
inline int
843 return (w.
write<
PointT> (file_name, cloud,
false));
851 template<
typename Po
intT>
inline int
865 template<
typename Po
intT>
int
Iterator class for point clouds with or without given indices.
Point Cloud Data (FILE) file format reader interface.
Point Cloud Data (FILE) file format writer.
Point Cloud Data (PLY) file format reader.
int read(const std::string &file_name, pcl::PCLPointCloud2 &cloud, const int offset=0)
Read a point cloud data from a PLY file and store it into a pcl/PCLPointCloud2.
int read(const std::string &file_name, pcl::PointCloud< PointT > &cloud, const int offset=0)
Read a point cloud data from any PLY file, and convert it to the given template format.
int read(const std::string &file_name, pcl::PolygonMesh &mesh, const int offset=0)
Read a point cloud data from a PLY file and store it into a pcl/PolygonMesh.
int read(const std::string &file_name, pcl::PCLPointCloud2 &cloud, Eigen::Vector4f &origin, Eigen::Quaternionf &orientation, int &ply_version, const int offset=0) override
Read a point cloud data from a PLY file and store it into a pcl/PCLPointCloud2.
PLYReader(const PLYReader &p)
int readHeader(const std::string &file_name, pcl::PCLPointCloud2 &cloud, Eigen::Vector4f &origin, Eigen::Quaternionf &orientation, int &ply_version, int &data_type, unsigned int &data_idx, const int offset=0) override
Read a point cloud data header from a PLY file.
int read(const std::string &file_name, pcl::PolygonMesh &mesh, Eigen::Vector4f &origin, Eigen::Quaternionf &orientation, int &ply_version, const int offset=0)
Read a point cloud data from a PLY file and store it into a pcl/PolygonMesh.
Point Cloud Data (PLY) file format writer.
std::string generateHeaderBinary(const pcl::PCLPointCloud2 &cloud, const Eigen::Vector4f &origin, const Eigen::Quaternionf &orientation, int valid_points, bool use_camera=true)
Generate the header of a PLY v.7 file format.
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(), bool binary=false, bool use_camera=true)
Save point cloud data to a PLY file containing n-D points.
int writeBinary(const std::string &file_name, const pcl::PCLPointCloud2 &cloud, const Eigen::Vector4f &origin=Eigen::Vector4f::Zero(), const Eigen::Quaternionf &orientation=Eigen::Quaternionf::Identity(), bool use_camera=true)
Save point cloud data to a PLY file containing n-D points, in BINARY format.
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) override
Save point cloud data to a PLY file containing n-D points.
int write(const std::string &file_name, const pcl::PointCloud< PointT > &cloud, bool binary=false, bool use_camera=true)
Save point cloud data to a PLY file containing n-D points.
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(), bool binary=false, bool use_camera=true)
Save point cloud data to a PLY file containing n-D points.
std::string generateHeaderASCII(const pcl::PCLPointCloud2 &cloud, const Eigen::Vector4f &origin, const Eigen::Quaternionf &orientation, int valid_points, bool use_camera=true)
Generate the header of a PLY v.7 file format.
int writeASCII(const std::string &file_name, const pcl::PCLPointCloud2 &cloud, const Eigen::Vector4f &origin=Eigen::Vector4f::Zero(), const Eigen::Quaternionf &orientation=Eigen::Quaternionf::Identity(), int precision=8, bool use_camera=true)
Save point cloud data to a PLY file containing n-D points, in ASCII format.
Class ply_parser parses a PLY file and generates appropriate atomic parsers for the body.
#define PCL_MAKE_ALIGNED_OPERATOR_NEW
Macro to signal a class requires a custom allocator.
void copyPointCloud(const pcl::PointCloud< PointInT > &cloud_in, pcl::PointCloud< PointOutT > &cloud_out)
Copy all the fields from a given point cloud into a new point cloud.
int savePLYFileBinary(const std::string &file_name, const pcl::PointCloud< PointT > &cloud)
Templated version for saving point cloud data to a PLY file containing a specific given cloud format.
int savePLYFileASCII(const std::string &file_name, const pcl::PointCloud< PointT > &cloud)
Templated version for saving point cloud data to a PLY file containing a specific given cloud format.
int loadPLYFile(const std::string &file_name, pcl::PCLPointCloud2 &cloud)
Load a PLY v.6 file into a templated PointCloud type.
int savePLYFile(const std::string &file_name, const pcl::PCLPointCloud2 &cloud, const Eigen::Vector4f &origin=Eigen::Vector4f::Zero(), const Eigen::Quaternionf &orientation=Eigen::Quaternionf::Identity(), bool binary_mode=false, bool use_camera=true)
Save point cloud data to a PLY file containing n-D points.
Defines functions, macros and traits for allocating and using memory.
void read(std::istream &stream, Type &value)
Function for reading data from a stream.
void toPCLPointCloud2(const pcl::PointCloud< PointT > &cloud, pcl::PCLPointCloud2 &msg)
Convert a pcl::PointCloud<T> object to a PCLPointCloud2 binary data blob.
void write(std::ostream &stream, Type value)
Function for writing data to a stream.
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.
Defines all the PCL and non-PCL macros used.
shared_ptr< const ::pcl::PCLPointCloud2 > ConstPtr
A point structure representing Euclidean xyz coordinates, and the RGB color.