106 for (
int i = 0;
i < numDim;
i++)
109 constraintRow.m_orgConstraint =
this;
110 constraintRow.m_orgDofIndex =
i;
111 constraintRow.m_relpos1CrossNormal.setValue(0, 0, 0);
112 constraintRow.m_contactNormal1.setValue(0, 0, 0);
113 constraintRow.m_relpos2CrossNormal.setValue(0, 0, 0);
114 constraintRow.m_contactNormal2.setValue(0, 0, 0);
115 constraintRow.m_angularComponentA.setValue(0, 0, 0);
116 constraintRow.m_angularComponentB.setValue(0, 0, 0);
118 constraintRow.m_solverBodyIdA =
data.m_fixedBodyId;
119 constraintRow.m_solverBodyIdB =
data.m_fixedBodyId;
126 constraintRow.m_solverBodyIdA =
m_rigidBodyA->getCompanionId();
135 frameAworld = m_bodyA->localFrameToWorld(
m_linkA, frameAworld);
142 constraintRow.m_solverBodyIdB =
m_rigidBodyB->getCompanionId();
155 btMatrix3x3 relRot = frameAworld.inverse() * frameBworld;
157 btGeneric6DofSpring2Constraint::matrixToEulerXYZ(relRot, angleDiff);
164 constraintNormalLin[
i] = 1;
165 posError = (pivotAworld - pivotBworld).
dot(constraintNormalLin);
167 constraintNormalLin, pivotAworld, pivotBworld,
170 -m_maxAppliedImpulse, m_maxAppliedImpulse);
174 constraintNormalAng = frameAworld.getColumn(
i % 3);
175 posError = angleDiff[
i % 3];
177 constraintNormalLin, pivotAworld, pivotBworld,
180 -m_maxAppliedImpulse, m_maxAppliedImpulse,
true);
@ MULTIBODY_CONSTRAINT_FIXED
btAlignedObjectArray< btScalar > m_data
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)
#define BTMBFIXEDCONSTRAINT_DIM
This file was written by Erwin Coumans.
btAlignedObjectArray< btMultiBodySolverConstraint > btMultiBodyConstraintArray
btMultiBodySolverConstraint
1D constraint along a normal axis between bodyA and bodyB. It can be combined to solve contact and fr...
virtual int getIslandIdB() const
virtual void finalizeMultiDof()
virtual void debugDraw(class btIDebugDraw *drawer)
btMultiBodyFixedConstraint(btMultiBody *body, int link, btRigidBody *bodyB, const btVector3 &pivotInA, const btVector3 &pivotInB, const btMatrix3x3 &frameInA, const btMatrix3x3 &frameInB)
virtual ~btMultiBodyFixedConstraint()
virtual void createConstraintRows(btMultiBodyConstraintArray &constraintRows, btMultiBodyJacobianData &data, const btContactSolverInfo &infoGlobal)
btRigidBody * m_rigidBodyA
btRigidBody * m_rigidBodyB
virtual int getIslandIdA() const