5 #ifndef HPP_FCL_SERIALIZATION_OCTREE_H
6 #define HPP_FCL_SERIALIZATION_OCTREE_H
11 #include <boost/serialization/string.hpp>
17 namespace serialization {
29 template <
class Archive>
31 const unsigned int ) {
33 ar << make_nvp(
"resolution", resolution);
36 template <
class Archive>
38 const unsigned int ) {
40 const Accessor &access =
reinterpret_cast<const Accessor &
>(octree);
42 std::ostringstream stream;
43 access.
tree->write(stream);
44 const std::string stream_str = stream.str();
45 auto size = stream_str.size();
48 ar << make_nvp(
"tree_data_size", size);
49 ar << make_nvp(
"tree_data",
50 make_array(stream_str.c_str(), stream_str.size()));
52 ar << make_nvp(
"base", base_object<hpp::fcl::CollisionGeometry>(octree));
53 ar << make_nvp(
"default_occupancy", access.default_occupancy);
54 ar << make_nvp(
"occupancy_threshold", access.occupancy_threshold);
55 ar << make_nvp(
"free_threshold", access.free_threshold);
58 template <
class Archive>
60 const unsigned int ) {
62 ar >> make_nvp(
"resolution", resolution);
66 template <
class Archive>
68 const unsigned int ) {
70 Accessor &access =
reinterpret_cast<Accessor &
>(octree);
72 std::size_t tree_data_size;
73 ar >> make_nvp(
"tree_data_size", tree_data_size);
75 std::string stream_str;
76 stream_str.resize(tree_data_size);
78 assert(tree_data_size > 0 &&
"tree_data_size should be greater than 0");
79 ar >> make_nvp(
"tree_data", make_array(&stream_str[0], tree_data_size));
80 std::istringstream stream(stream_str);
82 octomap::AbstractOcTree *new_tree = octomap::AbstractOcTree::read(stream);
83 access.tree = std::shared_ptr<const octomap::OcTree>(
84 dynamic_cast<octomap::OcTree *
>(new_tree));
86 ar >> make_nvp(
"base", base_object<hpp::fcl::CollisionGeometry>(octree));
87 ar >> make_nvp(
"default_occupancy", access.default_occupancy);
88 ar >> make_nvp(
"occupancy_threshold", access.occupancy_threshold);
89 ar >> make_nvp(
"free_threshold", access.free_threshold);
92 template <
class Archive>
94 const unsigned int version) {
95 split_free(ar, octree, version);
Octree is one type of collision geometry which can encode uncertainty information in the sensor data.
Definition: octree.h:54
shared_ptr< const octomap::OcTree > tree
Definition: octree.h:56
FCL_REAL default_occupancy
Definition: octree.h:58
FCL_REAL getResolution() const
Returns the resolution of the octree.
Definition: octree.h:153
FCL_REAL occupancy_threshold
Definition: octree.h:60
FCL_REAL free_threshold
Definition: octree.h:61
#define HPP_FCL_SERIALIZATION_DECLARE_EXPORT(T)
Definition: fwd.h:30
void save(Archive &ar, const hpp::fcl::BVSplitter< BV > &splitter_, const unsigned int)
Definition: BV_splitter.h:30
void save_construct_data(Archive &ar, const hpp::fcl::OcTree *octree_ptr, const unsigned int)
Definition: octree.h:30
void load_construct_data(Archive &ar, hpp::fcl::OcTree *octree_ptr, const unsigned int)
Definition: octree.h:59
void load(Archive &ar, hpp::fcl::BVSplitter< BV > &splitter_, const unsigned int)
Definition: BV_splitter.h:44
void serialize(Archive &ar, hpp::fcl::AABB &aabb, const unsigned int)
Definition: AABB.h:15
shared_ptr< const octomap::OcTree > tree
Definition: octree.h:56
hpp::fcl::OcTree Base
Definition: octree.h:21