Point Cloud Library (PCL) 1.12.1
ascii_io.h
1/*
2 * Software License Agreement (BSD License)
3 *
4 * Point Cloud Library (PCL) - www.pointclouds.org
5 * Copyright (c) 2012-, Open Perception, Inc.
6 *
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * * Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * * Redistributions in binary form must reproduce the above
16 * copyright notice, this list of conditions and the following
17 * disclaimer in the documentation and/or other materials provided
18 * with the distribution.
19 * * Neither the name of the copyright holder(s) nor the names of its
20 * contributors may be used to endorse or promote products derived
21 * from this software without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
29 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 * POSSIBILITY OF SUCH DAMAGE.
35 *
36 */
37
38#pragma once
39
40#include <pcl/pcl_macros.h>
41#include <pcl/io/file_io.h>
42#include <pcl/PCLPointField.h>
43#include <pcl/common/io.h>
44#include <pcl/common/utils.h> // pcl::utils::ignore
45
46
47namespace pcl
48{
49 /** \brief Ascii Point Cloud Reader.
50 * Read any ASCII file by setting the separating characters and input point fields.
51 *
52 * \author Adam Stambler (adasta@gmail.com)
53 * \ingroup io
54 */
56 {
57 public:
60 using FileReader::read;
61
62 /* Load only the meta information (number of points, their types, etc),
63 * and not the points themselves, from a given FILE file. Useful for fast
64 * evaluation of the underlying data structure.
65 *
66 * Returns:
67 * * < 0 (-1) on error
68 * * > 0 on success
69 * \param[in] file_name the name of the file to load
70 * \param[out] cloud the resultant point cloud dataset (only the header will be filled)
71 * \param[out] origin the sensor acquisition origin (only for > FILE_V7 - null if not present)
72 * \param[out] orientation the sensor acquisition orientation (only for > FILE_V7 - identity if not present)
73 * \param[out] file_version the FILE version of the file (either FILE_V6 or FILE_V7)
74 * \param[out] data_type the type of data (binary data=1, ascii=0, etc)
75 * \param[out] data_idx the offset of cloud data within the file
76 * \param[in] offset the offset in the file where to expect the true header to begin.
77 * One usage example for setting the offset parameter is for reading
78 * data from a TAR "archive containing multiple files: TAR files always
79 * add a 512 byte header in front of the actual file, so set the offset
80 * to the next byte after the header (e.g., 513).
81 */
82 int
83 readHeader (const std::string &file_name, pcl::PCLPointCloud2 &cloud,
84 Eigen::Vector4f &origin, Eigen::Quaternionf &orientation,
85 int &file_version, int &data_type, unsigned int &data_idx, const int offset = 0) override ;
86
87
88 /** \brief Read a point cloud data from a FILE file and store it into a pcl/PCLPointCloud2.
89 * \param[in] file_name the name of the file containing the actual PointCloud data
90 * \param[out] cloud the resultant PointCloud message read from disk
91 * \param[out] origin the sensor acquisition origin (only for > FILE_V7 - null if not present)
92 * \param[out] orientation the sensor acquisition orientation (only for > FILE_V7 - identity if not present)
93 * \param[out] file_version the FILE version of the file (either FILE_V6 or FILE_V7)
94 * \param[in] offset the offset in the file where to expect the true header to begin.
95 * One usage example for setting the offset parameter is for reading
96 * data from a TAR "archive containing multiple files: TAR files always
97 * add a 512 byte header in front of the actual file, so set the offset
98 * to the next byte after the header (e.g., 513).
99 */
100 int
101 read (const std::string &file_name, pcl::PCLPointCloud2 &cloud,
102 Eigen::Vector4f &origin, Eigen::Quaternionf &orientation, int &file_version,
103 const int offset = 0) override;
104
105 /** \brief Set the ascii file point fields.
106 */
107 template<typename PointT>
108 void setInputFields ();
109
110 /** \brief Set the ascii file point fields using a list of fields.
111 * \param[in] fields is a list of point fields, in order, in the input ascii file
112 */
113 void
114 setInputFields (const std::vector<pcl::PCLPointField>& fields);
115
116 /** \brief Set the Separating characters for the ascii point fields 2.
117 * \param[in] chars string of separating characters
118 * Sets the separating characters for the point fields. The
119 * default separating characters are " \n\t,"
120 */
121 void
122 setSepChars (const std::string &chars);
123
124 /** \brief Set the extension of the ascii point file type.
125 * \param[in] ext extension (example : ".txt" or ".xyz" )
126 */
127 void
128 setExtension (const std::string &ext) { extension_ = ext; }
129
130 protected:
131 std::string sep_chars_;
132 std::string extension_;
133 std::vector<pcl::PCLPointField> fields_;
134 std::string name_;
135
136
137 /** \brief Parses token based on field type.
138 * \param[in] token string representation of point fields
139 * \param[in] field token point field type
140 * \param[out] data_target address that the point field data should be assigned to
141 * returns the size of the parsed point field in bytes
142 */
143 int
144 parse (const std::string& token, const pcl::PCLPointField& field, std::uint8_t* data_target);
145
146 /** \brief Returns the size in bytes of a point field type.
147 * \param[in] type point field type
148 * returns the size of the type in bytes
149 */
150 std::uint32_t
151 typeSize (int type);
152 };
153}
154
155#include <pcl/io/impl/ascii_io.hpp>
Ascii Point Cloud Reader.
Definition: ascii_io.h:56
std::string sep_chars_
Definition: ascii_io.h:131
int parse(const std::string &token, const pcl::PCLPointField &field, std::uint8_t *data_target)
Parses token based on field type.
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) override
Read a point cloud data header from a FILE file.
std::string extension_
Definition: ascii_io.h:132
std::string name_
Definition: ascii_io.h:134
void setInputFields(const std::vector< pcl::PCLPointField > &fields)
Set the ascii file point fields using a list of fields.
std::vector< pcl::PCLPointField > fields_
Definition: ascii_io.h:133
int read(const std::string &file_name, pcl::PCLPointCloud2 &cloud, Eigen::Vector4f &origin, Eigen::Quaternionf &orientation, int &file_version, const int offset=0) override
Read a point cloud data from a FILE file and store it into a pcl/PCLPointCloud2.
void setExtension(const std::string &ext)
Set the extension of the ascii point file type.
Definition: ascii_io.h:128
void setSepChars(const std::string &chars)
Set the Separating characters for the ascii point fields 2.
std::uint32_t typeSize(int type)
Returns the size in bytes of a point field type.
Point Cloud Data (FILE) file format reader interface.
Definition: file_io.h:57
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.
Defines all the PCL and non-PCL macros used.
#define PCL_EXPORTS
Definition: pcl_macros.h:323