Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Apr 21, 2011, 6:58:23 PM (13 years ago)
Author:
rgrieder
Message:

Merged revisions 7978 - 8096 from kicklib to kicklib2.

Location:
code/branches/kicklib2
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • code/branches/kicklib2

  • code/branches/kicklib2/src/external/bullet/BulletDynamics/ConstraintSolver/btSliderConstraint.h

    r5781 r8284  
    2626#define SLIDER_CONSTRAINT_H
    2727
    28 //-----------------------------------------------------------------------------
     28
    2929
    3030#include "LinearMath/btVector3.h"
     
    3232#include "btTypedConstraint.h"
    3333
    34 //-----------------------------------------------------------------------------
     34
    3535
    3636class btRigidBody;
    3737
    38 //-----------------------------------------------------------------------------
     38
    3939
    4040#define SLIDER_CONSTRAINT_DEF_SOFTNESS          (btScalar(1.0))
    4141#define SLIDER_CONSTRAINT_DEF_DAMPING           (btScalar(1.0))
    4242#define SLIDER_CONSTRAINT_DEF_RESTITUTION       (btScalar(0.7))
    43 
    44 //-----------------------------------------------------------------------------
     43#define SLIDER_CONSTRAINT_DEF_CFM                       (btScalar(0.f))
     44
     45
     46enum btSliderFlags
     47{
     48        BT_SLIDER_FLAGS_CFM_DIRLIN = (1 << 0),
     49        BT_SLIDER_FLAGS_ERP_DIRLIN = (1 << 1),
     50        BT_SLIDER_FLAGS_CFM_DIRANG = (1 << 2),
     51        BT_SLIDER_FLAGS_ERP_DIRANG = (1 << 3),
     52        BT_SLIDER_FLAGS_CFM_ORTLIN = (1 << 4),
     53        BT_SLIDER_FLAGS_ERP_ORTLIN = (1 << 5),
     54        BT_SLIDER_FLAGS_CFM_ORTANG = (1 << 6),
     55        BT_SLIDER_FLAGS_ERP_ORTANG = (1 << 7),
     56        BT_SLIDER_FLAGS_CFM_LIMLIN = (1 << 8),
     57        BT_SLIDER_FLAGS_ERP_LIMLIN = (1 << 9),
     58        BT_SLIDER_FLAGS_CFM_LIMANG = (1 << 10),
     59        BT_SLIDER_FLAGS_ERP_LIMANG = (1 << 11)
     60};
     61
    4562
    4663class btSliderConstraint : public btTypedConstraint
     
    4966        ///for backwards compatibility during the transition to 'getInfo/getInfo2'
    5067        bool            m_useSolveConstraintObsolete;
     68        bool            m_useOffsetForConstraintFrame;
    5169        btTransform     m_frameInA;
    5270    btTransform m_frameInB;
     
    6886        btScalar m_restitutionDirLin;
    6987        btScalar m_dampingDirLin;
     88        btScalar m_cfmDirLin;
     89
    7090        btScalar m_softnessDirAng;
    7191        btScalar m_restitutionDirAng;
    7292        btScalar m_dampingDirAng;
     93        btScalar m_cfmDirAng;
     94
    7395        btScalar m_softnessLimLin;
    7496        btScalar m_restitutionLimLin;
    7597        btScalar m_dampingLimLin;
     98        btScalar m_cfmLimLin;
     99
    76100        btScalar m_softnessLimAng;
    77101        btScalar m_restitutionLimAng;
    78102        btScalar m_dampingLimAng;
     103        btScalar m_cfmLimAng;
     104
    79105        btScalar m_softnessOrthoLin;
    80106        btScalar m_restitutionOrthoLin;
    81107        btScalar m_dampingOrthoLin;
     108        btScalar m_cfmOrthoLin;
     109
    82110        btScalar m_softnessOrthoAng;
    83111        btScalar m_restitutionOrthoAng;
    84112        btScalar m_dampingOrthoAng;
     113        btScalar m_cfmOrthoAng;
    85114       
    86115        // for interlal use
    87116        bool m_solveLinLim;
    88117        bool m_solveAngLim;
     118
     119        int m_flags;
    89120
    90121        btJacobianEntry m_jacLin[3];
     
    127158        // constructors
    128159    btSliderConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB ,bool useLinearReferenceFrameA);
    129     btSliderConstraint();
     160    btSliderConstraint(btRigidBody& rbB, const btTransform& frameInB, bool useLinearReferenceFrameA);
     161
    130162        // overrides
    131     virtual void        buildJacobian();
     163
    132164    virtual void getInfo1 (btConstraintInfo1* info);
     165
     166        void getInfo1NonVirtual(btConstraintInfo1* info);
    133167       
    134168        virtual void getInfo2 (btConstraintInfo2* info);
    135169
    136     virtual     void    solveConstraintObsolete(btSolverBody& bodyA,btSolverBody& bodyB,btScalar        timeStep);
    137        
     170        void getInfo2NonVirtual(btConstraintInfo2* info, const btTransform& transA, const btTransform& transB,const btVector3& linVelA,const btVector3& linVelB, btScalar rbAinvMass,btScalar rbBinvMass);
     171
    138172
    139173        // access
     
    151185    void setUpperLinLimit(btScalar upperLimit) { m_upperLinLimit = upperLimit; }
    152186    btScalar getLowerAngLimit() { return m_lowerAngLimit; }
    153     void setLowerAngLimit(btScalar lowerLimit) { m_lowerAngLimit = lowerLimit; }
     187    void setLowerAngLimit(btScalar lowerLimit) { m_lowerAngLimit = btNormalizeAngle(lowerLimit); }
    154188    btScalar getUpperAngLimit() { return m_upperAngLimit; }
    155     void setUpperAngLimit(btScalar upperLimit) { m_upperAngLimit = upperLimit; }
     189    void setUpperAngLimit(btScalar upperLimit) { m_upperAngLimit = btNormalizeAngle(upperLimit); }
    156190        bool getUseLinearReferenceFrameA() { return m_useLinearReferenceFrameA; }
    157191        btScalar getSoftnessDirLin() { return m_softnessDirLin; }
     
    211245        bool getSolveAngLimit() { return m_solveAngLim; }
    212246        btScalar getAngDepth() { return m_angDepth; }
    213         // internal
    214     void        buildJacobianInt(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB);
    215     void        solveConstraintInt(btRigidBody& rbA, btSolverBody& bodyA,btRigidBody& rbB, btSolverBody& bodyB);
    216247        // shared code used by ODE solver
    217         void    calculateTransforms(void);
    218         void    testLinLimits(void);
    219         void    testLinLimits2(btConstraintInfo2* info);
    220         void    testAngLimits(void);
     248        void    calculateTransforms(const btTransform& transA,const btTransform& transB);
     249        void    testLinLimits();
     250        void    testAngLimits();
    221251        // access for PE Solver
    222         btVector3 getAncorInA(void);
    223         btVector3 getAncorInB(void);
     252        btVector3 getAncorInA();
     253        btVector3 getAncorInB();
     254        // access for UseFrameOffset
     255        bool getUseFrameOffset() { return m_useOffsetForConstraintFrame; }
     256        void setUseFrameOffset(bool frameOffsetOnOff) { m_useOffsetForConstraintFrame = frameOffsetOnOff; }
     257
     258        ///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5).
     259        ///If no axis is provided, it uses the default axis for this constraint.
     260        virtual void    setParam(int num, btScalar value, int axis = -1);
     261        ///return the local value of parameter
     262        virtual btScalar getParam(int num, int axis = -1) const;
     263
     264        virtual int     calculateSerializeBufferSize() const;
     265
     266        ///fills the dataBuffer and returns the struct name (and 0 on failure)
     267        virtual const char*     serialize(void* dataBuffer, btSerializer* serializer) const;
     268
     269
    224270};
    225271
    226 //-----------------------------------------------------------------------------
     272///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
     273struct btSliderConstraintData
     274{
     275        btTypedConstraintData   m_typeConstraintData;
     276        btTransformFloatData m_rbAFrame; // constraint axii. Assumes z is hinge axis.
     277        btTransformFloatData m_rbBFrame;
     278       
     279        float   m_linearUpperLimit;
     280        float   m_linearLowerLimit;
     281
     282        float   m_angularUpperLimit;
     283        float   m_angularLowerLimit;
     284
     285        int     m_useLinearReferenceFrameA;
     286        int m_useOffsetForConstraintFrame;
     287
     288};
     289
     290
     291SIMD_FORCE_INLINE               int     btSliderConstraint::calculateSerializeBufferSize() const
     292{
     293        return sizeof(btSliderConstraintData);
     294}
     295
     296        ///fills the dataBuffer and returns the struct name (and 0 on failure)
     297SIMD_FORCE_INLINE       const char*     btSliderConstraint::serialize(void* dataBuffer, btSerializer* serializer) const
     298{
     299
     300        btSliderConstraintData* sliderData = (btSliderConstraintData*) dataBuffer;
     301        btTypedConstraint::serialize(&sliderData->m_typeConstraintData,serializer);
     302
     303        m_frameInA.serializeFloat(sliderData->m_rbAFrame);
     304        m_frameInB.serializeFloat(sliderData->m_rbBFrame);
     305
     306        sliderData->m_linearUpperLimit = float(m_upperLinLimit);
     307        sliderData->m_linearLowerLimit = float(m_lowerLinLimit);
     308
     309        sliderData->m_angularUpperLimit = float(m_upperAngLimit);
     310        sliderData->m_angularLowerLimit = float(m_lowerAngLimit);
     311
     312        sliderData->m_useLinearReferenceFrameA = m_useLinearReferenceFrameA;
     313        sliderData->m_useOffsetForConstraintFrame = m_useOffsetForConstraintFrame;
     314
     315        return "btSliderConstraintData";
     316}
     317
     318
    227319
    228320#endif //SLIDER_CONSTRAINT_H
Note: See TracChangeset for help on using the changeset viewer.