VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions
DtCollisionDetector Class Reference

The DtCollisionDetector is a class used to detect collisions between a specified list of obstructions, by feature type (defined in appdata/settings/featureconfig.txt) and by DtSimObject obstruction IDs, and a specified Dt3dBoundingVolume. This class is used by the DtObstructionSensor to determine potential collisions (with the specified obstructions).

General operation: The collision detector is initialized

Public Types

typedef std::set< DtObjectTypeDtObjectObstructionIDContainer
 
typedef std::vector< const
DtSimObject * > 
DtObjectObstructionContainer
 
typedef std::list< DtRwStringDtFeatureTypeContainer
 

Public Member Functions

 DtCollisionDetector (const DtSimulationServices *simServices)
 
virtual ~DtCollisionDetector ()
 
virtual void setObjectToIgnore (const DtSimObject *vrfObject)
 
virtual bool detectPotentialCollision (const Dt3dBoundingVolume &collisionBv, const DtVector &localPosition, const DtDcm &bvOrientation, DtCollision *&potentialCollision)
 
virtual bool detectAllEntityCollisions (const Dt3dBoundingVolume &collisionBv, const DtVector &localPosition, const DtDcm &bvOrientation, std::list< DtBoost::shared_ptr< DtEntityCollision > > &collisionList)
 
virtual bool getObjectObstructions (DtObjectObstructionContainer &objectObstructions) const
 
virtual bool getObjectObstructions (Dt3dBoundingVolume &boundingVolume, const DtVector &bvLocation, const DtDcm &bvOrientation, DtObjectObstructionContainer &objectObstructions) const
 
virtual bool vrfObjectObstructionPredicate (const DtSimObject &vrfObjectToTest) const
 
virtual bool checkForCollision (const Dt3dBoundingVolume &collisionBV, DtCollision &potentialCollision, const DtVector &localPosition, const DtDcm &bvOrientation) const
 
virtual void addObjectObstructionID (const DtObjectType &objectObstructionType)
 
virtual void removeObjectObstructionID (const DtObjectType &objectObstructionType)
 
virtual void setObjectObstructionIDs (const DtObjectObstructionIDContainer &objectTypes)
 
virtual void setFeatureObstructionTypes (const DtFeatureTypeContainer &featureTypes)
 

Protected Member Functions

bool detectNewClosestCollision (const Dt3dBoundingVolume &collisionBV, DtCollision *&potentialCollision, const DtVector &localPosition, const DtDcm &bvOrientation) const
 
bool detectObjectCollision (const Dt3dBoundingVolume &collisionBV, DtCollisionProcessor< DtEntityCollision > &collisionProcessor, const DtVector &localPosition, const DtDcm &bvOrientation) const
 
bool detectFeatureCollision (const Dt3dBoundingVolume &collisionBV, DtCollisionProcessor< DtFeatureCollision > &, const DtVector &localPosition, const DtDcm &bvOrientation) const
 
DtCollisionprimaryCollision (DtCollision *firstCollision, DtCollision *secondCollision) const
 
bool testInvariant () const
 

Protected Attributes

DtObjectObstructionIDContainer myObjectObstructionTypes
 
const DtSimulationServicesmySimulationServices
 
DtFeatureTypeContainer myObstructionTypes
 
boost::shared_ptr
< MAKVRinTerra::DtAreaFeatureSet::List
myObstructions
 
const DtSimObjectmyObjectToIgnore
 

Private Member Functions

 DtCollisionDetector (const DtCollisionDetector &orig)
 
DtCollisionDetectoroperator= (const DtCollisionDetector &orig)
 

Member Typedef Documentation

Constructor & Destructor Documentation

DtCollisionDetector::DtCollisionDetector ( const DtSimulationServices simServices)

constructor

virtual DtCollisionDetector::~DtCollisionDetector ( )
virtual

destructor

DtCollisionDetector::DtCollisionDetector ( const DtCollisionDetector orig)
private

copy constructor; not implemented

Member Function Documentation

DtCollisionDetector& DtCollisionDetector::operator= ( const DtCollisionDetector orig)
private

assignment operator; not implemented

virtual void DtCollisionDetector::setObjectToIgnore ( const DtSimObject vrfObject)
virtual
virtual void DtCollisionDetector::addObjectObstructionID ( const DtObjectType objectObstructionType)
virtual

Add/Remove the specified obstruction types. (ID is a misnomer.)

virtual void DtCollisionDetector::removeObjectObstructionID ( const DtObjectType objectObstructionType)
virtual

Add/Remove the specified obstruction types. (ID is a misnomer.)

virtual void DtCollisionDetector::setObjectObstructionIDs ( const DtObjectObstructionIDContainer objectTypes)
virtual

Clears and sets IDs to the specified list.

virtual void DtCollisionDetector::setFeatureObstructionTypes ( const DtFeatureTypeContainer featureTypes)
virtual

Clears and sets types to the specified list.

virtual bool DtCollisionDetector::detectPotentialCollision ( const Dt3dBoundingVolume &  collisionBv,
const DtVector localPosition,
const DtDcm &  bvOrientation,
DtCollision *&  potentialCollision 
)
virtual

Calculates the closest potential collision among all the defined obstructions in the scene.

Parameters
potentialCollisionAn assumed to be empty DtCollision object which will contain the closest potential collision data if one is detected.
Returns
A boolean indicating the presence of a collision or not. Returns true if a collision is detected. False otherwise.
See Also
getObstructions()
checkEntityForCollision()
virtual bool DtCollisionDetector::detectAllEntityCollisions ( const Dt3dBoundingVolume &  collisionBv,
const DtVector localPosition,
const DtDcm &  bvOrientation,
std::list< DtBoost::shared_ptr< DtEntityCollision > > &  collisionList 
)
virtual

Finds all the entities within the provided collisionBv. Caller is responsible for deleting collision item returned on the list.

virtual bool DtCollisionDetector::getObjectObstructions ( DtObjectObstructionContainer objectObstructions) const
virtual

Requests, from the Object Manager, pointers to all of the DtSimObject types that have been specified as obstructions. If the version of the function that takes a bounding volume as a parameter, then the set of returned vrfObjects will contain at least all of the vrfObjects whose extents intersect the extent of the specified bounding volume (in the database CS).

Parameters
objectObstructionsUsed as a container of the pointers to the DtSimObject obstructions.
boundingVolumeThe volume of interest.
bvLocationThe location, in the reference CS (database CS) of the bv.
bvOrientationThe orientation of the bv.
Returns
A boolean indicating success or failure in getting the DtSimObject pointers.
Note
The set of DtVrfObject pointers is guaranteed to have all DtSimObjects that lie within the bounding volume, but may also contain elements that lie outside.
virtual bool DtCollisionDetector::getObjectObstructions ( Dt3dBoundingVolume &  boundingVolume,
const DtVector bvLocation,
const DtDcm &  bvOrientation,
DtObjectObstructionContainer objectObstructions 
) const
virtual
virtual bool DtCollisionDetector::vrfObjectObstructionPredicate ( const DtSimObject vrfObjectToTest) const
virtual

This function is used to filter out vrfObjects that are not appropriate for some reason. For example, this function currently screens out vrfObjects that are not of one of the specified object types, or if the vrfObjects is attached to the collision detector's entity. (you can collide with yourself in our current system).

Returns
A boolean indicating whether or not the vrfObject is worth testing for a collision.
See Also
detectObjectCollision
virtual bool DtCollisionDetector::checkForCollision ( const Dt3dBoundingVolume &  collisionBV,
DtCollision potentialCollision,
const DtVector localPosition,
const DtDcm &  bvOrientation 
) const
virtual

Determines if the specified entities collide or not.

Parameters
potentialCollideeA vrfObject to test for collisions.
Returns
A boolean specifying whether or not there was a collision.
Parameters
localPosition,ifnot 0, 0, 0, will use that position rather than entity position NOTE that false will also be returned when the test could not be done, such as if the potential collidee did not have a state repository.
bool DtCollisionDetector::detectNewClosestCollision ( const Dt3dBoundingVolume &  collisionBV,
DtCollision *&  potentialCollision,
const DtVector localPosition,
const DtDcm &  bvOrientation 
) const
protected

Determines if the entity is potentially or currently colliding with any obstructions.

Parameters
localPosition,ifnot 0, 0, 0, will use that position rather than entity position
Returns
a boolean signifying success or failure in detecting the collision.
Note
if a new collision is detected, it is stored in the myPotentialCollision object.
bool DtCollisionDetector::detectObjectCollision ( const Dt3dBoundingVolume &  collisionBV,
DtCollisionProcessor< DtEntityCollision > &  collisionProcessor,
const DtVector localPosition,
const DtDcm &  bvOrientation 
) const
protected

Determines if the entity is potentially or currently colliding with any obstructions of the specified types.

Parameters
DtEntityCollisionthe "best" (closest currently) object collision if any.
DtFeatureObstructionCollisionthe "best" (closest currently) feature obstruction collision if any.
localPosition,ifnot 0, 0, 0, will use that position rather than entity position
See Also
detectNewCollision
Returns
a boolean signifying success or failure in detecting the collision.
bool DtCollisionDetector::detectFeatureCollision ( const Dt3dBoundingVolume &  collisionBV,
DtCollisionProcessor< DtFeatureCollision > &  ,
const DtVector localPosition,
const DtDcm &  bvOrientation 
) const
protected
DtCollision* DtCollisionDetector::primaryCollision ( DtCollision firstCollision,
DtCollision secondCollision 
) const
protected
Returns
the "best" (closest currently) of the two specified collisions.
bool DtCollisionDetector::testInvariant ( ) const
protected
Returns
a boolean signifying whether the object's invariant is valid or not.

Member Data Documentation

DtObjectObstructionIDContainer DtCollisionDetector::myObjectObstructionTypes
protected

The object obstruction typess.

const DtSimulationServices* DtCollisionDetector::mySimulationServices
protected
DtFeatureTypeContainer DtCollisionDetector::myObstructionTypes
protected

Feature obstructions.

boost::shared_ptr<MAKVRinTerra::DtAreaFeatureSet::List> DtCollisionDetector::myObstructions
protected
const DtSimObject* DtCollisionDetector::myObjectToIgnore
protected

This object (if set) will not be reported as a collision. Typically, this is the object that the collisions are being found for.


The documentation for this class was generated from the following file:

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)