Collision Checker
collision_queries.cc
Go to the documentation of this file.
3 
4 namespace collision {
5 namespace detail {
6 // default solver
7 template <typename T>
8 inline std::size_t collide_binary_helper(const CollisionObject &obj1,
9  const CollisionObject &obj2,
10  CollisionResult &res,
11  const CollisionRequest &req) {
12  static solvers::DefaultSolver solver;
13  static solvers::CollisionFunctionMatrix matr_default(&solver);
14  auto func = matr_default.getSolverBoolFunction(obj1.getCollisionObjectType(),
15  obj2.getCollisionObjectType());
16  return func(obj1, obj2, res, req);
17 }
18 
19 template <typename solvers::DefaultSolver *>
20 inline std::size_t collide_binary_helper(const CollisionObject &obj1,
21  const CollisionObject &obj2,
22  CollisionResult &res,
23  const CollisionRequest &req);
24 
25 // solverFCL solver
26 template <>
27 inline std::size_t collide_binary_helper<typename solvers::FCLSolver *>(
28  const CollisionObject &obj1, const CollisionObject &obj2,
29  CollisionResult &res, const CollisionRequest &req) {
30  static solvers::FCLSolver solver;
31  static solvers::CollisionFunctionMatrix matr_default(&solver);
32  auto func = matr_default.getSolverBoolFunction(obj1.getCollisionObjectType(),
33  obj2.getCollisionObjectType());
34  return func(obj1, obj2, res, req);
35 }
36 
37 // primitive solver
38 /*
39  template<> inline std::size_t collide_binary_helper<typename
40  solvers::PRIMITIVE_SOLVER>(const CollisionObject& obj1, const CollisionObject&
41  obj2, CollisionResult& res, const CollisionRequest& req)
42  {
43  static solvers::PRIMITIVE_SOLVER solver;
44  static solvers::CollisionFunctionMatrix matr_default(solver);
45  auto func = matr_default.getSolverBoolFunction(obj1.getCollisionObjectType(),
46  obj2.getCollisionObjectType()); return func(obj1, obj2, res, req);
47  }
48  */
49 } // namespace detail
50 
51 std::size_t collide_binary(const CollisionObject &obj1,
52  const CollisionObject &obj2, CollisionResult &res,
53  const CollisionRequest &req) {
54  switch (req.col_solver_type) {
55  case COL_DEFAULT:
56  return detail::collide_binary_helper<solvers::DefaultSolver *>(obj1, obj2,
57  res, req);
58  break;
59  case COL_FCL:
60  return detail::collide_binary_helper<solvers::FCLSolver *>(obj1, obj2,
61  res, req);
62  break;
63  default:
64  return -1;
65  break;
66  // case COL_PRIMITIVE:
67  // return
68  // detail::collide_binary_helper<solvers::PRIMITIVE_SOLVER>(obj1, obj2,
69  // res, req); break;
70  }
71 }
72 
73 } // namespace collision
collide_bool_func_t getSolverBoolFunction(CollisionObjectType obj1_type, CollisionObjectType obj2_type) const
std::size_t collide_binary_helper(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
std::size_t collide_binary(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
Universal structure specifying collision request properties.
virtual CollisionObjectType getCollisionObjectType() const
Base class for CollisionObjects and some of their groups.
CollisionSolverType col_solver_type
Structure holding result for a collision request.