24 #define BTMBFIXEDCONSTRAINT_DIM 6
71 return col->getIslandTag();
75 if (m_bodyA->getLink(
m_linkA).m_collider)
76 return m_bodyA->getLink(
m_linkA).m_collider->getIslandTag();
92 return col->getIslandTag();
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;
164 constraintNormalLin[i] = 1;
165 posError = (pivotAworld - pivotBworld).
dot(constraintNormalLin);
167 constraintNormalLin, pivotAworld, pivotBworld,
174 constraintNormalAng = frameAworld.getColumn(i % 3);
175 posError = angleDiff[i % 3];
177 constraintNormalLin, pivotAworld, pivotBworld,
199 tr.setOrigin(pivotAworld);
212 tr.setOrigin(pivotBworld);
btFixedConstraint btRigidBody const btTransform & frameInA
btFixedConstraint btRigidBody const btTransform const btTransform & frameInB
bool matrixToEulerXYZ(const btMatrix3x3 &mat, btVector3 &xyz)
MatrixToEulerXYZ from http://www.geometrictools.com/LibFoundation/Mathematics/Wm4Matrix3....
btMatrix3x3
The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with...
@ 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)
btScalar m_maxAppliedImpulse
#define BTMBFIXEDCONSTRAINT_DIM
This file was written by Erwin Coumans.
btRigidBody * m_rigidBodyB
btMultiBodySolverConstraint
1D constraint along a normal axis between bodyA and bodyB. It can be combined to solve contact and fr...
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
btSequentialImpulseConstraintSolverMt int btPersistentManifold int btTypedConstraint int const btContactSolverInfo & infoGlobal
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
SIMD_FORCE_INLINE void resize(int newsize, const T &fillData=T())
SIMD_FORCE_INLINE T & expandNonInitializing()
virtual void drawTransform(const btTransform &transform, btScalar orthoLen)
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
btQuaternion getOrientation() const
const btTransform & getCenterOfMassTransform() const
T dot(const vec_base< T, Size > &a, const vec_base< T, Size > &b)