btScalar getMaxAppliedImpulse() const
void fillMultiBodyConstraintMixed(btMultiBodySolverConstraint &solverConstraint, btMultiBodyJacobianData &data, const btVector3 &contactNormalOnB, const btVector3 &posAworld, const btVector3 &posBworld, btScalar position, const btContactSolverInfo &infoGlobal, btScalar &relaxation, bool isFriction, btScalar desiredVelocity=0, btScalar cfmSlip=0)
btScalar * jacobianB(int row)
btMultiBody * getMultiBodyA()
1D constraint along a normal axis between bodyA and bodyB. It can be combined to solve contact and fr...
btAlignedObjectArray< btScalar > scratch_r
btAlignedObjectArray< btScalar > m_deltaVelocities
virtual void createConstraintRows(btMultiBodyConstraintArray &constraintRows, btMultiBodyJacobianData &data, const btContactSolverInfo &infoGlobal)=0
btAlignedObjectArray< btSolverBody > * m_solverBodyPool
btScalar m_maxAppliedImpulse
btScalar * jacobianA(int row)
virtual ~btMultiBodyConstraint()
btAlignedObjectArray< btMatrix3x3 > scratch_m
virtual int getIslandIdB() const =0
btAlignedObjectArray< btScalar > m_deltaVelocitiesUnitImpulse
bool isUnilateral() const
btScalar getPosition(int row) const
btAlignedObjectArray< btScalar > m_data
btAlignedObjectArray< btScalar > m_jacobians
virtual int getIslandIdA() const =0
const btScalar * jacobianA(int row) const
btScalar fillConstraintRowMultiBodyMultiBody(btMultiBodySolverConstraint &constraintRow, btMultiBodyJacobianData &data, btScalar *jacOrgA, btScalar *jacOrgB, const btContactSolverInfo &infoGlobal, btScalar desiredVelocity, btScalar lowerLimit, btScalar upperLimit)
btAlignedObjectArray< btVector3 > scratch_v
void setPosition(int row, btScalar pos)
void setMaxAppliedImpulse(btScalar maxImp)
btMultiBodyConstraint(btMultiBody *bodyA, btMultiBody *bodyB, int linkA, int linkB, int numRows, bool isUnilateral)
const btScalar * jacobianB(int row) const
btMultiBody * getMultiBodyB()
void applyDeltaVee(btMultiBodyJacobianData &data, btScalar *delta_vee, btScalar impulse, int velocityIndex, int ndof)