Collision Checker
collision_solver_primitive.cc
Go to the documentation of this file.
2 
4 
5 namespace collision {
6 
7 namespace solvers {
8 namespace solverPrimitive {
10  const CollisionObject &obj2,
11  const char *solver_name) {
12  std::cout << std::string("collision function between object of types ") +
13  std::to_string(obj1.getCollisionObjectType()) +
14  std::string(" and ") +
15  std::to_string(obj2.getCollisionObjectType()) +
16  std::string("is not implemented in the solver ") +
17  std::string(solver_name)
18  << std::endl;
19  throw;
20  return 0;
21 }
22 // critical not to make mistakes
23 std::size_t collide_aabb_aabb(const CollisionObject &obj1,
24  const CollisionObject &obj2, CollisionResult &res,
25  const CollisionRequest &req) {
27  static_cast<const RectangleAABB &>(obj1),
28  static_cast<const RectangleAABB &>(obj2)));
29  return 0;
30 }
31 std::size_t collide_aabb_obb(const CollisionObject &obj1,
32  const CollisionObject &obj2, CollisionResult &res,
33  const CollisionRequest &req) {
35  static_cast<const RectangleAABB &>(obj1),
36  static_cast<const RectangleOBB &>(obj2)));
37  return 0;
38 }
39 std::size_t collide_aabb_sphere(const CollisionObject &obj1,
40  const CollisionObject &obj2,
41  CollisionResult &res,
42  const CollisionRequest &req) {
43  // res.set_result(primitive_queries::collisionDetection(static_cast<const
44  // RectangleAABB&>(obj1), static_cast<const Sphere&>(obj2)));
45  not_implemented_error(obj1, obj2, "primitiveSolver");
46  return -1;
47 }
48 std::size_t collide_aabb_triangle(const CollisionObject &obj1,
49  const CollisionObject &obj2,
50  CollisionResult &res,
51  const CollisionRequest &req) {
52  // res.set_result(primitive_queries::collisionDetection(static_cast<const
53  // RectangleAABB&>(obj1), static_cast<const Triangle&>(obj2)));
54  not_implemented_error(obj1, obj2, "primitiveSolver");
55  return -1;
56 }
57 std::size_t collide_aabb_point(const CollisionObject &obj1,
58  const CollisionObject &obj2,
59  CollisionResult &res,
60  const CollisionRequest &req) {
62  static_cast<const Point &>(obj2),
63  static_cast<const RectangleAABB &>(obj1)));
64  return 0;
65 }
66 std::size_t collide_obb_aabb(const CollisionObject &obj1,
67  const CollisionObject &obj2, CollisionResult &res,
68  const CollisionRequest &req) {
70  static_cast<const RectangleAABB &>(obj2),
71  static_cast<const RectangleOBB &>(obj1)));
72  return 0;
73 }
74 std::size_t collide_obb_obb(const CollisionObject &obj1,
75  const CollisionObject &obj2, CollisionResult &res,
76  const CollisionRequest &req) {
78  static_cast<const RectangleOBB &>(obj1),
79  static_cast<const RectangleOBB &>(obj2)));
80  return 0;
81 }
82 std::size_t collide_obb_sphere(const CollisionObject &obj1,
83  const CollisionObject &obj2,
84  CollisionResult &res,
85  const CollisionRequest &req) {
86  // res.set_result(primitive_queries::collisionDetection(static_cast<const
87  // RectangleOBB&>(obj1), static_cast<const Sphere&>(obj2)));
88  not_implemented_error(obj1, obj2, "primitiveSolver");
89  return -1;
90 }
91 std::size_t collide_obb_triangle(const CollisionObject &obj1,
92  const CollisionObject &obj2,
93  CollisionResult &res,
94  const CollisionRequest &req) {
95  // res.set_result(primitive_queries::collisionDetection(static_cast<const
96  // RectangleOBB&>(obj1), static_cast<const Triangle&>(obj2)));
97  not_implemented_error(obj1, obj2, "primitiveSolver");
98  return -1;
99 }
100 std::size_t collide_obb_point(const CollisionObject &obj1,
101  const CollisionObject &obj2, CollisionResult &res,
102  const CollisionRequest &req) {
103  // res.set_result(primitive_queries::collisionDetection(static_cast<const
104  // Point&>(obj2), static_cast<const RectangleOBB&>(obj1)));
105  not_implemented_error(obj1, obj2, "primitiveSolver");
106  return -1;
107 }
108 std::size_t collide_sphere_aabb(const CollisionObject &obj1,
109  const CollisionObject &obj2,
110  CollisionResult &res,
111  const CollisionRequest &req) {
112  // res.set_result(primitive_queries::collisionDetection(static_cast<const
113  // RectangleAABB&>(obj2), static_cast<const Sphere&>(obj1)));
114  not_implemented_error(obj1, obj2, "primitiveSolver");
115  return -1;
116 }
117 
118 std::size_t collide_sphere_obb(const CollisionObject &obj1,
119  const CollisionObject &obj2,
120  CollisionResult &res,
121  const CollisionRequest &req) {
122  // res.set_result(primitive_queries::collisionDetection(static_cast<const
123  // RectangleOBB&>(obj2), static_cast<const Sphere&>(obj1)));
124  not_implemented_error(obj1, obj2, "primitiveSolver");
125  return -1;
126 }
127 
128 std::size_t collide_sphere_sphere(const CollisionObject &obj1,
129  const CollisionObject &obj2,
130  CollisionResult &res,
131  const CollisionRequest &req) {
132  // res.set_result(primitive_queries::collisionDetection(static_cast<const
133  // Sphere&>(obj1), static_cast<const Sphere&>(obj2)));
134  not_implemented_error(obj1, obj2, "primitiveSolver");
135  return -1;
136 }
137 
138 std::size_t collide_sphere_triangle(const CollisionObject &obj1,
139  const CollisionObject &obj2,
140  CollisionResult &res,
141  const CollisionRequest &req) {
142  // res.set_result(primitive_queries::collisionDetection(static_cast<const
143  // Sphere&>(obj1), static_cast<const Triangle&>(obj2)));
144  not_implemented_error(obj1, obj2, "primitiveSolver");
145  return -1;
146 }
147 
148 std::size_t collide_sphere_point(const CollisionObject &obj1,
149  const CollisionObject &obj2,
150  CollisionResult &res,
151  const CollisionRequest &req) {
153  static_cast<const Point &>(obj2), static_cast<const Sphere &>(obj1)));
154  return 0;
155 }
156 std::size_t collide_triangle_aabb(const CollisionObject &obj1,
157  const CollisionObject &obj2,
158  CollisionResult &res,
159  const CollisionRequest &req) {
160  // res.set_result(primitive_queries::collisionDetection(static_cast<const
161  // RectangleAABB&>(obj2), static_cast<const Triangle&>(obj1)));
162  not_implemented_error(obj1, obj2, "primitiveSolver");
163  return -1;
164 }
165 std::size_t collide_triangle_obb(const CollisionObject &obj1,
166  const CollisionObject &obj2,
167  CollisionResult &res,
168  const CollisionRequest &req) {
169  // res.set_result(primitive_queries::collisionDetection(static_cast<const
170  // RectangleOBB&>(obj2), static_cast<const Triangle&>(obj1)));
171  not_implemented_error(obj1, obj2, "primitiveSolver");
172  return -1;
173 }
174 std::size_t collide_triangle_sphere(const CollisionObject &obj1,
175  const CollisionObject &obj2,
176  CollisionResult &res,
177  const CollisionRequest &req) {
178  // res.set_result(primitive_queries::collisionDetection(static_cast<const
179  // Sphere&>(obj2), static_cast<const Triangle&>(obj1)));
180  not_implemented_error(obj1, obj2, "primitiveSolver");
181  return -1;
182 }
184  const CollisionObject &obj2,
185  CollisionResult &res,
186  const CollisionRequest &req) {
187  // res.set_result(primitive_queries::collisionDetection(static_cast<const
188  // Triangle&>(obj1), static_cast<const Triangle&>(obj2)));
189  not_implemented_error(obj1, obj2, "primitiveSolver");
190  return -1;
191 }
192 std::size_t collide_triangle_point(const CollisionObject &obj1,
193  const CollisionObject &obj2,
194  CollisionResult &res,
195  const CollisionRequest &req) {
196  // res.set_result(primitive_queries::collisionDetection(static_cast<const
197  // Point&>(obj2), static_cast<const Triangle&>(obj1)));
198  not_implemented_error(obj1, obj2, "primitiveSolver");
199  return -1;
200 }
201 
202 std::size_t collide_point_aabb(const CollisionObject &obj1,
203  const CollisionObject &obj2,
204  CollisionResult &res,
205  const CollisionRequest &req) {
207  static_cast<const Point &>(obj1),
208  static_cast<const RectangleAABB &>(obj2)));
209  return 0;
210 }
211 std::size_t collide_point_obb(const CollisionObject &obj1,
212  const CollisionObject &obj2, CollisionResult &res,
213  const CollisionRequest &req) {
214  // res.set_result(primitive_queries::collisionDetection(static_cast<const
215  // Point&>(obj1), static_cast<const RectangleOBB&>(obj2)));
216  not_implemented_error(obj1, obj2, "primitiveSolver");
217  return -1;
218 }
219 std::size_t collide_point_sphere(const CollisionObject &obj1,
220  const CollisionObject &obj2,
221  CollisionResult &res,
222  const CollisionRequest &req) {
224  static_cast<const Point &>(obj1), static_cast<const Sphere &>(obj2)));
225  return 0;
226 }
227 std::size_t collide_point_triangle(const CollisionObject &obj1,
228  const CollisionObject &obj2,
229  CollisionResult &res,
230  const CollisionRequest &req) {
231  // res.set_result(primitive_queries::collisionDetection(static_cast<const
232  // Point&>(obj1), static_cast<const Triangle&>(obj2)));
233  not_implemented_error(obj1, obj2, "primitiveSolver");
234  return -1;
235 }
236 std::size_t collide_point_point(const CollisionObject &obj1,
237  const CollisionObject &obj2,
238  CollisionResult &res,
239  const CollisionRequest &req) {
241  static_cast<const Point &>(obj1), static_cast<const Point &>(obj2)));
242  return 0;
243 }
244 
245 /*
246 std::size_t collide_polygon_obj(const CollisionObject& obj1, const
247 CollisionObject& obj2, CollisionResult& res, const CollisionRequest& req)
248 {
249  static solvers::PrimitiveSolver solver;
250  static CollisionFunctionMatrix matr_primitive(&solver);
251  std::vector<TriangleConstPtr> mesh_triangles = (static_cast<const
252 Polygon&> (obj1)).getTriangleMesh(); for (auto& obj : mesh_triangles)
253  {
254  collide_bool_func_t func =
255 matr_primitive.getSolverBoolFunction(OBJ_TYPE_TRIANGLE,
256 obj2.getCollisionObjectType()); if (!func)
257  {
258  return -1;
259  }
260  func(*obj, obj2, res, req);
261  if (res.collides())
262  return 0;
263  }
264  return 0;
265 }
266 
267 std::size_t collide_polygon_polygon(const CollisionObject& obj1, const
268 CollisionObject& obj2, CollisionResult& res, const CollisionRequest& req)
269 {
270  static solvers::PrimitiveSolver solver;
271  static CollisionFunctionMatrix matr_primitive(&solver);
272  std::vector<TriangleConstPtr> mesh_triangles_1 = (static_cast<const
273 Polygon&> (obj1)).getTriangleMesh(); std::vector<TriangleConstPtr>
274 mesh_triangles_2 = (static_cast<const Polygon&> (obj2)).getTriangleMesh(); for
275 (auto& obj1 : mesh_triangles_1)
276  {
277  for (auto& obj2 : mesh_triangles_2)
278  {
279  collide_bool_func_t func =
280 matr_primitive.getSolverBoolFunction(OBJ_TYPE_TRIANGLE, OBJ_TYPE_TRIANGLE); if
281 (!func)
282  {
283  return -1;
284  }
285  func(*obj1, *obj2, res, req);
286  if (res.collides())
287  return 0;
288  }
289  }
290  return 0;
291 }
292 
293 std::size_t collide_obj_polygon(const CollisionObject& obj1, const
294 CollisionObject& obj2, CollisionResult& res, const CollisionRequest& req)
295 {
296  return collide_polygon_obj(obj2, obj1, res, req);
297 }
298 
299 std::size_t collide_shape_group_obj(const CollisionObject& obj1, const
300 CollisionObject& obj2, CollisionResult& res, const CollisionRequest& req)
301 {
302  static solvers::PrimitiveSolver solver;
303  static CollisionFunctionMatrix matr_primitive(&solver);
304  std::vector<ShapeConstPtr> sg_objects = (static_cast<const ShapeGroup&>
305 (obj1)).unpack(); for (auto& obj : sg_objects)
306  {
307  collide_bool_func_t func =
308 matr_primitive.getSolverBoolFunction(obj->getCollisionObjectType(),
309 obj2.getCollisionObjectType()); if (!func)
310  {
311  return -1;
312  }
313  func(*obj, obj2, res, req);
314  if (res.collides())
315  return 0;
316  }
317  return 0;
318 }
319 
320 std::size_t collide_obj_shape_group(const CollisionObject& obj1, const
321 CollisionObject& obj2, CollisionResult& res, const CollisionRequest& req)
322 {
323  return collide_shape_group_obj(obj2, obj1, res, req);
324 }
325 
326 std::size_t collide_shape_group_shape_group(const CollisionObject& obj1, const
327 CollisionObject& obj2, CollisionResult& res, const CollisionRequest& req)
328 {
329  static solvers::PrimitiveSolver solver;
330  static CollisionFunctionMatrix matr_primitive(&solver);
331  std::vector<ShapeConstPtr> sg_objects_1 = (static_cast<const
332 ShapeGroup&> (obj1)).unpack(); std::vector<ShapeConstPtr> sg_objects_2 =
333 (static_cast<const ShapeGroup&> (obj2)).unpack();
334 
335  for (auto& obj_1 : sg_objects_1)
336  {
337  for (auto& obj_2 : sg_objects_2)
338  {
339 
340  collide_bool_func_t func =
341 matr_primitive.getSolverBoolFunction(obj_1->getCollisionObjectType(),
342 obj_2->getCollisionObjectType()); if (!func)
343  {
344  return -1;
345  }
346  func(*obj_1, *obj_2, res, req);
347  if (res.collides())
348  return 0;
349  }
350  }
351  return 0;
352 }
353 
354 std::size_t collide_tvobst_obj(const CollisionObject& obj1, const
355 CollisionObject& obj2, CollisionResult& res, const CollisionRequest& req)
356 {
357  static solvers::PrimitiveSolver solver;
358  static CollisionFunctionMatrix matr_primitive(&solver);
359  const TimeVariantCollisionObject& tvobst(static_cast<const
360 TimeVariantCollisionObject&>(obj1)); int time_idx_start =
361 tvobst.time_start_idx(); int time_idx_end = tvobst.time_end_idx(); for (int cc1
362 = time_idx_start; cc1 <= time_idx_end; cc1++)
363  {
364  CollisionObjectConstPtr cur_obj = tvobst.getObstacleAtTime(cc1);
365 
366  if (!cur_obj.get())
367  {
368  continue;
369  }
370 
371  if (cur_obj->getCollisionObjectClass() ==
372 CollisionObjectClass::OBJ_CLASS_TVOBSTACLE)
373  {
374  return -1;
375  }
376 
377  collide_bool_func_t func =
378 matr_primitive.getSolverBoolFunction(cur_obj->getCollisionObjectType(),
379 obj2.getCollisionObjectType()); if (!func)
380  {
381  return -1;
382  }
383  func(*cur_obj, obj2, res, req);
384  if (res.collides())
385  return 0;
386  }
387  return 0;
388 }
389 
390 std::size_t collide_obj_tvobst(const CollisionObject& obj1, const
391 CollisionObject& obj2, CollisionResult& res, const CollisionRequest& req)
392 {
393  return collide_tvobst_obj(obj2, obj1, res, req);
394 }
395 
396 
397 std::size_t collide_tvobst_tvobst(const CollisionObject& obj1, const
398 CollisionObject& obj2, CollisionResult& res, const CollisionRequest& req)
399 {
400  static solvers::PrimitiveSolver solver;
401  static CollisionFunctionMatrix matr_primitive(&solver);
402  const TimeVariantCollisionObject& tvobst1(static_cast<const
403 TimeVariantCollisionObject&>(obj1)); const TimeVariantCollisionObject&
404 tvobst2(static_cast<const TimeVariantCollisionObject&>(obj2)); int
405 time_idx_start = std::min(tvobst1.time_start_idx(), tvobst2.time_start_idx());
406  int time_idx_end = std::max(tvobst1.time_end_idx(),
407 tvobst2.time_end_idx());
408 
409  for (int cc1 = time_idx_start; cc1 <= time_idx_end; cc1++)
410  {
411  CollisionObjectConstPtr obst_1 = tvobst1.getObstacleAtTime(cc1);
412  CollisionObjectConstPtr obst_2 = tvobst2.getObstacleAtTime(cc1);
413 
414  if (!obst_1.get() || !obst_2.get())
415  {
416  continue;
417  }
418  if (obst_1->getCollisionObjectClass() == OBJ_CLASS_TVOBSTACLE ||
419 obst_2->getCollisionObjectClass() == OBJ_CLASS_TVOBSTACLE)
420  {
421  return -1;
422  }
423 
424  collide_bool_func_t func =
425 matr_primitive.getSolverBoolFunction(obst_1->getCollisionObjectType(),
426 obst_2->getCollisionObjectType()); if (!func)
427  {
428  return -1;
429  }
430  func(*obst_1, *obst_2, res, req);
431  if (res.collides())
432  return 0;
433  }
434  return 0;
435 }
436 */
437 
438 } // namespace solverPrimitive
439 /*
440 
441 CollisionFunctionMatrix::CollisionFunctionMatrix(const solvers::PrimitiveSolver*
442 solver)
443 {
444  memset(m_collide_bool_function, 0,
445 COL_OBJECT_TYPES_COUNT*COL_OBJECT_TYPES_COUNT);
446  m_collide_bool_function[OBJ_TYPE_AABB_BOX][OBJ_TYPE_AABB_BOX] =
447 solvers::solverPrimitive::collide_aabb_aabb;
448  m_collide_bool_function[OBJ_TYPE_AABB_BOX][OBJ_TYPE_OBB_BOX] =
449 solvers::solverPrimitive::collide_aabb_obb;
450  m_collide_bool_function[OBJ_TYPE_AABB_BOX][OBJ_TYPE_SPHERE] =
451 solvers::solverPrimitive::collide_aabb_sphere;
452  m_collide_bool_function[OBJ_TYPE_AABB_BOX][OBJ_TYPE_TRIANGLE] =
453 solvers::solverPrimitive::collide_aabb_triangle;
454  m_collide_bool_function[OBJ_TYPE_AABB_BOX][OBJ_TYPE_POINT] =
455 solvers::solverPrimitive::collide_aabb_point;
456  m_collide_bool_function[OBJ_TYPE_AABB_BOX][OBJ_TYPE_POLYGON] =
457 solvers::solverPrimitive::collide_obj_polygon;
458  m_collide_bool_function[OBJ_TYPE_AABB_BOX][OBJ_TYPE_SHAPEGROUP] =
459 solvers::solverPrimitive::collide_obj_shape_group;
460  m_collide_bool_function[OBJ_TYPE_AABB_BOX][OBJ_TYPE_TVOBSTACLE] =
461 solvers::solverPrimitive::collide_obj_tvobst;
462 
463  m_collide_bool_function[OBJ_TYPE_OBB_BOX][OBJ_TYPE_AABB_BOX] =
464 solvers::solverPrimitive::collide_obb_aabb;
465  m_collide_bool_function[OBJ_TYPE_OBB_BOX][OBJ_TYPE_OBB_BOX] =
466 solvers::solverPrimitive::collide_obb_obb;
467  m_collide_bool_function[OBJ_TYPE_OBB_BOX][OBJ_TYPE_SPHERE] =
468 solvers::solverPrimitive::collide_obb_sphere;
469  m_collide_bool_function[OBJ_TYPE_OBB_BOX][OBJ_TYPE_TRIANGLE] =
470 solvers::solverPrimitive::collide_obb_triangle;
471  m_collide_bool_function[OBJ_TYPE_OBB_BOX][OBJ_TYPE_POINT] =
472 solvers::solverPrimitive::collide_obb_point;
473  m_collide_bool_function[OBJ_TYPE_OBB_BOX][OBJ_TYPE_POLYGON] =
474 solvers::solverPrimitive::collide_obj_polygon;
475  m_collide_bool_function[OBJ_TYPE_OBB_BOX][OBJ_TYPE_SHAPEGROUP] =
476 solvers::solverPrimitive::collide_obj_shape_group;
477  m_collide_bool_function[OBJ_TYPE_OBB_BOX][OBJ_TYPE_TVOBSTACLE] =
478 solvers::solverPrimitive::collide_obj_tvobst;
479 
480  m_collide_bool_function[OBJ_TYPE_SPHERE][OBJ_TYPE_AABB_BOX] =
481 solvers::solverPrimitive::collide_sphere_aabb;
482  m_collide_bool_function[OBJ_TYPE_SPHERE][OBJ_TYPE_OBB_BOX] =
483 solvers::solverPrimitive::collide_sphere_obb;
484  m_collide_bool_function[OBJ_TYPE_SPHERE][OBJ_TYPE_SPHERE] =
485 solvers::solverPrimitive::collide_sphere_sphere;
486  m_collide_bool_function[OBJ_TYPE_SPHERE][OBJ_TYPE_TRIANGLE] =
487 solvers::solverPrimitive::collide_sphere_triangle;
488  m_collide_bool_function[OBJ_TYPE_SPHERE][OBJ_TYPE_POINT] =
489 solvers::solverPrimitive::collide_sphere_point;
490  m_collide_bool_function[OBJ_TYPE_SPHERE][OBJ_TYPE_POLYGON] =
491 solvers::solverPrimitive::collide_obj_polygon;
492  m_collide_bool_function[OBJ_TYPE_SPHERE][OBJ_TYPE_SHAPEGROUP] =
493 solvers::solverPrimitive::collide_obj_shape_group;
494  m_collide_bool_function[OBJ_TYPE_SPHERE][OBJ_TYPE_TVOBSTACLE] =
495 solvers::solverPrimitive::collide_obj_tvobst;
496 
497  m_collide_bool_function[OBJ_TYPE_TRIANGLE][OBJ_TYPE_AABB_BOX] =
498 solvers::solverPrimitive::collide_triangle_aabb;
499  m_collide_bool_function[OBJ_TYPE_TRIANGLE][OBJ_TYPE_OBB_BOX] =
500 solvers::solverPrimitive::collide_triangle_obb;
501  m_collide_bool_function[OBJ_TYPE_TRIANGLE][OBJ_TYPE_SPHERE] =
502 solvers::solverPrimitive::collide_triangle_sphere;
503  m_collide_bool_function[OBJ_TYPE_TRIANGLE][OBJ_TYPE_TRIANGLE] =
504 solvers::solverPrimitive::collide_triangle_triangle;
505  m_collide_bool_function[OBJ_TYPE_TRIANGLE][OBJ_TYPE_POINT] =
506 solvers::solverPrimitive::collide_triangle_point;
507  m_collide_bool_function[OBJ_TYPE_TRIANGLE][OBJ_TYPE_POLYGON] =
508 solvers::solverPrimitive::collide_obj_polygon;
509  m_collide_bool_function[OBJ_TYPE_TRIANGLE][OBJ_TYPE_SHAPEGROUP] =
510 solvers::solverPrimitive::collide_obj_shape_group;
511  m_collide_bool_function[OBJ_TYPE_TRIANGLE][OBJ_TYPE_TVOBSTACLE] =
512 solvers::solverPrimitive::collide_obj_tvobst;
513 
514  m_collide_bool_function[OBJ_TYPE_POINT][OBJ_TYPE_AABB_BOX] =
515 solvers::solverPrimitive::collide_point_aabb;
516  m_collide_bool_function[OBJ_TYPE_POINT][OBJ_TYPE_OBB_BOX] =
517 solvers::solverPrimitive::collide_point_obb;
518  m_collide_bool_function[OBJ_TYPE_POINT][OBJ_TYPE_SPHERE] =
519 solvers::solverPrimitive::collide_point_sphere;
520  m_collide_bool_function[OBJ_TYPE_POINT][OBJ_TYPE_TRIANGLE] =
521 solvers::solverPrimitive::collide_point_triangle;
522  m_collide_bool_function[OBJ_TYPE_POINT][OBJ_TYPE_POINT] =
523 solvers::solverPrimitive::collide_point_point;
524  m_collide_bool_function[OBJ_TYPE_POINT][OBJ_TYPE_POLYGON] =
525 solvers::solverPrimitive::collide_obj_polygon;
526  m_collide_bool_function[OBJ_TYPE_POINT][OBJ_TYPE_SHAPEGROUP] =
527 solvers::solverPrimitive::collide_obj_shape_group;
528  m_collide_bool_function[OBJ_TYPE_POINT][OBJ_TYPE_TVOBSTACLE] =
529 solvers::solverPrimitive::collide_obj_tvobst;
530 
531  m_collide_bool_function[OBJ_TYPE_POLYGON][OBJ_TYPE_AABB_BOX] =
532 solvers::solverPrimitive::collide_polygon_obj;
533  m_collide_bool_function[OBJ_TYPE_POLYGON][OBJ_TYPE_OBB_BOX] =
534 solvers::solverPrimitive::collide_polygon_obj;
535  m_collide_bool_function[OBJ_TYPE_POLYGON][OBJ_TYPE_SPHERE] =
536 solvers::solverPrimitive::collide_polygon_obj;
537  m_collide_bool_function[OBJ_TYPE_POLYGON][OBJ_TYPE_TRIANGLE] =
538 solvers::solverPrimitive::collide_polygon_obj;
539  m_collide_bool_function[OBJ_TYPE_POLYGON][OBJ_TYPE_POINT] =
540 solvers::solverPrimitive::collide_polygon_obj;
541  m_collide_bool_function[OBJ_TYPE_POLYGON][OBJ_TYPE_POLYGON] =
542 solvers::solverPrimitive::collide_polygon_polygon;
543  m_collide_bool_function[OBJ_TYPE_POLYGON][OBJ_TYPE_SHAPEGROUP] =
544 solvers::solverPrimitive::collide_obj_shape_group;
545  m_collide_bool_function[OBJ_TYPE_POLYGON][OBJ_TYPE_TVOBSTACLE] =
546 solvers::solverPrimitive::collide_obj_tvobst;
547 
548  m_collide_bool_function[OBJ_TYPE_SHAPEGROUP][OBJ_TYPE_AABB_BOX] =
549 solvers::solverPrimitive::collide_shape_group_obj;
550  m_collide_bool_function[OBJ_TYPE_SHAPEGROUP][OBJ_TYPE_OBB_BOX] =
551 solvers::solverPrimitive::collide_shape_group_obj;
552  m_collide_bool_function[OBJ_TYPE_SHAPEGROUP][OBJ_TYPE_SPHERE] =
553 solvers::solverPrimitive::collide_shape_group_obj;
554  m_collide_bool_function[OBJ_TYPE_SHAPEGROUP][OBJ_TYPE_TRIANGLE] =
555 solvers::solverPrimitive::collide_shape_group_obj;
556  m_collide_bool_function[OBJ_TYPE_SHAPEGROUP][OBJ_TYPE_POINT] =
557 solvers::solverPrimitive::collide_shape_group_obj;
558  m_collide_bool_function[OBJ_TYPE_SHAPEGROUP][OBJ_TYPE_POLYGON] =
559 solvers::solverPrimitive::collide_shape_group_obj;
560  m_collide_bool_function[OBJ_TYPE_SHAPEGROUP][OBJ_TYPE_SHAPEGROUP] =
561 solvers::solverPrimitive::collide_shape_group_shape_group;
562  m_collide_bool_function[OBJ_TYPE_SHAPEGROUP][OBJ_TYPE_TVOBSTACLE] =
563 solvers::solverPrimitive::collide_obj_tvobst;
564 
565  m_collide_bool_function[OBJ_TYPE_SHAPEGROUP][OBJ_TYPE_AABB_BOX] =
566 solvers::solverPrimitive::collide_shape_group_obj;
567  m_collide_bool_function[OBJ_TYPE_SHAPEGROUP][OBJ_TYPE_OBB_BOX] =
568 solvers::solverPrimitive::collide_shape_group_obj;
569  m_collide_bool_function[OBJ_TYPE_SHAPEGROUP][OBJ_TYPE_SPHERE] =
570 solvers::solverPrimitive::collide_shape_group_obj;
571  m_collide_bool_function[OBJ_TYPE_SHAPEGROUP][OBJ_TYPE_TRIANGLE] =
572 solvers::solverPrimitive::collide_shape_group_obj;
573  m_collide_bool_function[OBJ_TYPE_SHAPEGROUP][OBJ_TYPE_POINT] =
574 solvers::solverPrimitive::collide_shape_group_obj;
575  m_collide_bool_function[OBJ_TYPE_SHAPEGROUP][OBJ_TYPE_POLYGON] =
576 solvers::solverPrimitive::collide_shape_group_obj;
577  m_collide_bool_function[OBJ_TYPE_SHAPEGROUP][OBJ_TYPE_SHAPEGROUP] =
578 solvers::solverPrimitive::collide_shape_group_shape_group;
579  m_collide_bool_function[OBJ_TYPE_SHAPEGROUP][OBJ_TYPE_TVOBSTACLE] =
580 solvers::solverPrimitive::collide_obj_tvobst;
581 
582  m_collide_bool_function[OBJ_TYPE_TVOBSTACLE][OBJ_TYPE_AABB_BOX] =
583 solvers::solverPrimitive::collide_tvobst_obj;
584  m_collide_bool_function[OBJ_TYPE_TVOBSTACLE][OBJ_TYPE_OBB_BOX] =
585 solvers::solverPrimitive::collide_tvobst_obj;
586  m_collide_bool_function[OBJ_TYPE_TVOBSTACLE][OBJ_TYPE_SPHERE] =
587 solvers::solverPrimitive::collide_tvobst_obj;
588  m_collide_bool_function[OBJ_TYPE_TVOBSTACLE][OBJ_TYPE_TRIANGLE] =
589 solvers::solverPrimitive::collide_tvobst_obj;
590  m_collide_bool_function[OBJ_TYPE_TVOBSTACLE][OBJ_TYPE_POINT] =
591 solvers::solverPrimitive::collide_tvobst_obj;
592  m_collide_bool_function[OBJ_TYPE_TVOBSTACLE][OBJ_TYPE_POLYGON] =
593 solvers::solverPrimitive::collide_tvobst_obj;
594  m_collide_bool_function[OBJ_TYPE_TVOBSTACLE][OBJ_TYPE_SHAPEGROUP] =
595 solvers::solverPrimitive::collide_tvobst_obj;
596  m_collide_bool_function[OBJ_TYPE_TVOBSTACLE][OBJ_TYPE_TVOBSTACLE] =
597 solvers::solverPrimitive::collide_tvobst_tvobst;
598 }
599 */
600 } // namespace solvers
601 } // namespace collision
std::size_t collide_point_aabb(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
std::size_t collide_sphere_triangle(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
std::size_t collide_sphere_point(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
std::size_t collide_triangle_obb(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
std::size_t collide_sphere_sphere(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
std::size_t collide_triangle_point(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
std::size_t collide_sphere_obb(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
std::size_t collide_aabb_aabb(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
std::size_t collide_aabb_obb(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
std::size_t collide_point_triangle(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
std::size_t collide_point_obb(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
std::size_t collide_obb_obb(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
std::size_t collide_obb_aabb(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
Universal structure specifying collision request properties.
std::size_t collide_aabb_triangle(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
std::size_t collide_point_sphere(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
std::size_t collide_obb_point(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
virtual CollisionObjectType getCollisionObjectType() const
std::size_t collide_triangle_aabb(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
std::size_t collide_point_point(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
std::size_t collide_triangle_triangle(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
bool collisionDetection(const Point &point_first, const Point &point_second)
std::size_t collide_sphere_aabb(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
std::size_t collide_aabb_point(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
std::size_t collide_obb_sphere(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
std::size_t collide_triangle_sphere(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
Base class for CollisionObjects and some of their groups.
std::size_t collide_obb_triangle(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
std::size_t collide_aabb_sphere(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
Structure holding result for a collision request.
int not_implemented_error(const CollisionObject &obj1, const CollisionObject &obj2, const char *solver_name)