iMSTK
Interactive Medical Simulation Toolkit
|
Base class for all Continuous Collision Detection (CCD) classes. A continuous collision detection algorithm typically requires geometries in two timesteps (previous, current) for continuous analysis between the two. CCDAlgorithm classes follow the same logic as CollisionDetectionAlgorithm. This base class for CCD algorithms enforces the implementation of a function (UpdatePreviousTimestepGeometry) to cache/store previous state of the colliding geometries. More...
#include <imstkCCDAlgorithm.h>
Public Member Functions | |
virtual void | updatePreviousTimestepGeometry (std::shared_ptr< const Geometry > geomA, std::shared_ptr< const Geometry > geomB)=0 |
Call with finalized geometries to be cached for reference when computing continuous collision in a future iteration. | |
![]() | |
virtual const std::string | getTypeName () const =0 |
Returns collision detection type string name. | |
const std::shared_ptr< CollisionData > | getCollisionData () const |
Returns output collision data. | |
const std::shared_ptr< CollisionData > | getCollisionData (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) |
![]() | |
std::shared_ptr< Geometry > | getInput (size_t port=0) const |
Returns input geometry given port, returns nullptr if doesn't exist. | |
std::shared_ptr< Geometry > | getOutput (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. | |
Additional Inherited Members | |
![]() | |
using | GeometryCheck = std::function< bool(Geometry *)> |
using | TypeCheckContainer = std::unordered_map< size_t, GeometryCheck > |
![]() | |
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) | |
![]() | |
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) | |
![]() | |
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 |
![]() | |
TypeCheckContainer | m_requiredTypeChecks |
TypeCheckContainer | m_optionalTypeChecks |
Base class for all Continuous Collision Detection (CCD) classes. A continuous collision detection algorithm typically requires geometries in two timesteps (previous, current) for continuous analysis between the two. CCDAlgorithm classes follow the same logic as CollisionDetectionAlgorithm. This base class for CCD algorithms enforces the implementation of a function (UpdatePreviousTimestepGeometry) to cache/store previous state of the colliding geometries.
Definition at line 26 of file imstkCCDAlgorithm.h.