5 #ifndef COAL_SERIALIZATION_CONVEX_H
6 #define COAL_SERIALIZATION_CONVEX_H
17 namespace serialization {
20 template <
typename IndexType>
27 template <
class Archive,
typename IndexType>
29 const unsigned int ) {
33 boost::serialization::base_object<coal::ShapeBase>(convex_base));
35 const unsigned int num_points_previous = convex_base.
num_points;
36 ar& make_nvp(
"num_points", convex_base.
num_points);
38 const unsigned int num_normals_and_offsets_previous =
42 const int num_warm_start_supports_previous =
44 assert(num_warm_start_supports_previous ==
46 int num_warm_start_supports = num_warm_start_supports_previous;
47 ar& make_nvp(
"num_warm_start_supports", num_warm_start_supports);
49 if (Archive::is_loading::value) {
50 if (num_points_previous != convex_base.
num_points) {
51 convex_base.
points.reset();
54 new std::vector<Vec3s>(convex_base.
num_points));
57 if (num_normals_and_offsets_previous !=
69 if (num_warm_start_supports_previous != num_warm_start_supports) {
71 static_cast<size_t>(num_warm_start_supports));
73 static_cast<size_t>(num_warm_start_supports));
77 typedef Eigen::Matrix<Scalar, 3, Eigen::Dynamic> MatrixPoints;
79 Eigen::Map<MatrixPoints> points_map(
80 reinterpret_cast<Scalar*
>(convex_base.
points->data()), 3,
82 ar& make_nvp(
"points", points_map);
85 typedef Eigen::Matrix<Scalar, 1, Eigen::Dynamic> VecOfReals;
87 Eigen::Map<MatrixPoints> normals_map(
90 ar& make_nvp(
"normals", normals_map);
92 Eigen::Map<VecOfReals> offsets_map(
95 ar& make_nvp(
"offsets", offsets_map);
98 typedef Eigen::Matrix<int, 1, Eigen::Dynamic> VecOfInts;
99 if (num_warm_start_supports > 0) {
100 Eigen::Map<MatrixPoints> warm_start_support_points_map(
101 reinterpret_cast<Scalar*
>(
103 3, num_warm_start_supports);
104 ar& make_nvp(
"warm_start_support_points", warm_start_support_points_map);
106 Eigen::Map<VecOfInts> warm_start_support_indices_map(
108 1, num_warm_start_supports);
109 ar& make_nvp(
"warm_start_support_indices", warm_start_support_indices_map);
112 ar& make_nvp(
"center", convex_base.
center);
118 template <
typename PolygonT>
126 template <
class Archive,
typename PolygonT>
128 const unsigned int ) {
129 using namespace coal;
133 Accessor& convex =
reinterpret_cast<Accessor&
>(convex_);
134 ar& make_nvp(
"base", boost::serialization::base_object<Base>(convex_));
136 const unsigned int num_polygons_previous = convex.num_polygons;
137 ar& make_nvp(
"num_polygons", convex.num_polygons);
139 if (Archive::is_loading::value) {
140 if (num_polygons_previous != convex.num_polygons) {
141 convex.polygons.reset(
new std::vector<PolygonT>(convex.num_polygons));
145 ar& make_array<PolygonT>(convex.polygons->data(), convex.num_polygons);
147 if (Archive::is_loading::value) convex.fillNeighbors();
Base for convex polytope.
Definition: geometric_shapes.h:691
unsigned int num_points
Definition: geometric_shapes.h:797
std::shared_ptr< std::vector< Vec3s > > normals
An array of the normals of the polygon.
Definition: geometric_shapes.h:800
SupportWarmStartPolytope support_warm_starts
Support warm start polytopes.
Definition: geometric_shapes.h:822
std::shared_ptr< std::vector< Vec3s > > points
An array of the points of the polygon.
Definition: geometric_shapes.h:796
Vec3s center
center of the convex polytope, this is used for collision: center is guaranteed in the internal of th...
Definition: geometric_shapes.h:813
std::shared_ptr< std::vector< Scalar > > offsets
An array of the offsets to the normals of the polygon. Note: there are as many offsets as normals.
Definition: geometric_shapes.h:803
unsigned int num_normals_and_offsets
Definition: geometric_shapes.h:804
Convex polytope.
Definition: convex.h:50
void fillNeighbors()
Definition: convex.hxx:266
#define COAL_SERIALIZATION_DECLARE_EXPORT(T)
Definition: fwd.h:30
void serialize(Archive &ar, coal::AABB &aabb, const unsigned int)
Definition: AABB.h:15
Main namespace.
Definition: broadphase_bruteforce.h:44
double Scalar
Definition: data_types.h:68
coal::ConvexTpl< PolygonT > Base
Definition: convex.h:120
coal::ConvexBaseTpl< IndexType > Base
Definition: convex.h:22
std::vector< Vec3s > points
Definition: geometric_shapes.h:666
std::vector< IndexType > indices
Definition: geometric_shapes.h:671
Quadrilateral with 4 indices for points.
Definition: data_types.h:212