Point Cloud Library (PCL) 1.12.1
outofcore_node_data.h
1/*
2 * Software License Agreement (BSD License)
3 *
4 * Point Cloud Library (PCL) - www.pointclouds.org
5 * Copyright (c) 2010-2012, Willow Garage, 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 Willow Garage, Inc. 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 * $Id: outofcore_node_data.h 6915 2012-08-22 10:54:21Z stfox88 $
37 */
38
39#pragma once
40
41#include <pcl/memory.h>
42#include <pcl/pcl_macros.h>
43#include <pcl/outofcore/boost.h>
44#include <pcl/outofcore/cJSON.h>
45
46#include <pcl/common/eigen.h>
47
48#include <ostream>
49
50namespace pcl
51{
52 namespace outofcore
53 {
54 /** \class OutofcoreOctreeNodeMetadata
55 *
56 * \brief Encapsulated class to read JSON metadata into memory, and write the JSON metadata for each
57 * node.
58 *
59 * This class encapsulates the outofcore node metadata
60 * serialization/deserialization. At the time it was written,
61 * this depended on cJSON to write JSON objects to disk. This
62 * class can be extended to have arbitrary ascii metadata fields
63 * saved to the metadata object file on disk.
64 *
65 * The JSON file is formatted in the following way:
66 * \verbatim
67 {
68 "version": 3,
69 "bb_min": [xxx,yyy,zzz],
70 "bb_max": [xxx,yyy,zzz],
71 "bin": "path_to_data.pcd"
72 }
73 \endverbatim
74 *
75 * Any properties not stored in the metadata file are computed
76 * when the file is loaded (e.g. \ref midpoint_xyz_). By
77 * convention, the JSON files are stored on disk with .oct_idx
78 * extension.
79 *
80 * \ingroup outofcore
81 * \author Stephen Fox (foxstephend@gmail.com)
82 */
84 {
85
86 public:
87 //public typedefs
88 using Ptr = shared_ptr<OutofcoreOctreeNodeMetadata>;
89 using ConstPtr = shared_ptr<const OutofcoreOctreeNodeMetadata>;
90
91 /** \brief Empty constructor */
94
95 /** \brief Copy constructor */
97
98 /** \brief Get the lower bounding box corner */
99 const Eigen::Vector3d&
101 /** \brief Set the lower bounding box corner */
102 void
103 setBoundingBoxMin (const Eigen::Vector3d& min_bb);
104 /** \brief Get the upper bounding box corner */
105 const Eigen::Vector3d&
107 /** \brief Set the upper bounding box corner */
108 void
109 setBoundingBoxMax (const Eigen::Vector3d& max_bb);
110
111 /** \brief Get the lower and upper corners of the bounding box enclosing this node */
112 void
113 getBoundingBox (Eigen::Vector3d &min_bb, Eigen::Vector3d &max_bb) const;
114 /** \brief Set the lower and upper corners of the bounding box */
115 void
116 setBoundingBox (const Eigen::Vector3d& min_bb, const Eigen::Vector3d& max_bb);
117
118 /** \brief Get the directory path name; this is the parent_path of */
119 const boost::filesystem::path&
121 /** \brief Set the directory path name */
122 void
123 setDirectoryPathname (const boost::filesystem::path& directory_pathname);
124
125 /** \brief Get the path to the PCD file */
126 const boost::filesystem::path&
128 /** \brief Set the point filename; extension .pcd */
129 void
130 setPCDFilename (const boost::filesystem::path& point_filename);
131
132 /** \brief et the outofcore version read from the "version" field of the JSON object */
133 int
135 /** \brief Set the outofcore version stored in the "version" field of the JSON object */
136 void
137 setOutofcoreVersion (const int version);
138
139 /** \brief Sets the name of the JSON file */
140 const boost::filesystem::path&
142 /** \brief Gets the name of the JSON file */
143 void
144 setMetadataFilename (const boost::filesystem::path& path_to_metadata);
145
146 /** \brief Get the midpoint of this node's bounding box */
147 const Eigen::Vector3d&
149
150 /** \brief Writes the data to a JSON file located at \ref metadata_filename_ */
151 void
153
154 /** \brief Loads the data from a JSON file located at \ref metadata_filename_ */
155 int
157 /** \brief Loads the data from a JSON file located at \ref metadata_filename_ */
158 int
159 loadMetadataFromDisk (const boost::filesystem::path& path_to_metadata);
160
161 friend
162 std::ostream& operator<<(std::ostream& os, const OutofcoreOctreeNodeMetadata& metadata_arg);
163
164 protected:
165 /** \brief The X,Y,Z axes-aligned minimum corner for the bounding box */
166 Eigen::Vector3d min_bb_;
167 /** \brief The X,Y,Z axes-aligned maximum corner for the bounding box */
168 Eigen::Vector3d max_bb_;
169 /** \brief Path to PCD file (i.e. "bin"ary point data) */
170 boost::filesystem::path binary_point_filename_;
171 /** \brief Voxel center; not stored on disk */
172 Eigen::Vector3d midpoint_xyz_;
173 /** \brief Directory this metadata belongs in */
174 boost::filesystem::path directory_;
175 /** \brief Metadata (JSON) file pathname (oct_idx extension JSON file) */
176 boost::filesystem::path metadata_filename_;
177 /** \brief Outofcore library version identifier */
179
180 /** \brief Computes the midpoint; used when bounding box is changed */
181 inline void
183 {
184 midpoint_xyz_ = (this->max_bb_ + this->min_bb_)/static_cast<double>(2.0);
185 }
186 };
187 }//namespace outofcore
188}//namespace pcl
Encapsulated class to read JSON metadata into memory, and write the JSON metadata for each node.
const Eigen::Vector3d & getVoxelCenter() const
Get the midpoint of this node's bounding box.
shared_ptr< const OutofcoreOctreeNodeMetadata > ConstPtr
shared_ptr< OutofcoreOctreeNodeMetadata > Ptr
Eigen::Vector3d midpoint_xyz_
Voxel center; not stored on disk.
const Eigen::Vector3d & getBoundingBoxMax() const
Get the upper bounding box corner.
friend std::ostream & operator<<(std::ostream &os, const OutofcoreOctreeNodeMetadata &metadata_arg)
boost::filesystem::path metadata_filename_
Metadata (JSON) file pathname (oct_idx extension JSON file)
const boost::filesystem::path & getMetadataFilename() const
Sets the name of the JSON file.
const boost::filesystem::path & getPCDFilename() const
Get the path to the PCD file.
void setMetadataFilename(const boost::filesystem::path &path_to_metadata)
Gets the name of the JSON file.
void setPCDFilename(const boost::filesystem::path &point_filename)
Set the point filename; extension .pcd.
int loadMetadataFromDisk()
Loads the data from a JSON file located at metadata_filename_.
Eigen::Vector3d max_bb_
The X,Y,Z axes-aligned maximum corner for the bounding box.
void setOutofcoreVersion(const int version)
Set the outofcore version stored in the "version" field of the JSON object.
void updateVoxelCenter()
Computes the midpoint; used when bounding box is changed.
int outofcore_version_
Outofcore library version identifier.
boost::filesystem::path binary_point_filename_
Path to PCD file (i.e.
void setBoundingBox(const Eigen::Vector3d &min_bb, const Eigen::Vector3d &max_bb)
Set the lower and upper corners of the bounding box.
void setBoundingBoxMin(const Eigen::Vector3d &min_bb)
Set the lower bounding box corner.
void getBoundingBox(Eigen::Vector3d &min_bb, Eigen::Vector3d &max_bb) const
Get the lower and upper corners of the bounding box enclosing this node.
void serializeMetadataToDisk()
Writes the data to a JSON file located at metadata_filename_.
OutofcoreOctreeNodeMetadata(const OutofcoreOctreeNodeMetadata &orig)
Copy constructor.
const boost::filesystem::path & getDirectoryPathname() const
Get the directory path name; this is the parent_path of
void setDirectoryPathname(const boost::filesystem::path &directory_pathname)
Set the directory path name.
int loadMetadataFromDisk(const boost::filesystem::path &path_to_metadata)
Loads the data from a JSON file located at metadata_filename_.
boost::filesystem::path directory_
Directory this metadata belongs in.
void setBoundingBoxMax(const Eigen::Vector3d &max_bb)
Set the upper bounding box corner.
Eigen::Vector3d min_bb_
The X,Y,Z axes-aligned minimum corner for the bounding box.
const Eigen::Vector3d & getBoundingBoxMin() const
Get the lower bounding box corner.
int getOutofcoreVersion() const
et the outofcore version read from the "version" field of the JSON object
Defines functions, macros and traits for allocating and using memory.
Defines all the PCL and non-PCL macros used.
#define PCL_EXPORTS
Definition: pcl_macros.h:323