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);
190#ifdef _BT_USE_CENTER_LIMIT_
199#ifdef _BT_USE_CENTER_LIMIT_
208#ifdef _BT_USE_CENTER_LIMIT_
221 m_rbAFrame.getBasis().setValue(rbAxisA1.getX(), rbAxisA2.getX(), axisInA.getX(),
222 rbAxisA1.getY(), rbAxisA2.getY(), axisInA.getY(),
223 rbAxisA1.getZ(), rbAxisA2.getZ(), axisInA.getZ());
229 btVector3 rbAxisB2 = axisInB.cross(rbAxisB1);
233 m_rbBFrame.getBasis().setValue(rbAxisB1.getX(), rbAxisB2.getX(), axisInB.getX(),
234 rbAxisB1.getY(), rbAxisB2.getY(), axisInB.getY(),
235 rbAxisB1.getZ(), rbAxisB2.getZ(), axisInB.getZ());
241#ifdef _BT_USE_CENTER_LIMIT_
250#ifdef _BT_USE_CENTER_LIMIT_
259#ifdef _BT_USE_CENTER_LIMIT_
281#ifdef _BT_USE_CENTER_LIMIT_
290#ifdef _BT_USE_CENTER_LIMIT_
338#ifdef BT_BACKWARDS_COMPATIBLE_SERIALIZATION
445 btTypedConstraint::serialize(&hingeData->m_typeConstraintData, serializer);
455#ifdef _BT_USE_CENTER_LIMIT_
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;
ATTR_WARN_UNUSED_RESULT const size_t num
virtual void getInfo2(btConstraintInfo2 *info)
virtual void buildJacobian()
const btTransform & getFrameOffsetB() const
const btTransform & getAFrame() const
virtual void setParam(int num, btScalar value, int axis=-1)
virtual void setFrames(const btTransform &frameA, const btTransform &frameB)
void updateRHS(btScalar timeStep)
bool m_useSolveConstraintObsolete
btScalar m_maxMotorImpulse
virtual void getInfo1(btConstraintInfo1 *info)
void getInfo2NonVirtual(btConstraintInfo2 *info, const btTransform &transA, const btTransform &transB, const btMatrix3x3 &invInertiaWorldA, const btMatrix3x3 &invInertiaWorldB)
virtual btScalar getParam(int num, int axis=-1) const
return the local value of parameter
const btRigidBody & getRigidBodyA() const
btVector3 m_accMotorImpulse
void setAngularOnly(bool angularOnly)
btScalar getMaxMotorImpulse() const
bool getAngularOnly() const
btScalar getLimitSoftness() const
const btRigidBody & getRigidBodyB() const
const btTransform & getBFrame() const
void setLimit(int limitIndex, btScalar limitValue)
const btTransform & getFrameOffsetA() const
void setMaxMotorImpulse(btScalar maxMotorImpulse)
btScalar m_relaxationFactor
void getInfo1NonVirtual(btConstraintInfo1 *info)
void setMotorTarget(const btQuaternion &q)
btFixedConstraint btRigidBody & rbB
btJacobianEntry m_jacAng[3]
3 orthogonal angular constraints
void setUseFrameOffset(bool frameOffsetOnOff)
void setAxis(const btVector3 &axis1, const btVector3 &axis2)
bool getUseFrameOffset() const
bool m_useOffsetForConstraintFrame
void setAccumulatedHingeAngle(btScalar accAngle)
btScalar getHingeAngle()
The getHingeAngle gives the hinge angle in range [-PI,PI].
btHingeAccumulatedAngleConstraint(btRigidBody &rbA, btRigidBody &rbB, const btVector3 &pivotInA, const btVector3 &pivotInB, const btVector3 &axisInA, const btVector3 &axisInB, bool useReferenceFrameA=false)
btScalar getLimitBiasFactor() const
bool m_useReferenceFrameA
btScalar getLowerLimit() const
btScalar getMotorTargetVelocity()
bool getUseReferenceFrameA() const
void setUseReferenceFrameA(bool useReferenceFrameA)
btHingeConstraint(btRigidBody &rbA, btRigidBody &rbB, const btVector3 &pivotInA, const btVector3 &pivotInB, const btVector3 &axisInA, const btVector3 &axisInB, bool useReferenceFrameA=false)
void setMotorTargetVelocity(btScalar motorTargetVelocity)
btScalar getLimitRelaxationFactor() const
bool m_enableAngularMotor
btScalar getUpperLimit() const
btScalar getAccumulatedHingeAngle()
void enableAngularMotor(bool enableMotor, btScalar targetVelocity, btScalar maxMotorImpulse)
bool getEnableAngularMotor()
@ BT_HINGE_FLAGS_CFM_STOP
@ BT_HINGE_FLAGS_CFM_NORM
@ BT_HINGE_FLAGS_ERP_NORM
@ BT_HINGE_FLAGS_ERP_STOP
btScalar m_accLimitImpulse
btScalar m_motorTargetVelocity
void getInfo2Internal(btConstraintInfo2 *info, const btTransform &transA, const btTransform &transB, const btVector3 &angVelA, const btVector3 &angVelB)
void getInfo2InternalUsingFrameOffset(btConstraintInfo2 *info, const btTransform &transA, const btTransform &transB, const btVector3 &angVelA, const btVector3 &angVelB)
void testLimit(const btTransform &transA, const btTransform &transB)
#define btHingeConstraintData
#define btHingeConstraintDataName
unsigned calculateSerializeBufferSize() const
virtual bool serialize(void *o_alignedDataBuffer, unsigned i_dataBufferSize, bool i_swapEndian) const
Data buffer MUST be 16 byte aligned.
SIMD_FORCE_INLINE btQuaternion shortestArcQuat(const btVector3 &v0, const btVector3 &v1)
SIMD_FORCE_INLINE btVector3 quatRotate(const btQuaternion &rotation, const btVector3 &v)
#define BT_DECLARE_ALIGNED_ALLOCATOR()
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
#define ATTRIBUTE_ALIGNED16(a)
SIMD_FORCE_INLINE btScalar btNormalizeAngle(btScalar angleInRadians)
#define SIMD_FORCE_INLINE
btTypedConstraint(btTypedConstraintType type, btRigidBody &rbA)
SIMD_FORCE_INLINE void btPlaneSpace1(const T &n, T &p, T &q)
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
bool isLimit() const
Returns true when the last test() invocation recognized limit violation.
btScalar getBiasFactor() const
Returns limit's bias factor.
btScalar getSoftness() const
Returns limit's softness.
btScalar getSign() const
Returns sign value evaluated when test() was invoked.
void set(btScalar low, btScalar high, btScalar _softness=0.9f, btScalar _biasFactor=0.3f, btScalar _relaxationFactor=1.0f)
btScalar getHalfRange() const
Gives half of the distance between min and max limit angle.
btScalar getRelaxationFactor() const
Returns limit's relaxation factor.
The btQuaternion implements quaternion to perform linear algebra rotations in combination with btMatr...
const btTransform & getCenterOfMassTransform() const
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