-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
find_collision_candidates_callback.cc
38 lines (31 loc) · 1.2 KB
/
find_collision_candidates_callback.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "drake/geometry/proximity/find_collision_candidates_callback.h"
#include "drake/geometry/proximity/proximity_utilities.h"
namespace drake {
namespace geometry {
namespace internal {
namespace find_collision_candidates {
CallbackData::CallbackData(const CollisionFilter* collision_filter_in,
std::vector<SortedPair<GeometryId>>* pairs_in)
: collision_filter(*collision_filter_in), pairs(*pairs_in) {
DRAKE_DEMAND(collision_filter_in != nullptr);
DRAKE_DEMAND(pairs_in != nullptr);
}
bool Callback(fcl::CollisionObjectd* object_A_ptr,
fcl::CollisionObjectd* object_B_ptr,
// NOLINTNEXTLINE
void* callback_data) {
auto& data = *static_cast<CallbackData*>(callback_data);
const EncodedData encoding_a(*object_A_ptr);
const EncodedData encoding_b(*object_B_ptr);
const bool can_collide =
data.collision_filter.CanCollideWith(encoding_a.id(), encoding_b.id());
if (can_collide) {
data.pairs.emplace_back(encoding_a.id(), encoding_b.id());
}
// Tell the broadphase to keep searching.
return false;
}
} // namespace find_collision_candidates
} // namespace internal
} // namespace geometry
} // namespace drake