iMSTK
Interactive Medical Simulation Toolkit
imstkCollisionInteraction.h
1 /*
2 ** This file is part of the Interactive Medical Simulation Toolkit (iMSTK)
3 ** iMSTK is distributed under the Apache License, Version 2.0.
4 ** See accompanying NOTICE for details.
5 */
6 
7 #pragma once
8 
9 #include "imstkSceneObject.h"
10 
11 namespace imstk
12 {
13 class CollisionData;
14 class CollisionDetectionAlgorithm;
15 class CollisionHandling;
16 class CollidingObject;
17 
24 {
25 public:
26  ~CollisionInteraction() override = default;
27 
28 protected:
29  CollisionInteraction(std::string objName,
30  std::shared_ptr<CollidingObject> obj1,
31  std::shared_ptr<CollidingObject> obj2,
32  std::string cdType);
33 
34 public:
35  void setCollisionDetection(std::shared_ptr<CollisionDetectionAlgorithm> colDetect);
36 
40  void setCollisionHandlingA(std::shared_ptr<CollisionHandling> colHandlingA);
41 
45  void setCollisionHandlingB(std::shared_ptr<CollisionHandling> colHandlingB);
46 
50  void setCollisionHandlingAB(std::shared_ptr<CollisionHandling> colHandlingAB);
51 
52  std::shared_ptr<CollisionDetectionAlgorithm> getCollisionDetection() const { return m_colDetect; }
53  std::shared_ptr<CollisionHandling> getCollisionHandlingA() const { return m_colHandlingA; }
54  std::shared_ptr<CollisionHandling> getCollisionHandlingB() const { return m_colHandlingB; }
55  std::shared_ptr<CollisionHandling> getCollisionHandlingAB() const { return m_colHandlingA; }
56 
57  std::shared_ptr<TaskNode> getCollisionDetectionNode() const { return m_collisionDetectionNode; }
58  std::shared_ptr<TaskNode> getCollisionHandlingANode() const { return m_collisionHandleANode; }
59  std::shared_ptr<TaskNode> getCollisionHandlingBNode() const { return m_collisionHandleBNode; }
60 
61  void updateCollisionGeometry();
62 
66  virtual void setEnabled(const bool enabled);
67  virtual bool getEnabled() const;
69 
70  void visualUpdate() override;
71 
72 protected:
76  void updateCD();
77 
81  void updateCHA();
82 
86  void updateCHB();
87 
88  std::shared_ptr<CollidingObject> m_objA = nullptr;
89  std::shared_ptr<CollidingObject> m_objB = nullptr;
90 
91  std::shared_ptr<CollisionDetectionAlgorithm> m_colDetect = nullptr;
92  std::shared_ptr<CollisionHandling> m_colHandlingA = nullptr;
93  std::shared_ptr<CollisionHandling> m_colHandlingB = nullptr;
94 
95  std::shared_ptr<TaskNode> m_collisionDetectionNode = nullptr;
96  std::shared_ptr<TaskNode> m_collisionHandleANode = nullptr;
97  std::shared_ptr<TaskNode> m_collisionHandleBNode = nullptr;
98  std::shared_ptr<TaskNode> m_collisionGeometryUpdateNode = nullptr;
99 
100  bool m_didUpdateThisFrame = false;
101 };
102 } // namespace imstk
void setCollisionHandlingAB(std::shared_ptr< CollisionHandling > colHandlingAB)
Set the two-way Collision Handling for both objects.
void setCollisionHandlingB(std::shared_ptr< CollisionHandling > colHandlingB)
Set the Collision Handling for object B.
Compound Geometry.
std::shared_ptr< CollisionDetectionAlgorithm > m_colDetect
Collision detection algorithm.
Abstract class for defining collision interactions between objects.
Base class for all scene objects. A scene object can optionally be visible and collide with other sce...
void visualUpdate() override
Update the visuals, called before render.
void setCollisionHandlingA(std::shared_ptr< CollisionHandling > colHandlingA)
Set the Collision Handling for object A.
virtual void setEnabled(const bool enabled)
Enable or disable the interaction, when disabled the interaction isn&#39;t executed and no response will ...