Point Cloud Library (PCL)  1.12.0-dev
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 
50 namespace 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&
100  getBoundingBoxMin () const;
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&
106  getBoundingBoxMax () const;
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&
120  getDirectoryPathname () const;
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&
127  getPCDFilename () const;
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
134  getOutofcoreVersion () const;
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&
141  getMetadataFilename () const;
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&
148  getVoxelCenter () const;
149 
150  /** \brief Writes the data to a JSON file located at \ref metadata_filename_ */
151  void
152  serializeMetadataToDisk ();
153 
154  /** \brief Loads the data from a JSON file located at \ref metadata_filename_ */
155  int
156  loadMetadataFromDisk ();
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
pcl_macros.h
Defines all the PCL and non-PCL macros used.
pcl
Definition: convolution.h:46
pcl::outofcore::OutofcoreOctreeNodeMetadata::directory_
boost::filesystem::path directory_
Directory this metadata belongs in.
Definition: outofcore_node_data.h:174
pcl::outofcore::OutofcoreOctreeNodeMetadata::midpoint_xyz_
Eigen::Vector3d midpoint_xyz_
Voxel center; not stored on disk.
Definition: outofcore_node_data.h:172
pcl::operator<<
std::ostream & operator<<(std::ostream &os, const BivariatePolynomialT< real > &p)
Definition: bivariate_polynomial.hpp:240
pcl::outofcore::OutofcoreOctreeNodeMetadata::max_bb_
Eigen::Vector3d max_bb_
The X,Y,Z axes-aligned maximum corner for the bounding box.
Definition: outofcore_node_data.h:168
pcl::outofcore::OutofcoreOctreeNodeMetadata::updateVoxelCenter
void updateVoxelCenter()
Computes the midpoint; used when bounding box is changed.
Definition: outofcore_node_data.h:182
pcl::outofcore::OutofcoreOctreeNodeMetadata
Encapsulated class to read JSON metadata into memory, and write the JSON metadata for each node.
Definition: outofcore_node_data.h:83
pcl::outofcore::OutofcoreOctreeNodeMetadata::min_bb_
Eigen::Vector3d min_bb_
The X,Y,Z axes-aligned minimum corner for the bounding box.
Definition: outofcore_node_data.h:166
pcl::outofcore::OutofcoreOctreeNodeMetadata::Ptr
shared_ptr< OutofcoreOctreeNodeMetadata > Ptr
Definition: outofcore_node_data.h:88
pcl::outofcore::OutofcoreOctreeNodeMetadata::ConstPtr
shared_ptr< const OutofcoreOctreeNodeMetadata > ConstPtr
Definition: outofcore_node_data.h:89
pcl::outofcore::OutofcoreOctreeNodeMetadata::binary_point_filename_
boost::filesystem::path binary_point_filename_
Path to PCD file (i.e.
Definition: outofcore_node_data.h:170
memory.h
Defines functions, macros and traits for allocating and using memory.
pcl::outofcore::OutofcoreOctreeNodeMetadata::metadata_filename_
boost::filesystem::path metadata_filename_
Metadata (JSON) file pathname (oct_idx extension JSON file)
Definition: outofcore_node_data.h:176
PCL_EXPORTS
#define PCL_EXPORTS
Definition: pcl_macros.h:323
pcl::outofcore::OutofcoreOctreeNodeMetadata::outofcore_version_
int outofcore_version_
Outofcore library version identifier.
Definition: outofcore_node_data.h:178