Collision Checker
collision_object_ex.cc
Go to the documentation of this file.
2 
8 
9 namespace collision {
10 
12  const collision::CollisionRequest &req) const {
13  CollisionResult res;
14  collision::collide_binary(*this, c, res, req);
15  return res.collides();
16 }
17 
19  SolverEntity_FCL *entity;
20  getSolverEntity(entity);
21  if (entity->getFclEntityType() ==
23  return (static_cast<FCLCollisionObject *>(entity))->BVCheck(obj2);
24  }
25  return true;
26 }
27 
28 std::shared_ptr<const collision::RectangleAABB> CollisionObjectEx::getAABB()
29  const {
30  SolverEntity_FCL *entity;
31  getSolverEntity(entity);
32  if (entity->getFclEntityType() ==
34  return (static_cast<FCLCollisionObject *>(entity))->getAABB();
35  }
36  std::cout
37  << "Returning bounding volume for complex shapes is not implemented";
38  throw;
39 }
40 
42  if (fcl_solver_entity_valid_) {
43  fcl_entity_->invalidateSolverEntityCache();
44  }
45  if (boost_solver_entity_valid_) {
46  boost_entity_->invalidateSolverEntityCache();
47  }
48 }
50  SolverEntity_FCL *cur_value = fcl_entity_.get();
51  if (fcl_solver_entity_valid_) {
52  ptr = cur_value;
53  return 0;
54  } else {
55  // FCL
56  fcl_entity_ =
57  std::move(std::unique_ptr<SolverEntity_FCL, SolverEntity_FCLDeleter>(
58  createFCLSolverEntity(this)));
59  fcl_solver_entity_valid_ = true;
60  ptr = fcl_entity_.get();
61  return 0;
62  }
63 }
65  SolverEntity_Boost *cur_value = boost_entity_.get();
66  if (boost_solver_entity_valid_) {
67  ptr = cur_value;
68  return 0;
69  } else {
70  // Boost
71  boost_entity_ = std::move(
72  std::unique_ptr<SolverEntity_Boost, SolverEntity_BoostDeleter>(
74  boost_solver_entity_valid_ = true;
75  ptr = boost_entity_.get();
76  return 0;
77  }
78 }
79 
80 } // namespace collision
SolverEntity_FCL * createFCLSolverEntity(const CollisionObjectEx *obj)
virtual bool BVCheck(CollisionObjectConstPtr obj2) const
std::shared_ptr< const CollisionObject > CollisionObjectConstPtr
std::size_t collide_binary(const CollisionObject &obj1, const CollisionObject &obj2, CollisionResult &res, const CollisionRequest &req)
virtual std::shared_ptr< const collision::RectangleAABB > getAABB() const
SolverEntity_Boost * createBoostSolverEntity(const CollisionObjectEx *obj)
virtual FCL_COLLISION_ENTITY_TYPE getFclEntityType(void) const
Universal structure specifying collision request properties.
virtual bool collide(const CollisionObject &c, const collision::CollisionRequest &req=CollisionRequest()) const
virtual int getSolverEntity(solvers::solverFCL::SolverEntity_FCL *&ptr) const
Base class for CollisionObjects and some of their groups.
Structure holding result for a collision request.