tesseract_convex_convex_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 #ifndef TESSERACT_COLLISION_TESSERACT_CONVEX_CONVEX_ALGORITHM_H
19 #define TESSERACT_COLLISION_TESSERACT_CONVEX_CONVEX_ALGORITHM_H
20 
23 #include <BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.h>
24 #include <BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h>
25 #include <BulletCollision/NarrowPhaseCollision/btPersistentManifold.h>
26 #include <BulletCollision/BroadphaseCollision/btBroadphaseProxy.h>
27 #include <BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h>
28 #include <BulletCollision/CollisionDispatch/btCollisionCreateFunc.h>
29 #include <BulletCollision/CollisionDispatch/btCollisionDispatcher.h>
30 #include <LinearMath/btTransformUtil.h> //for btConvexSeparatingDistanceUtil
31 #include <BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.h>
33 
35 
36 class btConvexPenetrationDepthSolver;
37 
38 // LCOV_EXCL_START
40 {
45 
46 //#define USE_SEPDISTANCE_UTIL2 1
47 
52 
65 class TesseractConvexConvexAlgorithm : public btActivatingCollisionAlgorithm
66 {
67 #ifdef USE_SEPDISTANCE_UTIL2
68  btConvexSeparatingDistanceUtil m_sepDistance;
69 #endif
70  btConvexPenetrationDepthSolver* m_pdSolver;
71 
72  btVertexArray worldVertsB1;
73  btVertexArray worldVertsB2;
74 
75  bool m_ownManifold{ false };
76  btPersistentManifold* m_manifoldPtr;
77  bool m_lowLevelOfDetail{ false };
78 
81 
83 
85 
86 public:
87  TesseractConvexConvexAlgorithm(btPersistentManifold* mf,
88  const btCollisionAlgorithmConstructionInfo& ci,
89  const btCollisionObjectWrapper* body0Wrap,
90  const btCollisionObjectWrapper* body1Wrap,
91  btConvexPenetrationDepthSolver* pdSolver,
92  int numPerturbationIterations,
93  int minimumPointsPerturbationThreshold);
94 
100 
101  void processCollision(const btCollisionObjectWrapper* body0Wrap,
102  const btCollisionObjectWrapper* body1Wrap,
103  const btDispatcherInfo& dispatchInfo,
104  btManifoldResult* resultOut) override;
105 
106  btScalar calculateTimeOfImpact(btCollisionObject* body0,
107  btCollisionObject* body1,
108  const btDispatcherInfo& dispatchInfo,
109  btManifoldResult* resultOut) override;
110 
111  void getAllContactManifolds(btManifoldArray& manifoldArray) override
112  {
114  if (m_manifoldPtr && m_ownManifold) // NOLINT
115  manifoldArray.push_back(m_manifoldPtr);
116  }
117 
118  void setLowLevelOfDetail(bool useLowLevel);
119 
120  const btPersistentManifold* getManifold() { return m_manifoldPtr; }
121 
122  struct CreateFunc : public btCollisionAlgorithmCreateFunc
123  {
124  btConvexPenetrationDepthSolver* m_pdSolver;
127 
128  CreateFunc(btConvexPenetrationDepthSolver* pdSolver);
129 
130  btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci,
131  const btCollisionObjectWrapper* body0Wrap,
132  const btCollisionObjectWrapper* body1Wrap) override
133  {
134  void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(TesseractConvexConvexAlgorithm));
135  // NOLINTNEXTLINE
136  return new (mem) TesseractConvexConvexAlgorithm(ci.m_manifold,
137  ci,
138  body0Wrap,
139  body1Wrap,
140  m_pdSolver,
143  }
144  };
145 };
146 
147 } // namespace tesseract_collision::tesseract_collision_bullet
148 // LCOV_EXCL_STOP
149 #endif // TESSERACT_COLLISION_TESSERACT_CONVEX_CONVEX_ALGORITHM_H
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::setLowLevelOfDetail
void setLowLevelOfDetail(bool useLowLevel)
Definition: tesseract_convex_convex_algorithm.cpp:222
tesseract_collision::tesseract_collision_bullet
Definition: bullet_cast_bvh_manager.h:48
tesseract_collision::ContactTestData
This data is intended only to be used internal to the collision checkers as a container and should no...
Definition: types.h:328
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::m_manifoldPtr
btPersistentManifold * m_manifoldPtr
Definition: tesseract_convex_convex_algorithm.h:76
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::CreateFunc::m_pdSolver
btConvexPenetrationDepthSolver * m_pdSolver
Definition: tesseract_convex_convex_algorithm.h:124
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::calculateTimeOfImpact
btScalar calculateTimeOfImpact(btCollisionObject *body0, btCollisionObject *body1, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut) override
Definition: tesseract_convex_convex_algorithm.cpp:853
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::m_numPerturbationIterations
int m_numPerturbationIterations
Definition: tesseract_convex_convex_algorithm.h:79
types.h
Tesseracts Collision Forward Declarations.
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::operator=
TesseractConvexConvexAlgorithm & operator=(const TesseractConvexConvexAlgorithm &)=delete
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::CreateFunc::CreateCollisionAlgorithm
btCollisionAlgorithm * CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo &ci, const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap) override
Definition: tesseract_convex_convex_algorithm.h:130
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
#define TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm
This is a modifed Convex to Convex collision algorithm.
Definition: tesseract_convex_convex_algorithm.h:65
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::getAllContactManifolds
void getAllContactManifolds(btManifoldArray &manifoldArray) override
Definition: tesseract_convex_convex_algorithm.h:111
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::~TesseractConvexConvexAlgorithm
~TesseractConvexConvexAlgorithm() override
Definition: tesseract_convex_convex_algorithm.cpp:213
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::m_cdata
ContactTestData * m_cdata
Definition: tesseract_convex_convex_algorithm.h:82
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::TesseractConvexConvexAlgorithm
TesseractConvexConvexAlgorithm(btPersistentManifold *mf, const btCollisionAlgorithmConstructionInfo &ci, const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, btConvexPenetrationDepthSolver *pdSolver, int numPerturbationIterations, int minimumPointsPerturbationThreshold)
cache separating vector to speedup collision detection
Definition: tesseract_convex_convex_algorithm.cpp:188
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::worldVertsB2
btVertexArray worldVertsB2
Definition: tesseract_convex_convex_algorithm.h:73
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::CreateFunc::CreateFunc
CreateFunc(btConvexPenetrationDepthSolver *pdSolver)
Definition: tesseract_convex_convex_algorithm.cpp:184
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::m_minimumPointsPerturbationThreshold
int m_minimumPointsPerturbationThreshold
Definition: tesseract_convex_convex_algorithm.h:80
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::m_pdSolver
btConvexPenetrationDepthSolver * m_pdSolver
Definition: tesseract_convex_convex_algorithm.h:70
TESSERACT_COMMON_IGNORE_WARNINGS_POP
Definition: create_convex_hull.cpp:37
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::CreateFunc
Definition: tesseract_convex_convex_algorithm.h:122
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::processCollision
void processCollision(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut) override
Definition: tesseract_convex_convex_algorithm.cpp:283
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::m_lowLevelOfDetail
bool m_lowLevelOfDetail
Definition: tesseract_convex_convex_algorithm.h:77
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::worldVertsB1
btVertexArray worldVertsB1
Definition: tesseract_convex_convex_algorithm.h:72
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::CreateFunc::m_numPerturbationIterations
int m_numPerturbationIterations
Definition: tesseract_convex_convex_algorithm.h:125
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::m_ownManifold
bool m_ownManifold
Definition: tesseract_convex_convex_algorithm.h:75
macros.h
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::getManifold
const btPersistentManifold * getManifold()
Definition: tesseract_convex_convex_algorithm.h:120
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::CreateFunc::m_minimumPointsPerturbationThreshold
int m_minimumPointsPerturbationThreshold
Definition: tesseract_convex_convex_algorithm.h:126


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