hpp-fcl 2.4.1
HPP fork of FCL -- The Flexible Collision Library
Loading...
Searching...
No Matches
collision_data.h
Go to the documentation of this file.
1//
2// Copyright (c) 2021 INRIA
3//
4
5#ifndef HPP_FCL_SERIALIZATION_COLLISION_DATA_H
6#define HPP_FCL_SERIALIZATION_COLLISION_DATA_H
7
10
11namespace boost {
12namespace serialization {
13
14template <class Archive>
15void save(Archive& ar, const hpp::fcl::Contact& contact,
16 const unsigned int /*version*/) {
17 ar& make_nvp("b1", contact.b1);
18 ar& make_nvp("b2", contact.b2);
19 ar& make_nvp("normal", contact.normal);
20 ar& make_nvp("pos", contact.pos);
21 ar& make_nvp("penetration_depth", contact.penetration_depth);
22}
23
24template <class Archive>
25void load(Archive& ar, hpp::fcl::Contact& contact,
26 const unsigned int /*version*/) {
27 ar >> make_nvp("b1", contact.b1);
28 ar >> make_nvp("b2", contact.b2);
29 ar >> make_nvp("normal", contact.normal);
30 ar >> make_nvp("pos", contact.pos);
31 ar >> make_nvp("penetration_depth", contact.penetration_depth);
32 contact.o1 = NULL;
33 contact.o2 = NULL;
34}
35
37
38template <class Archive>
39void serialize(Archive& ar, hpp::fcl::QueryRequest& query_request,
40 const unsigned int /*version*/) {
41 ar& make_nvp("gjk_initial_guess", query_request.gjk_initial_guess);
42 // TODO: use gjk_initial_guess instead
45 ar& make_nvp("enable_cached_gjk_guess",
46 query_request.enable_cached_gjk_guess);
48 ar& make_nvp("cached_gjk_guess", query_request.cached_gjk_guess);
49 ar& make_nvp("cached_support_func_guess",
50 query_request.cached_support_func_guess);
51 ar& make_nvp("enable_timings", query_request.enable_timings);
52}
53
54template <class Archive>
55void serialize(Archive& ar, hpp::fcl::QueryResult& query_result,
56 const unsigned int /*version*/) {
57 ar& make_nvp("cached_gjk_guess", query_result.cached_gjk_guess);
58 ar& make_nvp("cached_support_func_guess",
59 query_result.cached_support_func_guess);
60}
61
62template <class Archive>
63void serialize(Archive& ar, hpp::fcl::CollisionRequest& collision_request,
64 const unsigned int /*version*/) {
65 ar& make_nvp("base",
66 boost::serialization::base_object<hpp::fcl::QueryRequest>(
67 collision_request));
68 ar& make_nvp("num_max_contacts", collision_request.num_max_contacts);
69 ar& make_nvp("enable_contact", collision_request.enable_contact);
70 ar& make_nvp("enable_distance_lower_bound",
71 collision_request.enable_distance_lower_bound);
72 ar& make_nvp("security_margin", collision_request.security_margin);
73 ar& make_nvp("break_distance", collision_request.break_distance);
74}
75
76template <class Archive>
77void save(Archive& ar, const hpp::fcl::CollisionResult& collision_result,
78 const unsigned int /*version*/) {
79 ar& make_nvp("base", boost::serialization::base_object<hpp::fcl::QueryResult>(
80 collision_result));
81 ar& make_nvp("contacts", collision_result.getContacts());
82 ar& make_nvp("distance_lower_bound", collision_result.distance_lower_bound);
83}
84
85template <class Archive>
86void load(Archive& ar, hpp::fcl::CollisionResult& collision_result,
87 const unsigned int /*version*/) {
88 ar >>
89 make_nvp("base", boost::serialization::base_object<hpp::fcl::QueryResult>(
90 collision_result));
91 std::vector<hpp::fcl::Contact> contacts;
92 ar >> make_nvp("contacts", contacts);
93 collision_result.clear();
94 for (size_t k = 0; k < contacts.size(); ++k)
95 collision_result.addContact(contacts[k]);
96 ar >> make_nvp("distance_lower_bound", collision_result.distance_lower_bound);
97}
98
100
101template <class Archive>
102void serialize(Archive& ar, hpp::fcl::DistanceRequest& distance_request,
103 const unsigned int /*version*/) {
104 ar& make_nvp("base",
105 boost::serialization::base_object<hpp::fcl::QueryRequest>(
106 distance_request));
107 ar& make_nvp("enable_nearest_points", distance_request.enable_nearest_points);
108 ar& make_nvp("rel_err", distance_request.rel_err);
109 ar& make_nvp("abs_err", distance_request.abs_err);
110}
111
112template <class Archive>
113void save(Archive& ar, const hpp::fcl::DistanceResult& distance_result,
114 const unsigned int /*version*/) {
115 ar& make_nvp("base", boost::serialization::base_object<hpp::fcl::QueryResult>(
116 distance_result));
117 ar& make_nvp("min_distance", distance_result.min_distance);
118 ar& make_nvp("nearest_points", make_array(distance_result.nearest_points, 2));
119 ar& make_nvp("normal", distance_result.normal);
120 ar& make_nvp("b1", distance_result.b1);
121 ar& make_nvp("b2", distance_result.b2);
122}
123
124template <class Archive>
125void load(Archive& ar, hpp::fcl::DistanceResult& distance_result,
126 const unsigned int /*version*/) {
127 ar >>
128 make_nvp("base", boost::serialization::base_object<hpp::fcl::QueryResult>(
129 distance_result));
130 ar >> make_nvp("min_distance", distance_result.min_distance);
131 ar >>
132 make_nvp("nearest_points", make_array(distance_result.nearest_points, 2));
133 ar >> make_nvp("normal", distance_result.normal);
134 ar >> make_nvp("b1", distance_result.b1);
135 ar >> make_nvp("b2", distance_result.b2);
136 distance_result.o1 = NULL;
137 distance_result.o2 = NULL;
138}
139
141
142} // namespace serialization
143} // namespace boost
144
145#endif // ifndef HPP_FCL_SERIALIZATION_COLLISION_DATA_H
#define HPP_FCL_SERIALIZATION_SPLIT(Type)
Definition: fwd.h:13
#define HPP_FCL_COMPILER_DIAGNOSTIC_IGNORED_DEPRECECATED_DECLARATIONS
Definition: fwd.hh:84
#define HPP_FCL_COMPILER_DIAGNOSTIC_PUSH
Definition: fwd.hh:82
#define HPP_FCL_COMPILER_DIAGNOSTIC_POP
Definition: fwd.hh:83
void save(Archive &ar, const hpp::fcl::BVSplitter< BV > &splitter_, const unsigned int)
Definition: BV_splitter.h:30
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
Definition: AABB.h:11
request to the collision algorithm
Definition: collision_data.h:235
size_t num_max_contacts
The maximum number of contacts will return.
Definition: collision_data.h:237
bool enable_distance_lower_bound
Whether a lower bound on distance is returned when objects are disjoint.
Definition: collision_data.h:244
FCL_REAL security_margin
Distance below which objects are considered in collision. See Collision.
Definition: collision_data.h:251
bool enable_contact
whether the contact information (normal, penetration depth and contact position) will return
Definition: collision_data.h:241
FCL_REAL break_distance
Distance below which bounding volumes are broken down. See Collision.
Definition: collision_data.h:255
collision result
Definition: collision_data.h:302
void clear()
clear the results obtained
Definition: collision_data.h:377
void addContact(const Contact &c)
add one contact into result structure
Definition: collision_data.h:330
void getContacts(std::vector< Contact > &contacts_) const
get all the contacts
Definition: collision_data.h:369
FCL_REAL distance_lower_bound
Definition: collision_data.h:312
Contact information returned by collision.
Definition: collision_data.h:54
FCL_REAL penetration_depth
penetration depth
Definition: collision_data.h:80
Vec3f pos
contact position, in world space
Definition: collision_data.h:77
int b1
contact primitive in object 1 if object 1 is mesh or point cloud, it is the triangle or point id if o...
Definition: collision_data.h:65
int b2
contact primitive in object 2 if object 2 is mesh or point cloud, it is the triangle or point id if o...
Definition: collision_data.h:71
const CollisionGeometry * o2
collision object 2
Definition: collision_data.h:59
const CollisionGeometry * o1
collision object 1
Definition: collision_data.h:56
Vec3f normal
contact normal, pointing from o1 to o2
Definition: collision_data.h:74
request to the distance computation
Definition: collision_data.h:392
bool enable_nearest_points
whether to return the nearest points
Definition: collision_data.h:394
FCL_REAL rel_err
error threshold for approximate distance
Definition: collision_data.h:397
FCL_REAL abs_err
Definition: collision_data.h:398
distance result
Definition: collision_data.h:420
const CollisionGeometry * o2
collision object 2
Definition: collision_data.h:436
Vec3f normal
In case both objects are in collision, store the normal.
Definition: collision_data.h:430
const CollisionGeometry * o1
collision object 1
Definition: collision_data.h:433
int b2
information about the nearest point in object 2 if object 2 is mesh or point cloud,...
Definition: collision_data.h:448
Vec3f nearest_points[2]
nearest points
Definition: collision_data.h:427
int b1
information about the nearest point in object 1 if object 1 is mesh or point cloud,...
Definition: collision_data.h:442
FCL_REAL min_distance
minimum distance between two objects. if two objects are in collision, min_distance <= 0.
Definition: collision_data.h:424
base class for all query requests
Definition: collision_data.h:119
Vec3f cached_gjk_guess
the gjk initial guess set by user
Definition: collision_data.h:144
GJKInitialGuess gjk_initial_guess
Definition: collision_data.h:121
support_func_guess_t cached_support_func_guess
the support function initial guess set by user
Definition: collision_data.h:147
bool enable_timings
enable timings when performing collision/distance request
Definition: collision_data.h:150
bool enable_cached_gjk_guess
whether enable gjk initial guess @Deprecated Use gjk_initial_guess instead
Definition: collision_data.h:126
base class for all query results
Definition: collision_data.h:195
support_func_guess_t cached_support_func_guess
stores the last support function vertex index, when relevant.
Definition: collision_data.h:200
Vec3f cached_gjk_guess
stores the last GJK ray when relevant.
Definition: collision_data.h:197