2020-01-08 18:05:43 +01:00
/*
Written by Xuchen Han < xuchenhan2015 @ u . northwestern . edu >
Bullet Continuous Collision Detection and Physics Library
Copyright ( c ) 2019 Google Inc . http : //bulletphysics.org
This software is provided ' as - is ' , without any express or implied warranty .
In no event will the authors be held liable for any damages arising from the use of this software .
Permission is granted to anyone to use this software for any purpose ,
including commercial applications , and to alter it and redistribute it freely ,
subject to the following restrictions :
1. The origin of this software must not be misrepresented ; you must not claim that you wrote the original software . If you use this software in a product , an acknowledgment in the product documentation would be appreciated but is not required .
2. Altered source versions must be plainly marked as such , and must not be misrepresented as being the original software .
3. This notice may not be removed or altered from any source distribution .
*/
# ifndef BT_DEFORMABLE_MULTIBODY_CONSTRAINT_SOLVER_H
# define BT_DEFORMABLE_MULTIBODY_CONSTRAINT_SOLVER_H
# include "btDeformableBodySolver.h"
# include "BulletDynamics/Featherstone/btMultiBodyConstraintSolver.h"
class btDeformableBodySolver ;
// btDeformableMultiBodyConstraintSolver extendsn btMultiBodyConstraintSolver to solve for the contact among rigid/multibody and deformable bodies. Notice that the following constraints
// 1. rigid/multibody against rigid/multibody
// 2. rigid/multibody against deforamble
// 3. deformable against deformable
// 4. deformable self collision
// 5. joint constraints
// are all coupled in this solve.
ATTRIBUTE_ALIGNED16 ( class )
btDeformableMultiBodyConstraintSolver : public btMultiBodyConstraintSolver
{
2020-12-17 13:51:12 +01:00
btDeformableBodySolver * m_deformableSolver ;
2020-01-08 18:05:43 +01:00
protected :
2020-12-17 13:51:12 +01:00
// override the iterations method to include deformable/multibody contact
// virtual btScalar solveGroupCacheFriendlyIterations(btCollisionObject** bodies,int numBodies,btPersistentManifold** manifoldPtr, int numManifolds,btTypedConstraint** constraints,int numConstraints,const btContactSolverInfo& infoGlobal,btIDebugDraw* debugDrawer);
// write the velocity of the the solver body to the underlying rigid body
void solverBodyWriteBack ( const btContactSolverInfo & infoGlobal ) ;
// write the velocity of the underlying rigid body to the the the solver body
void writeToSolverBody ( btCollisionObject * * bodies , int numBodies , const btContactSolverInfo & infoGlobal ) ;
virtual void solveGroupCacheFriendlySplitImpulseIterations ( btCollisionObject * * bodies , int numBodies , btCollisionObject * * deformableBodies , int numDeformableBodies , btPersistentManifold * * manifoldPtr , int numManifolds , btTypedConstraint * * constraints , int numConstraints , const btContactSolverInfo & infoGlobal , btIDebugDraw * debugDrawer ) ;
virtual btScalar solveDeformableGroupIterations ( btCollisionObject * * bodies , int numBodies , btCollisionObject * * deformableBodies , int numDeformableBodies , btPersistentManifold * * manifoldPtr , int numManifolds , btTypedConstraint * * constraints , int numConstraints , const btContactSolverInfo & infoGlobal , btIDebugDraw * debugDrawer ) ;
2020-01-08 18:05:43 +01:00
public :
2020-12-17 13:51:12 +01:00
BT_DECLARE_ALIGNED_ALLOCATOR ( ) ;
void setDeformableSolver ( btDeformableBodySolver * deformableSolver )
{
m_deformableSolver = deformableSolver ;
}
virtual void solveDeformableBodyGroup ( btCollisionObject * * bodies , int numBodies , btCollisionObject * * deformableBodies , int numDeformableBodies , btPersistentManifold * * manifold , int numManifolds , btTypedConstraint * * constraints , int numConstraints , btMultiBodyConstraint * * multiBodyConstraints , int numMultiBodyConstraints , const btContactSolverInfo & info , btIDebugDraw * debugDrawer , btDispatcher * dispatcher ) ;
2020-01-08 18:05:43 +01:00
} ;
# endif /* BT_DEFORMABLE_MULTIBODY_CONSTRAINT_SOLVER_H */