From dd849d202aa6163423dfc32bee2a351a66128d65 Mon Sep 17 00:00:00 2001 From: isucan <isucan@253336fb-580f-4252-a368-f3cef5a2a82b> Date: Fri, 6 Jan 2012 20:52:54 +0000 Subject: [PATCH] add collision between broad phase managers git-svn-id: https://kforge.ros.org/fcl/fcl_ros@59 253336fb-580f-4252-a368-f3cef5a2a82b --- trunk/fcl/include/fcl/broad_phase_collision.h | 3 +++ trunk/fcl/src/broad_phase_collision.cpp | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/trunk/fcl/include/fcl/broad_phase_collision.h b/trunk/fcl/include/fcl/broad_phase_collision.h index b99359cb..b301b609 100644 --- a/trunk/fcl/include/fcl/broad_phase_collision.h +++ b/trunk/fcl/include/fcl/broad_phase_collision.h @@ -84,6 +84,9 @@ public: /** \brief perform collision test for the objects belonging to the manager (i.e., N^2 self collision) */ virtual void collide(void* cdata, CollisionCallBack callback) const = 0; + /** \brief perform collision test for all pairs of objects belonging to the \e other manager */ + virtual void collide(const BroadPhaseCollisionManager *other, void* cdata, CollisionCallBack callback) const; + /** \brief whether the manager is empty */ virtual bool empty() const = 0; diff --git a/trunk/fcl/src/broad_phase_collision.cpp b/trunk/fcl/src/broad_phase_collision.cpp index d259f0a2..5888f55c 100644 --- a/trunk/fcl/src/broad_phase_collision.cpp +++ b/trunk/fcl/src/broad_phase_collision.cpp @@ -69,6 +69,19 @@ bool defaultCollisionFunction(CollisionObject* o1, CollisionObject* o2, void* cd return cdata->done; } +void BroadPhaseCollisionManager::collide(const BroadPhaseCollisionManager *other, void* cdata, CollisionCallBack callback) const +{ + if (other->size() < size()) + other->collide(this, cdata, callback); + else + { + std::vector<CollisionObject*> objs; + getObjects(objs); + for (std::size_t i = 0 ; i < objs.size() ; ++i) + other->collide(objs[i], cdata, callback); + } +} + void NaiveCollisionManager::unregisterObject(CollisionObject* obj) { objs.remove(obj); -- GitLab