Simbody
|
A CollisionDetectionAlgorithm implements an algorithm for detecting overlaps between pairs of ContactGeometry objects, and creating Contact objects based on them. More...
#include <CollisionDetectionAlgorithm.h>
Classes | |
struct | AlgorithmMap |
class | HalfSpaceEllipsoid |
This algorithm detects contacts between a ContactGeometry::HalfSpace and a ContactGeometry::Ellipsoid. More... | |
class | HalfSpaceSphere |
This algorithm detects contacts between a ContactGeometry::HalfSpace and a ContactGeometry::Sphere. More... | |
class | HalfSpaceTriangleMesh |
This algorithm detects contacts between a ContactGeometry::HalfSpace and a ContactGeometry::TriangleMesh. More... | |
class | SphereSphere |
This algorithm detects contacts between two ContactGeometry::Sphere objects. More... | |
class | SphereTriangleMesh |
This algorithm detects contacts between a ContactGeometry::Sphere and a ContactGeometry::TriangleMesh. More... | |
class | TriangleMeshTriangleMesh |
This algorithm detects contacts between two ContactGeometry::TriangleMesh objects. More... | |
Public Member Functions | |
virtual | ~CollisionDetectionAlgorithm () |
virtual void | processObjects (ContactSurfaceIndex index1, const ContactGeometry &object1, const Transform &transform1, ContactSurfaceIndex index2, const ContactGeometry &object2, const Transform &transform2, Array_< Contact > &contacts) const =0 |
Identify contacts between a pair of bodies. | |
Static Public Member Functions | |
static void | registerAlgorithm (const std::string &type1, const std::string &type2, CollisionDetectionAlgorithm *algorithm) |
Register a CollisionDetectionAlgorithm to be used for identifying contacts between bodies of two specific types. | |
static CollisionDetectionAlgorithm * | getAlgorithm (int typeIndex1, int typeIndex2) |
Get the CollisionDetectionAlgorithm to use for identifying contacts between bodies of two specific types. |
A CollisionDetectionAlgorithm implements an algorithm for detecting overlaps between pairs of ContactGeometry objects, and creating Contact objects based on them.
This class is used internally by GeneralContactSubsystem, and there usually is no reason to access it directly. The exception is if you are defining a new ContactGeometry subclass. In that case, you will also need to define one or more CollisionDetectionAlgorithms to detect collisions with your new geometry type, then register it calling registerAlgorithm().
virtual SimTK::CollisionDetectionAlgorithm::~CollisionDetectionAlgorithm | ( | ) | [inline, virtual] |
virtual void SimTK::CollisionDetectionAlgorithm::processObjects | ( | ContactSurfaceIndex | index1, |
const ContactGeometry & | object1, | ||
const Transform & | transform1, | ||
ContactSurfaceIndex | index2, | ||
const ContactGeometry & | object2, | ||
const Transform & | transform2, | ||
Array_< Contact > & | contacts | ||
) | const [pure virtual] |
Identify contacts between a pair of bodies.
index1 | the index of the first body within its contact set |
object1 | the ContactGeometry for the first body |
transform1 | the location and orientation of the first body in the ground frame |
index2 | the index of the second body within its contact set |
object2 | the ContactGeometry for the second body |
transform2 | the location and orientation of the second body in the ground frame |
contacts | if the bodies overlap, a Contact should be added to this for each distinct contact between them. (Multiple contacts may exist if one of the bodies is concave.) |
Implemented in SimTK::CollisionDetectionAlgorithm::HalfSpaceSphere, SimTK::CollisionDetectionAlgorithm::HalfSpaceEllipsoid, SimTK::CollisionDetectionAlgorithm::SphereSphere, SimTK::CollisionDetectionAlgorithm::HalfSpaceTriangleMesh, SimTK::CollisionDetectionAlgorithm::SphereTriangleMesh, and SimTK::CollisionDetectionAlgorithm::TriangleMeshTriangleMesh.
static void SimTK::CollisionDetectionAlgorithm::registerAlgorithm | ( | const std::string & | type1, |
const std::string & | type2, | ||
CollisionDetectionAlgorithm * | algorithm | ||
) | [static] |
Register a CollisionDetectionAlgorithm to be used for identifying contacts between bodies of two specific types.
type1 | the type identifier for the ContactGeometry subclass the algorithm expects as the first body |
type2 | the type identifier for the ContactGeometry subclass the algorithm expects as the second body |
algorithm | the algorithm to use for bodies of the specified types |
static CollisionDetectionAlgorithm* SimTK::CollisionDetectionAlgorithm::getAlgorithm | ( | int | typeIndex1, |
int | typeIndex2 | ||
) | [static] |
Get the CollisionDetectionAlgorithm to use for identifying contacts between bodies of two specific types.
typeIndex1 | the type index of the first body's ContactGeometry |
typeIndex2 | the type index of the second body's ContactGeometry |