//============================================================================== bool DARTCollisionDetector::collide( CollisionGroup* group, const CollisionOption& option, CollisionResult& result) { result.clear(); if (this != group->getCollisionDetector().get()) { dterr << "[DARTCollisionDetector::detect] Attempting to check collision " << "for a collision group that is created from a different collision " << "detector instance.\n"; return false; } auto casted = static_cast<DARTCollisionGroup*>(group); const auto& objects = casted->mCollisionObjects; if (objects.empty()) return false; auto done = false; const auto& filter = option.collisionFilter; for (auto i = 0u; i < objects.size() - 1; ++i) { auto collObj1 = objects[i]; for (auto j = i + 1u; j < objects.size(); ++j) { auto collObj2 = objects[j]; if (filter && !filter->needCollision(collObj1, collObj2)) continue; checkPair(collObj1, collObj2, option, result); if ((option.binaryCheck && result.isCollision()) || (result.getNumContacts() >= option.maxNumContacts)) { done = true; break; } } if (done) break; } return result.isCollision(); }
bool CollisionRequest::isSatisfied(const CollisionResult& result) const { return (!enable_cost) && result.isCollision() && (num_max_contacts <= result.numContacts()); }