iMSTK
Interactive Medical Simulation Toolkit
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
imstk::CollisionDetectionAlgorithm Class Referenceabstract

Base class for all collision detection classes. CollisionDetection classes produce CollisionData between two geometries A and B. CollisionData has two sides. That is, the contact information to resolve collision for geometry A and the contact info to resolve geometry B. More...

#include <imstkCollisionDetectionAlgorithm.h>

Inheritance diagram for imstk::CollisionDetectionAlgorithm:
Inheritance graph
[legend]
Collaboration diagram for imstk::CollisionDetectionAlgorithm:
Collaboration graph
[legend]

Public Member Functions

virtual const std::string getTypeName () const =0
 Returns collision detection type string name.
 
const std::shared_ptr< CollisionDatagetCollisionData () const
 Returns output collision data.
 
const std::shared_ptr< CollisionDatagetCollisionData (int i) const
 
const std::shared_ptr< std::vector< std::shared_ptr< CollisionData > > > & getCollisionDataVector () const
 
size_t getCollisionDataVectorSize () const
 
void setGenerateCD (const bool generateA, const bool generateB)
 If generateA is false, CD data will not be generated for input0,A Similarly, if generateB is false, CD data will not be generated for input1,B.
 
void setInputGeometryA (std::shared_ptr< Geometry > geometryA)
 
void setInputGeometryB (std::shared_ptr< Geometry > geometryB)
 
- Public Member Functions inherited from imstk::GeometryAlgorithm
std::shared_ptr< GeometrygetInput (size_t port=0) const
 Returns input geometry given port, returns nullptr if doesn't exist.
 
std::shared_ptr< GeometrygetOutput (size_t port=0) const
 Returns output geometry given port, returns nullptr if doesn't exist.
 
void setInput (std::shared_ptr< Geometry > inputGeometry, size_t port=0)
 Set the input at the port.
 
void update ()
 Do the actual algorithm.
 

Protected Member Functions

virtual bool areInputsValid () override
 Check inputs are correct (always works reversibly) More...
 
virtual void requestUpdate () override
 Compute the collision data.
 
virtual void computeCollisionDataAB (std::shared_ptr< Geometry > geomA, std::shared_ptr< Geometry > geomB, std::vector< CollisionElement > &elementsA, std::vector< CollisionElement > &elementsB)
 Compute collision data for both sides at once, default implementation just calls computeCollisionDataA and computeCollisionDataB.
 
virtual void computeCollisionDataA (std::shared_ptr< Geometry > imstkNotUsed(geomA), std::shared_ptr< Geometry > imstkNotUsed(geomB), std::vector< CollisionElement > &imstkNotUsed(elementsA))
 Compute collision data for side A (implement as if flip=true)
 
virtual void computeCollisionDataB (std::shared_ptr< Geometry > imstkNotUsed(geomA), std::shared_ptr< Geometry > imstkNotUsed(geomB), std::vector< CollisionElement > &imstkNotUsed(elementsB))
 Compute collision data for side B (implement as if flip=true)
 
- Protected Member Functions inherited from imstk::GeometryAlgorithm
void setOutput (std::shared_ptr< Geometry > inputGeometry, const size_t port=0)
 Set the output at the port.
 
template<typename T >
void setRequiredInputType (const size_t port)
 Declares the type for the port with the given number, also defines that the give port is required for the filter to run correctly.
 
template<typename T >
void setOptionalInputType (const size_t port)
 Declares the type for the port with the given number, the data for this port is optional and may be omitted.
 
void setNumInputPorts (const size_t numPorts)
 Get/Set the amount of input ports.
 
 imstkGetMacro (NumInputPorts, size_t)
 
void setNumOutputPorts (const size_t numPorts)
 Get/Set the amount of output ports.
 
 imstkGetMacro (NumOutputPorts, size_t)
 

Protected Attributes

std::shared_ptr< std::vector< std::shared_ptr< CollisionData > > > m_collisionDataVector
 
bool m_flipOutput = false
 
bool m_generateCD_A = true
 
bool m_generateCD_B = true
 
bool m_computeColDataAImplemented = true
 
bool m_computeColDataBImplemented = true
 
- Protected Attributes inherited from imstk::GeometryAlgorithm
TypeCheckContainer m_requiredTypeChecks
 
TypeCheckContainer m_optionalTypeChecks
 

Additional Inherited Members

- Protected Types inherited from imstk::GeometryAlgorithm
using GeometryCheck = std::function< bool(Geometry *)>
 
using TypeCheckContainer = std::unordered_map< size_t, GeometryCheck >
 

Detailed Description

Base class for all collision detection classes. CollisionDetection classes produce CollisionData between two geometries A and B. CollisionData has two sides. That is, the contact information to resolve collision for geometry A and the contact info to resolve geometry B.

Subclassed algorithms may produce A, B, or both. To implement, one should implement computeCollisionDataAB, or computeCollisionDataA and computeCollisionDataB. If A or B is not implemented, AB will be called. If AB is not implemented, A and B will be called.

CollisionDetection::setGenerateCD(bool, bool) can be used to request sides. CD subclasses can provide defaults for this as well and not expect the user to touch it.

Definition at line 33 of file imstkCollisionDetectionAlgorithm.h.

Member Function Documentation

◆ areInputsValid()

bool imstk::CollisionDetectionAlgorithm::areInputsValid ( )
overrideprotectedvirtual

Check inputs are correct (always works reversibly)

Returns
true if all inputs match the requirements, false if not

Reimplemented from imstk::GeometryAlgorithm.

Reimplemented in imstk::CompoundCD.

Definition at line 22 of file imstkCollisionDetectionAlgorithm.cpp.

Here is the caller graph for this function:

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