Tesseract
Motion Planning Environment
Loading...
Searching...
No Matches
Classes | Public Member Functions | Protected Member Functions | Protected Attributes | Private Attributes | List of all members
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm Class Reference

Supports collision between CompoundCollisionShapes and other collision shapes. More...

#include <tesseract_compound_collision_algorithm.h>

Inheritance diagram for tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm:
Inheritance graph
[legend]
Collaboration diagram for tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm:
Collaboration graph
[legend]

Classes

struct  CreateFunc
 
struct  SwappedCreateFunc
 

Public Member Functions

 TesseractCompoundCollisionAlgorithm (const btCollisionAlgorithmConstructionInfo &ci, const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, bool isSwapped)
 
 ~TesseractCompoundCollisionAlgorithm () override
 
 TesseractCompoundCollisionAlgorithm (const TesseractCompoundCollisionAlgorithm &)=default
 
TesseractCompoundCollisionAlgorithmoperator= (const TesseractCompoundCollisionAlgorithm &)=default
 
 TesseractCompoundCollisionAlgorithm (TesseractCompoundCollisionAlgorithm &&)=default
 
TesseractCompoundCollisionAlgorithmoperator= (TesseractCompoundCollisionAlgorithm &&)=default
 
btCollisionAlgorithm * getChildAlgorithm (int n) const
 
void processCollision (const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut) override
 
btScalar calculateTimeOfImpact (btCollisionObject *body0, btCollisionObject *body1, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut) override
 
void getAllContactManifolds (btManifoldArray &manifoldArray) override
 

Protected Member Functions

void removeChildAlgorithms ()
 
void preallocateChildAlgorithms (const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap)
 

Protected Attributes

btAlignedObjectArray< btCollisionAlgorithm * > m_childCollisionAlgorithms
 
bool m_isSwapped
 
class btPersistentManifold * m_sharedManifold
 
bool m_ownsManifold { false }
 
int m_compoundShapeRevision
 

Private Attributes

btNodeStack stack2
 
btManifoldArray manifoldArray
 

Detailed Description

Supports collision between CompoundCollisionShapes and other collision shapes.

The original implementation would check all collision objects before exiting the bvh of the compound shape. The original code had a callback, but it only passed in the collision shape and no the collision object which is where the user data is located. This was modifed to check if collision is done for the contact test type FIRST during the internal broadphase of the compound shapes and exit early.

Note: This could be removed in the future but the callback need to be modifed to accept the collision object along with the collision shape. I don't believe this will be an issue since all of the other callback in Bullet accept both.

Constructor & Destructor Documentation

◆ TesseractCompoundCollisionAlgorithm() [1/3]

tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::TesseractCompoundCollisionAlgorithm ( const btCollisionAlgorithmConstructionInfo &  ci,
const btCollisionObjectWrapper *  body0Wrap,
const btCollisionObjectWrapper *  body1Wrap,
bool  isSwapped 
)

◆ ~TesseractCompoundCollisionAlgorithm()

tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::~TesseractCompoundCollisionAlgorithm ( )
override

◆ TesseractCompoundCollisionAlgorithm() [2/3]

tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::TesseractCompoundCollisionAlgorithm ( const TesseractCompoundCollisionAlgorithm )
default

◆ TesseractCompoundCollisionAlgorithm() [3/3]

tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::TesseractCompoundCollisionAlgorithm ( TesseractCompoundCollisionAlgorithm &&  )
default

Member Function Documentation

◆ calculateTimeOfImpact()

btScalar tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::calculateTimeOfImpact ( btCollisionObject *  body0,
btCollisionObject *  body1,
const btDispatcherInfo &  dispatchInfo,
btManifoldResult *  resultOut 
)
override

◆ getAllContactManifolds()

void tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::getAllContactManifolds ( btManifoldArray &  manifoldArray)
inlineoverride

◆ getChildAlgorithm()

btCollisionAlgorithm * tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::getChildAlgorithm ( int  n) const
inline

◆ operator=() [1/2]

TesseractCompoundCollisionAlgorithm & tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::operator= ( const TesseractCompoundCollisionAlgorithm )
default

◆ operator=() [2/2]

TesseractCompoundCollisionAlgorithm & tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::operator= ( TesseractCompoundCollisionAlgorithm &&  )
default

◆ preallocateChildAlgorithms()

void tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::preallocateChildAlgorithms ( const btCollisionObjectWrapper *  body0Wrap,
const btCollisionObjectWrapper *  body1Wrap 
)
protected

◆ processCollision()

void tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::processCollision ( const btCollisionObjectWrapper *  body0Wrap,
const btCollisionObjectWrapper *  body1Wrap,
const btDispatcherInfo &  dispatchInfo,
btManifoldResult *  resultOut 
)
override

btCompoundShape might have changed: /make sure the internal child collision algorithm caches are still valid

clear and update all

we need to refresh all contact manifolds note that we should actually recursively traverse all children, btCompoundShape can nested more then 1 level deep so we should add a 'refreshManifolds' in the btCollisionAlgorithm

◆ removeChildAlgorithms()

void tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::removeChildAlgorithms ( )
protected

Member Data Documentation

◆ m_childCollisionAlgorithms

btAlignedObjectArray<btCollisionAlgorithm*> tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::m_childCollisionAlgorithms
protected

◆ m_compoundShapeRevision

int tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::m_compoundShapeRevision
protected

◆ m_isSwapped

bool tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::m_isSwapped
protected

◆ m_ownsManifold

bool tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::m_ownsManifold { false }
protected

◆ m_sharedManifold

class btPersistentManifold* tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::m_sharedManifold
protected

◆ manifoldArray

btManifoldArray tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::manifoldArray
private

◆ stack2

btNodeStack tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::stack2
private

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