Changeset 8393 for code/trunk/src/external/bullet/BulletDynamics/ConstraintSolver/btHingeConstraint.h
- Timestamp:
- May 3, 2011, 5:07:42 AM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk/src/external/bullet/BulletDynamics/ConstraintSolver/btHingeConstraint.h
r8351 r8393 16 16 /* Hinge Constraint by Dirk Gregorius. Limits added by Marcus Hennix at Starbreeze Studios */ 17 17 18 #ifndef HINGECONSTRAINT_H 19 #define HINGECONSTRAINT_H 18 #ifndef BT_HINGECONSTRAINT_H 19 #define BT_HINGECONSTRAINT_H 20 21 #define _BT_USE_CENTER_LIMIT_ 1 22 20 23 21 24 #include "LinearMath/btVector3.h" … … 32 35 #define btHingeConstraintDataName "btHingeConstraintFloatData" 33 36 #endif //BT_USE_DOUBLE_PRECISION 37 34 38 35 39 … … 58 62 btScalar m_maxMotorImpulse; 59 63 64 65 #ifdef _BT_USE_CENTER_LIMIT_ 66 btAngularLimit m_limit; 67 #else 68 btScalar m_lowerLimit; 69 btScalar m_upperLimit; 70 btScalar m_limitSign; 71 btScalar m_correction; 72 60 73 btScalar m_limitSoftness; 61 74 btScalar m_biasFactor; 62 btScalar 63 64 b tScalar m_lowerLimit;65 btScalar m_upperLimit; 66 75 btScalar m_relaxationFactor; 76 77 bool m_solveLimit; 78 #endif 79 67 80 btScalar m_kHinge; 68 81 69 btScalar m_limitSign;70 btScalar m_correction;71 82 72 83 btScalar m_accLimitImpulse; 73 84 btScalar m_hingeAngle; 74 btScalar 85 btScalar m_referenceSign; 75 86 76 87 bool m_angularOnly; 77 88 bool m_enableAngularMotor; 78 bool m_solveLimit;79 89 bool m_useSolveConstraintObsolete; 80 90 bool m_useOffsetForConstraintFrame; … … 133 143 { 134 144 return m_rbB; 135 } 145 } 146 147 btTransform& getFrameOffsetA() 148 { 149 return m_rbAFrame; 150 } 151 152 btTransform& getFrameOffsetB() 153 { 154 return m_rbBFrame; 155 } 156 157 void setFrames(const btTransform& frameA, const btTransform& frameB); 136 158 137 159 void setAngularOnly(bool angularOnly) … … 158 180 void setLimit(btScalar low,btScalar high,btScalar _softness = 0.9f, btScalar _biasFactor = 0.3f, btScalar _relaxationFactor = 1.0f) 159 181 { 182 #ifdef _BT_USE_CENTER_LIMIT_ 183 m_limit.set(low, high, _softness, _biasFactor, _relaxationFactor); 184 #else 160 185 m_lowerLimit = btNormalizeAngle(low); 161 186 m_upperLimit = btNormalizeAngle(high); 162 163 187 m_limitSoftness = _softness; 164 188 m_biasFactor = _biasFactor; 165 189 m_relaxationFactor = _relaxationFactor; 166 190 #endif 167 191 } 168 192 … … 183 207 btVector3 rbAxisB2 = axisInB.cross(rbAxisB1); 184 208 185 186 m_rbBFrame.getOrigin() = m_rbA.getCenterOfMassTransform()(pivotInA); 209 m_rbBFrame.getOrigin() = m_rbB.getCenterOfMassTransform().inverse()(m_rbA.getCenterOfMassTransform()(pivotInA)); 210 187 211 m_rbBFrame.getBasis().setValue( rbAxisB1.getX(),rbAxisB2.getX(),axisInB.getX(), 188 212 rbAxisB1.getY(),rbAxisB2.getY(),axisInB.getY(), 189 213 rbAxisB1.getZ(),rbAxisB2.getZ(),axisInB.getZ() ); 214 m_rbBFrame.getBasis() = m_rbB.getCenterOfMassTransform().getBasis().inverse() * m_rbBFrame.getBasis(); 215 190 216 } 191 217 192 218 btScalar getLowerLimit() const 193 219 { 194 return m_lowerLimit; 220 #ifdef _BT_USE_CENTER_LIMIT_ 221 return m_limit.getLow(); 222 #else 223 return m_lowerLimit; 224 #endif 195 225 } 196 226 197 227 btScalar getUpperLimit() const 198 228 { 199 return m_upperLimit; 229 #ifdef _BT_USE_CENTER_LIMIT_ 230 return m_limit.getHigh(); 231 #else 232 return m_upperLimit; 233 #endif 200 234 } 201 235 … … 216 250 inline int getSolveLimit() 217 251 { 218 return m_solveLimit; 252 #ifdef _BT_USE_CENTER_LIMIT_ 253 return m_limit.isLimit(); 254 #else 255 return m_solveLimit; 256 #endif 219 257 } 220 258 221 259 inline btScalar getLimitSign() 222 260 { 261 #ifdef _BT_USE_CENTER_LIMIT_ 262 return m_limit.getSign(); 263 #else 223 264 return m_limitSign; 265 #endif 224 266 } 225 267 … … 320 362 hingeData->m_motorTargetVelocity = float(m_motorTargetVelocity); 321 363 hingeData->m_useReferenceFrameA = m_useReferenceFrameA; 322 364 #ifdef _BT_USE_CENTER_LIMIT_ 365 hingeData->m_lowerLimit = float(m_limit.getLow()); 366 hingeData->m_upperLimit = float(m_limit.getHigh()); 367 hingeData->m_limitSoftness = float(m_limit.getSoftness()); 368 hingeData->m_biasFactor = float(m_limit.getBiasFactor()); 369 hingeData->m_relaxationFactor = float(m_limit.getRelaxationFactor()); 370 #else 323 371 hingeData->m_lowerLimit = float(m_lowerLimit); 324 372 hingeData->m_upperLimit = float(m_upperLimit); … … 326 374 hingeData->m_biasFactor = float(m_biasFactor); 327 375 hingeData->m_relaxationFactor = float(m_relaxationFactor); 376 #endif 328 377 329 378 return btHingeConstraintDataName; 330 379 } 331 380 332 #endif // HINGECONSTRAINT_H381 #endif //BT_HINGECONSTRAINT_H
Note: See TracChangeset
for help on using the changeset viewer.