9 #include "imstkCollisionData.h" 10 #include "imstkGeometryAlgorithm.h" 49 inline const std::shared_ptr<CollisionData>
getCollisionData()
const {
return (*m_collisionDataVector)[0]; }
53 return m_collisionDataVector->size() > i ? m_collisionDataVector->at(i) :
nullptr;
56 inline const std::shared_ptr<std::vector<std::shared_ptr<CollisionData>>>& getCollisionDataVector()
const {
return m_collisionDataVector; }
58 inline size_t getCollisionDataVectorSize()
const 60 return m_collisionDataVector->size();
69 m_generateCD_A = generateA;
70 m_generateCD_B = generateB;
73 void setInputGeometryA(std::shared_ptr<Geometry> geometryA) {
setInput(geometryA, 0); }
75 void setInputGeometryB(std::shared_ptr<Geometry> geometryB) {
setInput(geometryB, 1); }
94 std::shared_ptr<Geometry> geomA,
95 std::shared_ptr<Geometry> geomB,
96 std::vector<CollisionElement>& elementsA,
97 std::vector<CollisionElement>& elementsB)
107 std::shared_ptr<Geometry> imstkNotUsed(geomA),
108 std::shared_ptr<Geometry> imstkNotUsed(geomB),
109 std::vector<CollisionElement>& imstkNotUsed(elementsA)) { m_computeColDataAImplemented =
false; }
115 std::shared_ptr<Geometry> imstkNotUsed(geomA),
116 std::shared_ptr<Geometry> imstkNotUsed(geomB),
117 std::vector<CollisionElement>& imstkNotUsed(elementsB)) { m_computeColDataBImplemented =
false; }
119 std::shared_ptr<std::vector<std::shared_ptr<CollisionData>>> m_collisionDataVector;
121 bool m_flipOutput =
false;
122 bool m_generateCD_A =
true;
123 bool m_generateCD_B =
true;
125 bool m_computeColDataAImplemented =
true;
126 bool m_computeColDataBImplemented =
true;
Base class for all collision detection classes. CollisionDetection classes produce CollisionData betw...
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...
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 bool areInputsValid() override
Check inputs are correct (always works reversibly)
virtual const std::string getTypeName() const =0
Returns collision detection type string name.
const std::shared_ptr< CollisionData > getCollisionData() const
Returns output collision data.
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)
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 computeCollisionData...
void setInput(std::shared_ptr< Geometry > inputGeometry, size_t port=0)
Set the input at the port.
virtual void requestUpdate() override
Compute the collision data.
Abstract base class for geometry algorithms. GeometryAlgorithms take N input geometries and produce N...