Changeset 8351 for code/trunk/src/external/bullet/BulletDynamics/ConstraintSolver/btSliderConstraint.h
- Timestamp:
- Apr 28, 2011, 7:15:14 AM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk/src/external/bullet/BulletDynamics/ConstraintSolver/btSliderConstraint.h
r5781 r8351 26 26 #define SLIDER_CONSTRAINT_H 27 27 28 //----------------------------------------------------------------------------- 28 29 29 30 30 #include "LinearMath/btVector3.h" … … 32 32 #include "btTypedConstraint.h" 33 33 34 //----------------------------------------------------------------------------- 34 35 35 36 36 class btRigidBody; 37 37 38 //----------------------------------------------------------------------------- 38 39 39 40 40 #define SLIDER_CONSTRAINT_DEF_SOFTNESS (btScalar(1.0)) 41 41 #define SLIDER_CONSTRAINT_DEF_DAMPING (btScalar(1.0)) 42 42 #define SLIDER_CONSTRAINT_DEF_RESTITUTION (btScalar(0.7)) 43 44 //----------------------------------------------------------------------------- 43 #define SLIDER_CONSTRAINT_DEF_CFM (btScalar(0.f)) 44 45 46 enum 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 45 62 46 63 class btSliderConstraint : public btTypedConstraint … … 49 66 ///for backwards compatibility during the transition to 'getInfo/getInfo2' 50 67 bool m_useSolveConstraintObsolete; 68 bool m_useOffsetForConstraintFrame; 51 69 btTransform m_frameInA; 52 70 btTransform m_frameInB; … … 68 86 btScalar m_restitutionDirLin; 69 87 btScalar m_dampingDirLin; 88 btScalar m_cfmDirLin; 89 70 90 btScalar m_softnessDirAng; 71 91 btScalar m_restitutionDirAng; 72 92 btScalar m_dampingDirAng; 93 btScalar m_cfmDirAng; 94 73 95 btScalar m_softnessLimLin; 74 96 btScalar m_restitutionLimLin; 75 97 btScalar m_dampingLimLin; 98 btScalar m_cfmLimLin; 99 76 100 btScalar m_softnessLimAng; 77 101 btScalar m_restitutionLimAng; 78 102 btScalar m_dampingLimAng; 103 btScalar m_cfmLimAng; 104 79 105 btScalar m_softnessOrthoLin; 80 106 btScalar m_restitutionOrthoLin; 81 107 btScalar m_dampingOrthoLin; 108 btScalar m_cfmOrthoLin; 109 82 110 btScalar m_softnessOrthoAng; 83 111 btScalar m_restitutionOrthoAng; 84 112 btScalar m_dampingOrthoAng; 113 btScalar m_cfmOrthoAng; 85 114 86 115 // for interlal use 87 116 bool m_solveLinLim; 88 117 bool m_solveAngLim; 118 119 int m_flags; 89 120 90 121 btJacobianEntry m_jacLin[3]; … … 127 158 // constructors 128 159 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 130 162 // overrides 131 virtual void buildJacobian(); 163 132 164 virtual void getInfo1 (btConstraintInfo1* info); 165 166 void getInfo1NonVirtual(btConstraintInfo1* info); 133 167 134 168 virtual void getInfo2 (btConstraintInfo2* info); 135 169 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 138 172 139 173 // access … … 151 185 void setUpperLinLimit(btScalar upperLimit) { m_upperLinLimit = upperLimit; } 152 186 btScalar getLowerAngLimit() { return m_lowerAngLimit; } 153 void setLowerAngLimit(btScalar lowerLimit) { m_lowerAngLimit = lowerLimit; }187 void setLowerAngLimit(btScalar lowerLimit) { m_lowerAngLimit = btNormalizeAngle(lowerLimit); } 154 188 btScalar getUpperAngLimit() { return m_upperAngLimit; } 155 void setUpperAngLimit(btScalar upperLimit) { m_upperAngLimit = upperLimit; }189 void setUpperAngLimit(btScalar upperLimit) { m_upperAngLimit = btNormalizeAngle(upperLimit); } 156 190 bool getUseLinearReferenceFrameA() { return m_useLinearReferenceFrameA; } 157 191 btScalar getSoftnessDirLin() { return m_softnessDirLin; } … … 211 245 bool getSolveAngLimit() { return m_solveAngLim; } 212 246 btScalar getAngDepth() { return m_angDepth; } 213 // internal214 void buildJacobianInt(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB);215 void solveConstraintInt(btRigidBody& rbA, btSolverBody& bodyA,btRigidBody& rbB, btSolverBody& bodyB);216 247 // 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(); 221 251 // 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 224 270 }; 225 271 226 //----------------------------------------------------------------------------- 272 ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 273 struct 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 291 SIMD_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) 297 SIMD_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 227 319 228 320 #endif //SLIDER_CONSTRAINT_H
Note: See TracChangeset
for help on using the changeset viewer.