Simbody
Classes | Public Member Functions | Static Public Member Functions

SimTK::CollisionDetectionAlgorithm Class Reference

A CollisionDetectionAlgorithm implements an algorithm for detecting overlaps between pairs of ContactGeometry objects, and creating Contact objects based on them. More...

#include <CollisionDetectionAlgorithm.h>

Inheritance diagram for SimTK::CollisionDetectionAlgorithm:

List of all members.

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.

Detailed Description

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().


Constructor & Destructor Documentation

virtual SimTK::CollisionDetectionAlgorithm::~CollisionDetectionAlgorithm ( ) [inline, virtual]

Member Function Documentation

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.

Parameters:
index1the index of the first body within its contact set
object1the ContactGeometry for the first body
transform1the location and orientation of the first body in the ground frame
index2the index of the second body within its contact set
object2the ContactGeometry for the second body
transform2the location and orientation of the second body in the ground frame
contactsif 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.

Parameters:
type1the type identifier for the ContactGeometry subclass the algorithm expects as the first body
type2the type identifier for the ContactGeometry subclass the algorithm expects as the second body
algorithmthe 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.

Parameters:
typeIndex1the type index of the first body's ContactGeometry
typeIndex2the type index of the second body's ContactGeometry
Returns:
the CollisionDetectionAlgorithm to use, or NULL if no suitable algorithm has been registered

The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines