-
-
Notifications
You must be signed in to change notification settings - Fork 4.6k
/
vtk_lib_io.h
223 lines (202 loc) · 8.52 KB
/
vtk_lib_io.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
/*
* Software License Agreement (BSD License)
*
* Point Cloud Library (PCL) - www.pointclouds.org
* Copyright (c) 2011, Dirk Holz, University of Bonn.
* Copyright (c) 2012-, Open Perception, Inc.
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of the copyright holder(s) nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* $Id$
*
*/
#ifndef PCL_IO_VTK_LIB_IO_H_
#define PCL_IO_VTK_LIB_IO_H_
#include <boost/filesystem.hpp>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/PolygonMesh.h>
#include <pcl/pcl_macros.h>
#include <pcl/ros/conversions.h>
#include <pcl/io/pcd_io.h>
#include <pcl/range_image/range_image_planar.h>
// Ignore warnings in the above headers
#ifdef __GNUC__
#pragma GCC system_header
#endif
#include <vtkSmartPointer.h>
#include <vtkStructuredGrid.h>
#include <vtkPoints.h>
#include <vtkPointData.h>
#include <vtkCellArray.h>
#include <vtkUnsignedCharArray.h>
#include <vtkFloatArray.h>
#include <vtkPolyDataReader.h>
#include <vtkPolyDataWriter.h>
#include <vtkPLYReader.h>
#include <vtkPLYWriter.h>
#include <vtkOBJReader.h>
#include <vtkSTLReader.h>
#include <vtkSTLWriter.h>
namespace pcl
{
namespace io
{
/** \brief Convert vtkPolyData object to a PCL PolygonMesh
* \param[in] poly_data Pointer (vtkSmartPointer) to a vtkPolyData object
* \param[out] mesh PCL Polygon Mesh to fill
* \return Number of points in the point cloud of mesh.
*/
PCL_EXPORTS int
vtk2mesh (const vtkSmartPointer<vtkPolyData>& poly_data,
pcl::PolygonMesh& mesh);
/** \brief Convert a PCL PolygonMesh to a vtkPolyData object
* \param[in] mesh Reference to PCL Polygon Mesh
* \param[out] poly_data Pointer (vtkSmartPointer) to a vtkPolyData object
* \return Number of points in the point cloud of mesh.
*/
PCL_EXPORTS int
mesh2vtk (const pcl::PolygonMesh& mesh,
vtkSmartPointer<vtkPolyData>& poly_data);
/** \brief Load a \ref PolygonMesh object given an input file name, based on the file extension
* \param[in] file_name the name of the file containing the polygon data
* \param[out] mesh the object that we want to load the data in
* \ingroup io
*/
PCL_EXPORTS int
loadPolygonFile (const std::string &file_name,
pcl::PolygonMesh& mesh);
/** \brief Save a \ref PolygonMesh object given an input file name, based on the file extension
* \param[in] file_name the name of the file to save the data to
* \param[in] mesh the object that contains the data
* \ingroup io
*/
PCL_EXPORTS int
savePolygonFile (const std::string &file_name,
const pcl::PolygonMesh& mesh);
/** \brief Load a VTK file into a \ref PolygonMesh object
* \param[in] file_name the name of the file that contains the data
* \param[out] mesh the object that we want to load the data in
* \ingroup io
*/
PCL_EXPORTS int
loadPolygonFileVTK (const std::string &file_name,
pcl::PolygonMesh& mesh);
/** \brief Load a PLY file into a \ref PolygonMesh object
* \param[in] file_name the name of the file that contains the data
* \param[out] mesh the object that we want to load the data in
* \ingroup io
*/
PCL_EXPORTS int
loadPolygonFilePLY (const std::string &file_name,
pcl::PolygonMesh& mesh);
/** \brief Load an OBJ file into a \ref PolygonMesh object
* \param[in] file_name the name of the file that contains the data
* \param[out] mesh the object that we want to load the data in
* \ingroup io
*/
PCL_EXPORTS int
loadPolygonFileOBJ (const std::string &file_name,
pcl::PolygonMesh& mesh);
/** \brief Load an STL file into a \ref PolygonMesh object
* \param[in] file_name the name of the file that contains the data
* \param[out] mesh the object that we want to load the data in
* \ingroup io
*/
PCL_EXPORTS int
loadPolygonFileSTL (const std::string &file_name,
pcl::PolygonMesh& mesh);
/** \brief Save a \ref PolygonMesh object into a VTK file
* \param[in] file_name the name of the file to save the data to
* \param[in] mesh the object that contains the data
* \ingroup io
*/
PCL_EXPORTS int
savePolygonFileVTK (const std::string &file_name,
const pcl::PolygonMesh& mesh);
/** \brief Save a \ref PolygonMesh object into a PLY file
* \param[in] file_name the name of the file to save the data to
* \param[in] mesh the object that contains the data
* \ingroup io
*/
PCL_EXPORTS int
savePolygonFilePLY (const std::string &file_name,
const pcl::PolygonMesh& mesh);
/** \brief Save a \ref PolygonMesh object into an STL file
* \param[in] file_name the name of the file to save the data to
* \param[in] mesh the object that contains the data
* \ingroup io
*/
PCL_EXPORTS int
savePolygonFileSTL (const std::string &file_name,
const pcl::PolygonMesh& mesh);
/** \brief Write a \ref RangeImagePlanar object to a PNG file
* \param[in] file_name the name of the file to save the data to
* \param[in] range_image the object that contains the data
* \ingroup io
*/
PCL_EXPORTS void
saveRangeImagePlanarFilePNG (const std::string &file_name,
const pcl::RangeImagePlanar& range_image);
/** \brief Convert a pcl::PointCloud object to a VTK PolyData one.
* \param[in] cloud the input pcl::PointCloud object
* \param[out] polydata the resultant VTK PolyData object
* \ingroup io
*/
template <typename PointT> void
pointCloudTovtkPolyData (const pcl::PointCloud<PointT>& cloud,
vtkPolyData* const polydata);
/** \brief Convert a pcl::PointCloud object to a VTK StructuredGrid one.
* \param[in] cloud the input pcl::PointCloud object
* \param[out] structured_grid the resultant VTK StructuredGrid object
* \ingroup io
*/
template <typename PointT> void
pointCloudTovtkStructuredGrid (const pcl::PointCloud<PointT>& cloud,
vtkStructuredGrid* const structured_grid);
/** \brief Convert a VTK PolyData object to a pcl::PointCloud one.
* \param[in] polydata the input VTK PolyData object
* \param[out] cloud the resultant pcl::PointCloud object
* \ingroup io
*/
template <typename PointT> void
vtkPolyDataToPointCloud (vtkPolyData* const polydata,
pcl::PointCloud<PointT>& cloud);
/** \brief Convert a VTK StructuredGrid object to a pcl::PointCloud one.
* \param[in] structured_grid the input VTK StructuredGrid object
* \param[out] cloud the resultant pcl::PointCloud object
* \ingroup io
*/
template <typename PointT> void
vtkStructuredGridToPointCloud (vtkStructuredGrid* const structured_grid,
pcl::PointCloud<PointT>& cloud);
}
}
#endif /* PLC_IO_VTK_LIB_IO_H_ */