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_
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
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;
typedef float(TangentPoint)[2]
__forceinline ssef low(const avxf &a)
__forceinline ssef high(const avxf &a)
btScalar m_relaxationFactor
btFixedConstraint btRigidBody & rbB
BT_DECLARE_ALIGNED_ALLOCATOR()
const btTransform & getAFrame() const
void setAccumulatedHingeAngle(btScalar accAngle)
virtual void getInfo2(btConstraintInfo2 *info)
btScalar getHingeAngle()
The getHingeAngle gives the hinge angle in range [-PI,PI].
void setMotorTarget(const btQuaternion &qAinB, btScalar dt)
btHingeAccumulatedAngleConstraint(btRigidBody &rbA, btRigidBody &rbB, const btVector3 &pivotInA, const btVector3 &pivotInB, const btVector3 &axisInA, const btVector3 &axisInB, bool useReferenceFrameA=false)
void getInfo2NonVirtual(btConstraintInfo2 *info, const btTransform &transA, const btTransform &transB, const btVector3 &angVelA, const btVector3 &angVelB)
btScalar m_accMotorImpulse
virtual void setParam(int num, btScalar value, int axis=-1)
btScalar getLimitBiasFactor() const
const btTransform & getBFrame() const
bool m_useReferenceFrameA
virtual int calculateSerializeBufferSize() const
btJacobianEntry m_jacAng[3]
btScalar getLowerLimit() const
btTransform & getFrameOffsetA()
btScalar getMotorTargetVelocity()
bool getUseReferenceFrameA() const
bool m_useSolveConstraintObsolete
void setUseFrameOffset(bool frameOffsetOnOff)
void setUseReferenceFrameA(bool useReferenceFrameA)
btScalar m_maxMotorImpulse
virtual int getFlags() const
btHingeConstraint(btRigidBody &rbA, btRigidBody &rbB, const btVector3 &pivotInA, const btVector3 &pivotInB, const btVector3 &axisInA, const btVector3 &axisInB, bool useReferenceFrameA=false)
void setMotorTargetVelocity(btScalar motorTargetVelocity)
void setLimit(btScalar low, btScalar high, btScalar _softness=0.9f, btScalar _biasFactor=0.3f, btScalar _relaxationFactor=1.0f)
const btRigidBody & getRigidBodyA() const
btScalar getLimitRelaxationFactor() const
bool m_enableAngularMotor
const btRigidBody & getRigidBodyB() const
virtual btScalar getParam(int num, int axis=-1) const
return the local value of parameter
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
void setFrames(const btTransform &frameA, const btTransform &frameB)
virtual void buildJacobian()
obsolete methods
void setAngularOnly(bool angularOnly)
btScalar m_motorTargetVelocity
void getInfo1NonVirtual(btConstraintInfo1 *info)
btScalar getLimitSoftness() const
void getInfo2Internal(btConstraintInfo2 *info, const btTransform &transA, const btTransform &transB, const btVector3 &angVelA, const btVector3 &angVelB)
virtual void getInfo1(btConstraintInfo1 *info)
btScalar getMaxMotorImpulse()
void getInfo2InternalUsingFrameOffset(btConstraintInfo2 *info, const btTransform &transA, const btTransform &transB, const btVector3 &angVelA, const btVector3 &angVelB)
void testLimit(const btTransform &transA, const btTransform &transB)
void setAxis(btVector3 &axisInA)
void setMaxMotorImpulse(btScalar maxMotorImpulse)
#define btHingeConstraintData
void enableMotor(bool enableMotor)
#define btHingeConstraintDataName
bool m_useOffsetForConstraintFrame
btTransform & getFrameOffsetB()
virtual const char * serialize(void *dataBuffer, btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure)
void updateRHS(btScalar timeStep)
SIMD_FORCE_INLINE btQuaternion shortestArcQuat(const btVector3 &v0, const btVector3 &v1)
SIMD_FORCE_INLINE btVector3 quatRotate(const btQuaternion &rotation, const btVector3 &v)
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