16#ifndef BT_MULTIBODY_CONSTRAINT_H
17#define BT_MULTIBODY_CONSTRAINT_H
94 bool angConstraint =
false,
151 m_data[dof] = appliedImpulse;
btTypedMultiBodyConstraintType
@ MAX_MULTIBODY_CONSTRAINT_TYPE
@ MULTIBODY_CONSTRAINT_LIMIT
@ MULTIBODY_CONSTRAINT_SLIDER
@ MULTIBODY_CONSTRAINT_FIXED
@ MULTIBODY_CONSTRAINT_POINT_TO_POINT
@ MULTIBODY_CONSTRAINT_SPHERICAL_LIMIT
@ MULTIBODY_CONSTRAINT_GEAR
@ MULTIBODY_CONSTRAINT_1DOF_JOINT_MOTOR
@ MULTIBODY_CONSTRAINT_SPHERICAL_MOTOR
btAlignedObjectArray< btMultiBodySolverConstraint > btMultiBodyConstraintArray
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
#define ATTRIBUTE_ALIGNED16(a)
The btAlignedObjectArray template class uses a subset of the stl::vector interface for its methods It...
The btIDebugDraw interface class allows hooking up a debug renderer to visually debug simulations.
The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with...
virtual void setGearRatio(btScalar ratio)
virtual void setRelativePositionTarget(btScalar relPosTarget)
btScalar getPosition(int row) const
const btScalar * jacobianA(int row) const
virtual int getIslandIdA() const =0
btAlignedObjectArray< btScalar > m_data
btMultiBody * getMultiBodyB()
btScalar * jacobianA(int row)
void setPosition(int row, btScalar pos)
void updateJacobianSizes()
virtual void debugDraw(class btIDebugDraw *drawer)=0
btMultiBodyConstraint(btMultiBody *bodyA, btMultiBody *bodyB, int linkA, int linkB, int numRows, bool isUnilateral, int type)
void applyDeltaVee(btMultiBodyJacobianData &data, btScalar *delta_vee, btScalar impulse, int velocityIndex, int ndof)
int getConstraintType() const
btScalar m_maxAppliedImpulse
btMultiBody * getMultiBodyA()
btScalar * jacobianB(int row)
virtual void createConstraintRows(btMultiBodyConstraintArray &constraintRows, btMultiBodyJacobianData &data, const btContactSolverInfo &infoGlobal)=0
virtual void setPivotInB(const btVector3 &pivotInB)
void setMaxAppliedImpulse(btScalar maxImp)
btScalar getAppliedImpulse(int dof)
void allocateJacobiansMultiDof()
virtual int getIslandIdB() const =0
bool isUnilateral() const
btScalar fillMultiBodyConstraint(btMultiBodySolverConstraint &solverConstraint, btMultiBodyJacobianData &data, btScalar *jacOrgA, btScalar *jacOrgB, const btVector3 &constraintNormalAng, const btVector3 &constraintNormalLin, const btVector3 &posAworld, const btVector3 &posBworld, btScalar posError, const btContactSolverInfo &infoGlobal, btScalar lowerLimit, btScalar upperLimit, bool angConstraint=false, btScalar relaxation=1.f, bool isFriction=false, btScalar desiredVelocity=0, btScalar cfmSlip=0, btScalar damping=1.0)
virtual void setErp(btScalar erp)
btScalar getMaxAppliedImpulse() const
BT_DECLARE_ALIGNED_ALLOCATOR()
const btScalar * jacobianB(int row) const
void internalSetAppliedImpulse(int dof, btScalar appliedImpulse)
virtual void setGearAuxLink(int gearAuxLink)
virtual void setFrameInB(const btMatrix3x3 &frameInB)
virtual void finalizeMultiDof()=0
btVector3 can be used to represent 3D points and vectors.
btAlignedObjectArray< btScalar > m_deltaVelocitiesUnitImpulse
btAlignedObjectArray< btScalar > m_deltaVelocities
btAlignedObjectArray< btScalar > m_jacobians
btAlignedObjectArray< btSolverBody > * m_solverBodyPool
btAlignedObjectArray< btScalar > scratch_r
btAlignedObjectArray< btMatrix3x3 > scratch_m
btAlignedObjectArray< btVector3 > scratch_v
1D constraint along a normal axis between bodyA and bodyB. It can be combined to solve contact and fr...