tesseract_compound_collision_algorithm.h
Go to the documentation of this file.
1 /*
2 Bullet Continuous Collision Detection and Physics Library
3 Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
4 
5 This software is provided 'as-is', without any express or implied warranty.
6 In no event will the authors be held liable for any damages arising from the use of this software.
7 Permission is granted to anyone to use this software for any purpose,
8 including commercial applications, and to alter it and redistribute it freely,
9 subject to the following restrictions:
10 
11 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If
12 you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not
13 required.
14 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original
15 software.
16 3. This notice may not be removed or altered from any source distribution.
17 
18 */
19 #ifndef TESSERACT_COLLISION_TESSERACT_COMPOUND_COLLISION_ALGORITHM_H
20 #define TESSERACT_COLLISION_TESSERACT_COMPOUND_COLLISION_ALGORITHM_H
21 
24 #include <BulletCollision/BroadphaseCollision/btDispatcher.h>
25 #include <BulletCollision/BroadphaseCollision/btBroadphaseInterface.h>
26 #include <BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.h>
27 #include <BulletCollision/NarrowPhaseCollision/btPersistentManifold.h>
28 #include <BulletCollision/BroadphaseCollision/btBroadphaseProxy.h>
29 #include <BulletCollision/CollisionDispatch/btCollisionCreateFunc.h>
30 #include <LinearMath/btAlignedObjectArray.h>
31 #include <BulletCollision/BroadphaseCollision/btDbvt.h>
33 
34 class btCollisionObject;
35 class btCollisionShape;
36 
37 // LCOV_EXCL_START
39 {
52 class TesseractCompoundCollisionAlgorithm : public btActivatingCollisionAlgorithm // NOLINT
53 {
54  btNodeStack stack2;
55  btManifoldArray manifoldArray;
56 
57 protected:
58  btAlignedObjectArray<btCollisionAlgorithm*> m_childCollisionAlgorithms;
60 
61  class btPersistentManifold* m_sharedManifold;
62  bool m_ownsManifold{ false };
63 
64  int m_compoundShapeRevision; // to keep track of changes, so that childAlgorithm array can be updated
65 
66  void removeChildAlgorithms();
67 
68  void preallocateChildAlgorithms(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap);
69 
70 public:
71  TesseractCompoundCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci,
72  const btCollisionObjectWrapper* body0Wrap,
73  const btCollisionObjectWrapper* body1Wrap,
74  bool isSwapped);
75 
81 
82  btCollisionAlgorithm* getChildAlgorithm(int n) const { return m_childCollisionAlgorithms[n]; }
83 
84  void processCollision(const btCollisionObjectWrapper* body0Wrap,
85  const btCollisionObjectWrapper* body1Wrap,
86  const btDispatcherInfo& dispatchInfo,
87  btManifoldResult* resultOut) override;
88 
89  btScalar calculateTimeOfImpact(btCollisionObject* body0,
90  btCollisionObject* body1,
91  const btDispatcherInfo& dispatchInfo,
92  btManifoldResult* resultOut) override;
93 
94  void getAllContactManifolds(btManifoldArray& manifoldArray) override
95  {
96  for (int i = 0; i < m_childCollisionAlgorithms.size(); i++)
97  {
98  if (m_childCollisionAlgorithms[i] != nullptr)
99  m_childCollisionAlgorithms[i]->getAllContactManifolds(manifoldArray);
100  }
101  }
102 
103  struct CreateFunc : public btCollisionAlgorithmCreateFunc
104  {
105  btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci,
106  const btCollisionObjectWrapper* body0Wrap,
107  const btCollisionObjectWrapper* body1Wrap) override
108  {
109  void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(TesseractCompoundCollisionAlgorithm));
110  return new (mem) TesseractCompoundCollisionAlgorithm(ci, body0Wrap, body1Wrap, false); // NOLINT
111  }
112  };
113 
114  struct SwappedCreateFunc : public btCollisionAlgorithmCreateFunc
115  {
116  btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci,
117  const btCollisionObjectWrapper* body0Wrap,
118  const btCollisionObjectWrapper* body1Wrap) override
119  {
120  void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(TesseractCompoundCollisionAlgorithm));
121  return new (mem) TesseractCompoundCollisionAlgorithm(ci, body0Wrap, body1Wrap, true); // NOLINT
122  }
123  };
124 };
125 } // namespace tesseract_collision::tesseract_collision_bullet
126 // LCOV_EXCL_STOP
127 #endif // TESSERACT_COLLISION_TESSERACT_COMPOUND_COLLISION_ALGORITHM_H
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::~TesseractCompoundCollisionAlgorithm
~TesseractCompoundCollisionAlgorithm() override
Definition: tesseract_compound_collision_algorithm.cpp:105
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::getChildAlgorithm
btCollisionAlgorithm * getChildAlgorithm(int n) const
Definition: tesseract_compound_collision_algorithm.h:82
tesseract_collision::tesseract_collision_bullet
Definition: bullet_cast_bvh_manager.h:48
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::m_ownsManifold
bool m_ownsManifold
Definition: tesseract_compound_collision_algorithm.h:62
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::removeChildAlgorithms
void removeChildAlgorithms()
Definition: tesseract_compound_collision_algorithm.cpp:92
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::calculateTimeOfImpact
btScalar calculateTimeOfImpact(btCollisionObject *body0, btCollisionObject *body1, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut) override
Definition: tesseract_compound_collision_algorithm.cpp:393
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
#define TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::m_childCollisionAlgorithms
btAlignedObjectArray< btCollisionAlgorithm * > m_childCollisionAlgorithms
Definition: tesseract_compound_collision_algorithm.h:58
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::preallocateChildAlgorithms
void preallocateChildAlgorithms(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap)
Definition: tesseract_compound_collision_algorithm.cpp:55
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::m_compoundShapeRevision
int m_compoundShapeRevision
Definition: tesseract_compound_collision_algorithm.h:64
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::SwappedCreateFunc
Definition: tesseract_compound_collision_algorithm.h:114
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::manifoldArray
btManifoldArray manifoldArray
Definition: tesseract_compound_collision_algorithm.h:55
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::TesseractCompoundCollisionAlgorithm
TesseractCompoundCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo &ci, const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, bool isSwapped)
Definition: tesseract_compound_collision_algorithm.cpp:40
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::getAllContactManifolds
void getAllContactManifolds(btManifoldArray &manifoldArray) override
Definition: tesseract_compound_collision_algorithm.h:94
TESSERACT_COMMON_IGNORE_WARNINGS_POP
Definition: create_convex_hull.cpp:37
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::CreateFunc::CreateCollisionAlgorithm
btCollisionAlgorithm * CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo &ci, const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap) override
Definition: tesseract_compound_collision_algorithm.h:105
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::stack2
btNodeStack stack2
Definition: tesseract_compound_collision_algorithm.h:54
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::operator=
TesseractCompoundCollisionAlgorithm & operator=(const TesseractCompoundCollisionAlgorithm &)=default
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::CreateFunc
Definition: tesseract_compound_collision_algorithm.h:103
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::m_isSwapped
bool m_isSwapped
Definition: tesseract_compound_collision_algorithm.h:59
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::processCollision
void processCollision(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut) override
Definition: tesseract_compound_collision_algorithm.cpp:271
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::m_sharedManifold
class btPersistentManifold * m_sharedManifold
Definition: tesseract_compound_collision_algorithm.h:61
macros.h
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::SwappedCreateFunc::CreateCollisionAlgorithm
btCollisionAlgorithm * CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo &ci, const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap) override
Definition: tesseract_compound_collision_algorithm.h:116
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm
Supports collision between CompoundCollisionShapes and other collision shapes.
Definition: tesseract_compound_collision_algorithm.h:52


tesseract_collision
Author(s): Levi Armstrong
autogenerated on Sun May 18 2025 03:01:52