18 #ifndef BT_HINGECONSTRAINT_H    19 #define BT_HINGECONSTRAINT_H    21 #define _BT_USE_CENTER_LIMIT_ 1    30 #ifdef BT_USE_DOUBLE_PRECISION    31 #define btHingeConstraintData   btHingeConstraintDoubleData2 //rename to 2 for backwards compatibility, so we can still load the 'btHingeConstraintDoubleData' version    32 #define btHingeConstraintDataName       "btHingeConstraintDoubleData2"     34 #define btHingeConstraintData   btHingeConstraintFloatData    35 #define btHingeConstraintDataName       "btHingeConstraintFloatData"    36 #endif //BT_USE_DOUBLE_PRECISION    53 #ifdef IN_PARALLELL_SOLVER    66 #ifdef  _BT_USE_CENTER_LIMIT_   116         virtual void    buildJacobian();
   165                 m_angularOnly = angularOnly;
   170                 m_enableAngularMotor  = enableMotor;
   171                 m_motorTargetVelocity = targetVelocity;
   172                 m_maxMotorImpulse = maxMotorImpulse;
   187 #ifdef  _BT_USE_CENTER_LIMIT_   188                 m_limit.
set(low, high, _softness, _biasFactor, _relaxationFactor);
   192                 m_limitSoftness =  _softness;
   193                 m_biasFactor = _biasFactor;
   194                 m_relaxationFactor = _relaxationFactor;
   200 #ifdef  _BT_USE_CENTER_LIMIT_   203                 return m_limitSoftness;
   209 #ifdef  _BT_USE_CENTER_LIMIT_   218 #ifdef  _BT_USE_CENTER_LIMIT_   221                 return m_relaxationFactor;
   235                 btVector3 axisInB = m_rbA.getCenterOfMassTransform().getBasis() * axisInA;
   241                 m_rbBFrame.
getOrigin() = m_rbB.getCenterOfMassTransform().inverse()(m_rbA.getCenterOfMassTransform()(pivotInA));
   251 #ifdef  _BT_USE_CENTER_LIMIT_   254         return m_lowerLimit <= m_upperLimit;
   260 #ifdef  _BT_USE_CENTER_LIMIT_   269 #ifdef  _BT_USE_CENTER_LIMIT_   293 #ifdef  _BT_USE_CENTER_LIMIT_   302 #ifdef  _BT_USE_CENTER_LIMIT_   311                 return m_angularOnly; 
   315                 return m_enableAngularMotor; 
   319                 return m_motorTargetVelocity; 
   323                 return m_maxMotorImpulse; 
   327         void setUseFrameOffset(
bool frameOffsetOnOff) { m_useOffsetForConstraintFrame = frameOffsetOnOff; }
   334         virtual void    setParam(
int num, 
btScalar value, 
int axis = -1);
   336         virtual btScalar getParam(
int num, 
int axis = -1) 
const;
   353 #ifdef BT_BACKWARDS_COMPATIBLE_SERIALIZATION   373 #endif //BT_BACKWARDS_COMPATIBLE_SERIALIZATION   385         :btHingeConstraint(rbA,rbB,pivotInA,pivotInB, axisInA,axisInB, useReferenceFrameA )
   387                 m_accumulatedAngle=getHingeAngle();
   391         :btHingeConstraint(rbA,pivotInA,axisInA, useReferenceFrameA)
   393                 m_accumulatedAngle=getHingeAngle();
   397         :btHingeConstraint(rbA,rbB, rbAFrame, rbBFrame, useReferenceFrameA )
   399                 m_accumulatedAngle=getHingeAngle();
   403         :btHingeConstraint(rbA,rbAFrame, useReferenceFrameA )
   405                 m_accumulatedAngle=getHingeAngle();
   407         btScalar getAccumulatedHingeAngle();
   408         void    setAccumulatedHingeAngle(
btScalar accAngle);
   478 #ifdef  _BT_USE_CENTER_LIMIT_   479         hingeData->m_lowerLimit = float(m_limit.getLow());
   480         hingeData->m_upperLimit = float(m_limit.getHigh());
   481         hingeData->m_limitSoftness = float(m_limit.getSoftness());
   482         hingeData->m_biasFactor = float(m_limit.getBiasFactor());
   483         hingeData->m_relaxationFactor = float(m_limit.getRelaxationFactor());
   495 #endif //BT_HINGECONSTRAINT_H void setUseFrameOffset(bool frameOffsetOnOff)
btScalar getLimitBiasFactor() const
btTransformDoubleData m_rbBFrame
btTransformFloatData m_rbAFrame
btScalar getUpperLimit() const
btTransform & getBFrame()
const btRigidBody & getRigidBodyB() const
const btTransform & getBFrame() const
Jacobian entry is an abstraction that allows to describe constraints it can be used in combination wi...
btScalar getLowerLimit() const
virtual const char * serialize(void *dataBuffer, btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure) 
double m_motorTargetVelocity
float m_motorTargetVelocity
bool m_useSolveConstraintObsolete
btScalar m_accMotorImpulse
btScalar getHalfRange() const
Gives half of the distance between min and max limit angle. 
void btPlaneSpace1(const T &n, T &p, T &q)
this structure is not used, except for loading pre-2.82 .bullet files 
virtual int calculateSerializeBufferSize() const
#define btHingeConstraintData
bool m_enableAngularMotor
#define SIMD_FORCE_INLINE
const btScalar & getY() const
Return the y value. 
btTypedConstraintDoubleData m_typeConstraintData
btScalar getRelaxationFactor() const
Returns limit's relaxation factor. 
btScalar m_motorTargetVelocity
hinge constraint between two rigidbodies each with a pivotpoint that descibes the axis location in lo...
btScalar getLimitRelaxationFactor() const
btVector3 quatRotate(const btQuaternion &rotation, const btVector3 &v)
btHingeAccumulatedAngleConstraint(btRigidBody &rbA, btRigidBody &rbB, const btTransform &rbAFrame, const btTransform &rbBFrame, bool useReferenceFrameA=false)
btScalar m_accumulatedAngle
const btScalar & getZ() const
Return the z value. 
btScalar getBiasFactor() const
Returns limit's bias factor. 
virtual int getFlags() const
btScalar m_accLimitImpulse
btQuaternion shortestArcQuat(const btVector3 &v0, const btVector3 &v1)
float m_motorTargetVelocity
void set(btScalar low, btScalar high, btScalar _softness=0.9f, btScalar _biasFactor=0.3f, btScalar _relaxationFactor=1.0f)
Sets all limit's parameters. 
double m_relaxationFactor
btScalar getMaxMotorImpulse()
btScalar getSoftness() const
Returns limit's softness. 
btVector3 cross(const btVector3 &v) const
Return the cross product between this and another vector. 
void setAxis(btVector3 &axisInA)
btScalar getSign() const
Returns sign value evaluated when test() was invoked. 
btScalar getMotorTargetVelosity()
void setValue(const btScalar &xx, const btScalar &xy, const btScalar &xz, const btScalar &yx, const btScalar &yy, const btScalar &yz, const btScalar &zx, const btScalar &zy, const btScalar &zz)
Set the values of the matrix explicitly (row major) 
btScalar m_maxMotorImpulse
void setUseReferenceFrameA(bool useReferenceFrameA)
The btRigidBody is the main class for rigid body objects. 
btTypedConstraintData m_typeConstraintData
btScalar getLimitSoftness() const
this structure is not used, except for loading pre-2.82 .bullet files 
btRigidBody & getRigidBodyA()
btVector3 can be used to represent 3D points and vectors. 
#define ATTRIBUTE_ALIGNED16(a)
const btTransform & getAFrame() const
void setMotorTargetVelocity(btScalar motorTargetVelocity)
btTransform & getAFrame()
btScalar btNormalizeAngle(btScalar angleInRadians)
bool m_useOffsetForConstraintFrame
bool getUseReferenceFrameA() const
void setAngularOnly(bool angularOnly)
bool m_useReferenceFrameA
bool getEnableAngularMotor()
virtual const char * serialize(void *dataBuffer, btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure) 
btTransformDoubleData m_rbAFrame
TypedConstraint is the baseclass for Bullet constraints and vehicles. 
bool isLimit() const
Returns true when the last test() invocation recognized limit violation. 
void setLimit(btScalar low, btScalar high, btScalar _softness=0.9f, btScalar _biasFactor=0.3f, btScalar _relaxationFactor=1.0f)
void enableMotor(bool enableMotor)
#define BT_DECLARE_ALIGNED_ALLOCATOR()
virtual int calculateSerializeBufferSize() const
btHingeAccumulatedAngleConstraint(btRigidBody &rbA, const btTransform &rbAFrame, bool useReferenceFrameA=false)
btTransform & getFrameOffsetB()
btTransformDoubleData m_rbBFrame
btRigidBody & getRigidBodyB()
btHingeAccumulatedAngleConstraint(btRigidBody &rbA, const btVector3 &pivotInA, const btVector3 &axisInA, bool useReferenceFrameA=false)
#define btHingeConstraintDataName
The getAccumulatedHingeAngle returns the accumulated hinge angle, taking rotation across the -PI/PI b...
btTransformDoubleData m_rbAFrame
The btQuaternion implements quaternion to perform linear algebra rotations in combination with btMatr...
void setMaxMotorImpulse(btScalar maxMotorImpulse)
btMatrix3x3 inverse() const
Return the inverse of the matrix. 
const btRigidBody & getRigidBodyA() const
btTransform & getFrameOffsetA()
btTypedConstraintData m_typeConstraintData
virtual const char * serialize(void *dataBuffer, class btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure) 
const btScalar & getX() const
Return the x value. 
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
void enableAngularMotor(bool enableMotor, btScalar targetVelocity, btScalar maxMotorImpulse)
btHingeAccumulatedAngleConstraint(btRigidBody &rbA, btRigidBody &rbB, const btVector3 &pivotInA, const btVector3 &pivotInB, const btVector3 &axisInA, const btVector3 &axisInB, bool useReferenceFrameA=false)
btTransformFloatData m_rbBFrame