18#ifndef BT_HINGECONSTRAINT_H
19#define BT_HINGECONSTRAINT_H
21#define _BT_USE_CENTER_LIMIT_ 1
29#ifdef BT_USE_DOUBLE_PRECISION
30#define btHingeConstraintData btHingeConstraintDoubleData2
31#define btHingeConstraintDataName "btHingeConstraintDoubleData2"
33#define btHingeConstraintData btHingeConstraintFloatData
34#define btHingeConstraintDataName "btHingeConstraintFloatData"
50#ifdef IN_PARALLELL_SOLVER
62#ifdef _BT_USE_CENTER_LIMIT_
177#ifdef _BT_USE_CENTER_LIMIT_
178 m_limit.set(low, high, _softness, _biasFactor, _relaxationFactor);
182 m_limitSoftness = _softness;
183 m_biasFactor = _biasFactor;
184 m_relaxationFactor = _relaxationFactor;
190#ifdef _BT_USE_CENTER_LIMIT_
193 return m_limitSoftness;
199#ifdef _BT_USE_CENTER_LIMIT_
200 return m_limit.getBiasFactor();
208#ifdef _BT_USE_CENTER_LIMIT_
209 return m_limit.getRelaxationFactor();
211 return m_relaxationFactor;
225 btVector3 axisInB =
m_rbA.getCenterOfMassTransform().getBasis() * axisInA;
231 m_rbBFrame.getOrigin() =
m_rbB.getCenterOfMassTransform().inverse()(
m_rbA.getCenterOfMassTransform()(pivotInA));
241#ifdef _BT_USE_CENTER_LIMIT_
242 return m_limit.getHalfRange() > 0;
244 return m_lowerLimit <= m_upperLimit;
250#ifdef _BT_USE_CENTER_LIMIT_
259#ifdef _BT_USE_CENTER_LIMIT_
281#ifdef _BT_USE_CENTER_LIMIT_
290#ifdef _BT_USE_CENTER_LIMIT_
322 virtual void setParam(
int num,
btScalar value,
int axis = -1);
324 virtual btScalar getParam(
int num,
int axis = -1)
const;
338#ifdef BT_BACKWARDS_COMPATIBLE_SERIALIZATION
370 :
btHingeConstraint(rbA, rbB, pivotInA, pivotInB, axisInA, axisInB, useReferenceFrameA)
392 btScalar getAccumulatedHingeAngle();
393 void setAccumulatedHingeAngle(
btScalar accAngle);
394 virtual void getInfo1(btConstraintInfo1 * info);
455#ifdef _BT_USE_CENTER_LIMIT_
456 hingeData->m_lowerLimit = float(
m_limit.getLow());
457 hingeData->m_upperLimit = float(
m_limit.getHigh());
458 hingeData->m_limitSoftness = float(
m_limit.getSoftness());
459 hingeData->m_biasFactor = float(
m_limit.getBiasFactor());
460 hingeData->m_relaxationFactor = float(
m_limit.getRelaxationFactor());
462 hingeData->m_lowerLimit = float(m_lowerLimit);
463 hingeData->m_upperLimit = float(m_upperLimit);
464 hingeData->m_limitSoftness = float(m_limitSoftness);
465 hingeData->m_biasFactor = float(m_biasFactor);
466 hingeData->m_relaxationFactor = float(m_relaxationFactor);
470#ifdef BT_USE_DOUBLE_PRECISION
471 hingeData->m_padding1[0] = 0;
472 hingeData->m_padding1[1] = 0;
473 hingeData->m_padding1[2] = 0;
474 hingeData->m_padding1[3] = 0;
@ BT_HINGE_FLAGS_CFM_STOP
@ BT_HINGE_FLAGS_CFM_NORM
@ BT_HINGE_FLAGS_ERP_NORM
@ BT_HINGE_FLAGS_ERP_STOP
#define btHingeConstraintData
#define btHingeConstraintDataName
btQuaternion shortestArcQuat(const btVector3 &v0, const btVector3 &v1)
btVector3 quatRotate(const btQuaternion &rotation, const btVector3 &v)
btScalar btNormalizeAngle(btScalar angleInRadians)
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
#define ATTRIBUTE_ALIGNED16(a)
#define SIMD_FORCE_INLINE
void btPlaneSpace1(const T &n, T &p, T &q)
BT_DECLARE_ALIGNED_ALLOCATOR()
btScalar m_accumulatedAngle
btHingeAccumulatedAngleConstraint(btRigidBody &rbA, const btVector3 &pivotInA, const btVector3 &axisInA, bool useReferenceFrameA=false)
btHingeAccumulatedAngleConstraint(btRigidBody &rbA, btRigidBody &rbB, const btVector3 &pivotInA, const btVector3 &pivotInB, const btVector3 &axisInA, const btVector3 &axisInB, bool useReferenceFrameA=false)
btHingeAccumulatedAngleConstraint(btRigidBody &rbA, btRigidBody &rbB, const btTransform &rbAFrame, const btTransform &rbBFrame, bool useReferenceFrameA=false)
btHingeAccumulatedAngleConstraint(btRigidBody &rbA, const btTransform &rbAFrame, bool useReferenceFrameA=false)
const btRigidBody & getRigidBodyB() const
virtual int getFlags() const
btJacobianEntry m_jacAng[3]
btScalar getHingeAngle()
The getHingeAngle gives the hinge angle in range [-PI,PI].
btScalar m_maxMotorImpulse
btScalar m_accLimitImpulse
void setAngularOnly(bool angularOnly)
void getInfo2NonVirtual(btConstraintInfo2 *info, const btTransform &transA, const btTransform &transB, const btVector3 &angVelA, const btVector3 &angVelB)
const btTransform & getAFrame() const
virtual void getInfo2(btConstraintInfo2 *info)
internal method used by the constraint solver, don't use them directly
btScalar getUpperLimit() const
btScalar getLimitRelaxationFactor() const
BT_DECLARE_ALIGNED_ALLOCATOR()
void setUseReferenceFrameA(bool useReferenceFrameA)
btScalar m_accMotorImpulse
const btTransform & getBFrame() const
btScalar getLowerLimit() const
btTransform & getFrameOffsetA()
btScalar getLimitSoftness() const
btHingeConstraint(btRigidBody &rbA, btRigidBody &rbB, const btVector3 &pivotInA, const btVector3 &pivotInB, const btVector3 &axisInA, const btVector3 &axisInB, bool useReferenceFrameA=false)
bool m_useSolveConstraintObsolete
void setAxis(btVector3 &axisInA)
bool m_useOffsetForConstraintFrame
void setMotorTargetVelocity(btScalar motorTargetVelocity)
void updateRHS(btScalar timeStep)
virtual int calculateSerializeBufferSize() const
btScalar getLimitBiasFactor() const
void setMaxMotorImpulse(btScalar maxMotorImpulse)
btRigidBody & getRigidBodyA()
void setLimit(btScalar low, btScalar high, btScalar _softness=0.9f, btScalar _biasFactor=0.3f, btScalar _relaxationFactor=1.0f)
void setUseFrameOffset(bool frameOffsetOnOff)
virtual void buildJacobian()
internal method used by the constraint solver, don't use them directly
bool m_useReferenceFrameA
void enableAngularMotor(bool enableMotor, btScalar targetVelocity, btScalar maxMotorImpulse)
virtual void getInfo1(btConstraintInfo1 *info)
internal method used by the constraint solver, don't use them directly
btScalar m_motorTargetVelocity
btTransform & getFrameOffsetB()
bool getUseReferenceFrameA() const
void enableMotor(bool enableMotor)
btTransform & getBFrame()
void getInfo2Internal(btConstraintInfo2 *info, const btTransform &transA, const btTransform &transB, const btVector3 &angVelA, const btVector3 &angVelB)
btScalar getMaxMotorImpulse()
bool m_enableAngularMotor
btScalar getMotorTargetVelocity()
void getInfo2InternalUsingFrameOffset(btConstraintInfo2 *info, const btTransform &transA, const btTransform &transB, const btVector3 &angVelA, const btVector3 &angVelB)
btTransform & getAFrame()
const btRigidBody & getRigidBodyA() const
virtual const char * serialize(void *dataBuffer, btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure)
bool getEnableAngularMotor()
btRigidBody & getRigidBodyB()
void getInfo1NonVirtual(btConstraintInfo1 *info)
Jacobian entry is an abstraction that allows to describe constraints it can be used in combination wi...
The btQuaternion implements quaternion to perform linear algebra rotations in combination with btMatr...
The btRigidBody is the main class for rigid body objects.
virtual const char * serialize(void *dataBuffer, class btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure)
virtual int calculateSerializeBufferSize() const
virtual const char * serialize(void *dataBuffer, btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure)
btTypedConstraint(btTypedConstraintType type, btRigidBody &rbA)
btVector3 can be used to represent 3D points and vectors.
const btScalar & getZ() const
Return the z value.
btVector3 cross(const btVector3 &v) const
Return the cross product between this and another vector.
const btScalar & getY() const
Return the y value.
const btScalar & getX() const
Return the x value.
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
double m_motorTargetVelocity
btTypedConstraintDoubleData m_typeConstraintData
double m_relaxationFactor
btTransformDoubleData m_rbBFrame
btTransformDoubleData m_rbAFrame
this structure is not used, except for loading pre-2.82 .bullet files
float m_motorTargetVelocity
btTransformDoubleData m_rbAFrame
btTransformDoubleData m_rbBFrame
btTypedConstraintData m_typeConstraintData
btTypedConstraintData m_typeConstraintData
float m_motorTargetVelocity
btTransformFloatData m_rbAFrame
btTransformFloatData m_rbBFrame
this structure is not used, except for loading pre-2.82 .bullet files