Bullet Collision Detection & Physics Library
btGeneric6DofSpring2Constraint.h
Go to the documentation of this file.
1 /*
2 Bullet Continuous Collision Detection and Physics Library
3 Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
4 
5 This software is provided 'as-is', without any express or implied warranty.
6 In no event will the authors be held liable for any damages arising from the use of this software.
7 Permission is granted to anyone to use this software for any purpose,
8 including commercial applications, and to alter it and redistribute it freely,
9 subject to the following restrictions:
10 
11 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
12 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
13 3. This notice may not be removed or altered from any source distribution.
14 */
15 
16 /*
17 2014 May: btGeneric6DofSpring2Constraint is created from the original (2.82.2712) btGeneric6DofConstraint by Gabor Puhr and Tamas Umenhoffer
18 Pros:
19 - Much more accurate and stable in a lot of situation. (Especially when a sleeping chain of RBs connected with 6dof2 is pulled)
20 - Stable and accurate spring with minimal energy loss that works with all of the solvers. (latter is not true for the original 6dof spring)
21 - Servo motor functionality
22 - Much more accurate bouncing. 0 really means zero bouncing (not true for the original 6odf) and there is only a minimal energy loss when the value is 1 (because of the solvers' precision)
23 - Rotation order for the Euler system can be set. (One axis' freedom is still limited to pi/2)
24 
25 Cons:
26 - It is slower than the original 6dof. There is no exact ratio, but half speed is a good estimation.
27 - At bouncing the correct velocity is calculated, but not the correct position. (it is because of the solver can correct position or velocity, but not both.)
28 */
29 
32 
33 /*
34 2007-09-09
35 btGeneric6DofConstraint Refactored by Francisco Le?n
36 email: projectileman@yahoo.com
37 http://gimpact.sf.net
38 */
39 
40 
41 #ifndef BT_GENERIC_6DOF_CONSTRAINT2_H
42 #define BT_GENERIC_6DOF_CONSTRAINT2_H
43 
44 #include "LinearMath/btVector3.h"
45 #include "btJacobianEntry.h"
46 #include "btTypedConstraint.h"
47 
48 class btRigidBody;
49 
50 
51 #ifdef BT_USE_DOUBLE_PRECISION
52 #define btGeneric6DofSpring2ConstraintData2 btGeneric6DofSpring2ConstraintDoubleData2
53 #define btGeneric6DofSpring2ConstraintDataName "btGeneric6DofSpring2ConstraintDoubleData2"
54 #else
55 #define btGeneric6DofSpring2ConstraintData2 btGeneric6DofSpring2ConstraintData
56 #define btGeneric6DofSpring2ConstraintDataName "btGeneric6DofSpring2ConstraintData"
57 #endif //BT_USE_DOUBLE_PRECISION
58 
60 {
61  RO_XYZ=0,
67 };
68 
70 {
71 public:
72 // upper < lower means free
73 // upper == lower means locked
74 // upper > lower means limited
93 
98 
100  {
101  m_loLimit = 1.0f;
102  m_hiLimit = -1.0f;
103  m_bounce = 0.0f;
104  m_stopERP = 0.2f;
105  m_stopCFM = 0.f;
106  m_motorERP = 0.9f;
107  m_motorCFM = 0.f;
108  m_enableMotor = false;
109  m_targetVelocity = 0;
110  m_maxMotorForce = 0.1f;
111  m_servoMotor = false;
112  m_servoTarget = 0;
113  m_enableSpring = false;
114  m_springStiffness = 0;
115  m_springStiffnessLimited = false;
116  m_springDamping = 0;
117  m_springDampingLimited = false;
118  m_equilibriumPoint = 0;
119 
122  m_currentPosition = 0;
123  m_currentLimit = 0;
124  }
125 
127  {
128  m_loLimit = limot.m_loLimit;
129  m_hiLimit = limot.m_hiLimit;
130  m_bounce = limot.m_bounce;
131  m_stopERP = limot.m_stopERP;
132  m_stopCFM = limot.m_stopCFM;
133  m_motorERP = limot.m_motorERP;
134  m_motorCFM = limot.m_motorCFM;
138  m_servoMotor = limot.m_servoMotor;
146 
151  }
152 
153 
154  bool isLimited()
155  {
156  if(m_loLimit > m_hiLimit) return false;
157  return true;
158  }
159 
160  void testLimitValue(btScalar test_value);
161 };
162 
163 
164 
166 {
167 public:
168 // upper < lower means free
169 // upper == lower means locked
170 // upper > lower means limited
178  bool m_enableMotor[3];
179  bool m_servoMotor[3];
180  bool m_enableSpring[3];
189 
194 
196  {
197  m_lowerLimit .setValue(0.f , 0.f , 0.f );
198  m_upperLimit .setValue(0.f , 0.f , 0.f );
199  m_bounce .setValue(0.f , 0.f , 0.f );
200  m_stopERP .setValue(0.2f, 0.2f, 0.2f);
201  m_stopCFM .setValue(0.f , 0.f , 0.f );
202  m_motorERP .setValue(0.9f, 0.9f, 0.9f);
203  m_motorCFM .setValue(0.f , 0.f , 0.f );
204 
205  m_currentLimitError .setValue(0.f , 0.f , 0.f );
206  m_currentLimitErrorHi.setValue(0.f , 0.f , 0.f );
207  m_currentLinearDiff .setValue(0.f , 0.f , 0.f );
208 
209  for(int i=0; i < 3; i++)
210  {
211  m_enableMotor[i] = false;
212  m_servoMotor[i] = false;
213  m_enableSpring[i] = false;
214  m_servoTarget[i] = btScalar(0.f);
215  m_springStiffness[i] = btScalar(0.f);
216  m_springStiffnessLimited[i] = false;
217  m_springDamping[i] = btScalar(0.f);
218  m_springDampingLimited[i] = false;
219  m_equilibriumPoint[i] = btScalar(0.f);
220  m_targetVelocity[i] = btScalar(0.f);
221  m_maxMotorForce[i] = btScalar(0.f);
222 
223  m_currentLimit[i] = 0;
224  }
225  }
226 
228  {
229  m_lowerLimit = other.m_lowerLimit;
230  m_upperLimit = other.m_upperLimit;
231  m_bounce = other.m_bounce;
232  m_stopERP = other.m_stopERP;
233  m_stopCFM = other.m_stopCFM;
234  m_motorERP = other.m_motorERP;
235  m_motorCFM = other.m_motorCFM;
236 
240 
241  for(int i=0; i < 3; i++)
242  {
243  m_enableMotor[i] = other.m_enableMotor[i];
244  m_servoMotor[i] = other.m_servoMotor[i];
245  m_enableSpring[i] = other.m_enableSpring[i];
246  m_servoTarget[i] = other.m_servoTarget[i];
247  m_springStiffness[i] = other.m_springStiffness[i];
249  m_springDamping[i] = other.m_springDamping[i];
252  m_targetVelocity[i] = other.m_targetVelocity[i];
253  m_maxMotorForce[i] = other.m_maxMotorForce[i];
254 
255  m_currentLimit[i] = other.m_currentLimit[i];
256  }
257  }
258 
259  inline bool isLimited(int limitIndex)
260  {
261  return (m_upperLimit[limitIndex] >= m_lowerLimit[limitIndex]);
262  }
263 
264  void testLimitValue(int limitIndex, btScalar test_value);
265 };
266 
268 {
273 };
274 #define BT_6DOF_FLAGS_AXIS_SHIFT2 4 // bits per axis
275 
276 
278 {
279 protected:
280 
283 
284  btJacobianEntry m_jacLinear[3];
285  btJacobianEntry m_jacAng[3];
286 
288  btRotationalLimitMotor2 m_angularLimits[3];
289 
291 
292 protected:
293 
297  btVector3 m_calculatedAxis[3];
302  int m_flags;
303 
305  {
306  btAssert(0);
307  return *this;
308  }
309 
310  int setAngularLimits(btConstraintInfo2 *info, int row_offset,const btTransform& transA,const btTransform& transB,const btVector3& linVelA,const btVector3& linVelB,const btVector3& angVelA,const btVector3& angVelB);
311  int setLinearLimits(btConstraintInfo2 *info, int row, const btTransform& transA,const btTransform& transB,const btVector3& linVelA,const btVector3& linVelB,const btVector3& angVelA,const btVector3& angVelB);
312 
313  void calculateLinearInfo();
314  void calculateAngleInfo();
315  void testAngularLimitMotor(int axis_index);
316 
317  void calculateJacobi(btRotationalLimitMotor2* limot, const btTransform& transA,const btTransform& transB, btConstraintInfo2* info, int srow, btVector3& ax1, int rotational, int rotAllowed);
318  int get_limit_motor_info2(btRotationalLimitMotor2* limot,
319  const btTransform& transA,const btTransform& transB,const btVector3& linVelA,const btVector3& linVelB,const btVector3& angVelA,const btVector3& angVelB,
320  btConstraintInfo2* info, int row, btVector3& ax1, int rotational, int rotAllowed = false);
321 
322 public:
323 
325 
326  btGeneric6DofSpring2Constraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB, RotateOrder rotOrder = RO_XYZ);
327  btGeneric6DofSpring2Constraint(btRigidBody& rbB, const btTransform& frameInB, RotateOrder rotOrder = RO_XYZ);
328 
329  virtual void buildJacobian() {}
330  virtual void getInfo1 (btConstraintInfo1* info);
331  virtual void getInfo2 (btConstraintInfo2* info);
332  virtual int calculateSerializeBufferSize() const;
333  virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
334 
335  btRotationalLimitMotor2* getRotationalLimitMotor(int index) { return &m_angularLimits[index]; }
337 
338  // Calculates the global transform for the joint offset for body A an B, and also calculates the angle differences between the bodies.
339  void calculateTransforms(const btTransform& transA,const btTransform& transB);
340  void calculateTransforms();
341 
342  // Gets the global transform of the offset for body A
343  const btTransform & getCalculatedTransformA() const { return m_calculatedTransformA; }
344  // Gets the global transform of the offset for body B
345  const btTransform & getCalculatedTransformB() const { return m_calculatedTransformB; }
346 
347  const btTransform & getFrameOffsetA() const { return m_frameInA; }
348  const btTransform & getFrameOffsetB() const { return m_frameInB; }
349 
350  btTransform & getFrameOffsetA() { return m_frameInA; }
351  btTransform & getFrameOffsetB() { return m_frameInB; }
352 
353  // Get the rotation axis in global coordinates ( btGeneric6DofSpring2Constraint::calculateTransforms() must be called previously )
354  btVector3 getAxis(int axis_index) const { return m_calculatedAxis[axis_index]; }
355 
356  // Get the relative Euler angle ( btGeneric6DofSpring2Constraint::calculateTransforms() must be called previously )
357  btScalar getAngle(int axis_index) const { return m_calculatedAxisAngleDiff[axis_index]; }
358 
359  // Get the relative position of the constraint pivot ( btGeneric6DofSpring2Constraint::calculateTransforms() must be called previously )
360  btScalar getRelativePivotPosition(int axis_index) const { return m_calculatedLinearDiff[axis_index]; }
361 
362  void setFrames(const btTransform & frameA, const btTransform & frameB);
363 
364  void setLinearLowerLimit(const btVector3& linearLower) { m_linearLimits.m_lowerLimit = linearLower; }
365  void getLinearLowerLimit(btVector3& linearLower) { linearLower = m_linearLimits.m_lowerLimit; }
366  void setLinearUpperLimit(const btVector3& linearUpper) { m_linearLimits.m_upperLimit = linearUpper; }
367  void getLinearUpperLimit(btVector3& linearUpper) { linearUpper = m_linearLimits.m_upperLimit; }
368 
369  void setAngularLowerLimit(const btVector3& angularLower)
370  {
371  for(int i = 0; i < 3; i++)
372  m_angularLimits[i].m_loLimit = btNormalizeAngle(angularLower[i]);
373  }
374 
375  void setAngularLowerLimitReversed(const btVector3& angularLower)
376  {
377  for(int i = 0; i < 3; i++)
378  m_angularLimits[i].m_hiLimit = btNormalizeAngle(-angularLower[i]);
379  }
380 
381  void getAngularLowerLimit(btVector3& angularLower)
382  {
383  for(int i = 0; i < 3; i++)
384  angularLower[i] = m_angularLimits[i].m_loLimit;
385  }
386 
388  {
389  for(int i = 0; i < 3; i++)
390  angularLower[i] = -m_angularLimits[i].m_hiLimit;
391  }
392 
393  void setAngularUpperLimit(const btVector3& angularUpper)
394  {
395  for(int i = 0; i < 3; i++)
396  m_angularLimits[i].m_hiLimit = btNormalizeAngle(angularUpper[i]);
397  }
398 
399  void setAngularUpperLimitReversed(const btVector3& angularUpper)
400  {
401  for(int i = 0; i < 3; i++)
402  m_angularLimits[i].m_loLimit = btNormalizeAngle(-angularUpper[i]);
403  }
404 
405  void getAngularUpperLimit(btVector3& angularUpper)
406  {
407  for(int i = 0; i < 3; i++)
408  angularUpper[i] = m_angularLimits[i].m_hiLimit;
409  }
410 
412  {
413  for(int i = 0; i < 3; i++)
414  angularUpper[i] = -m_angularLimits[i].m_loLimit;
415  }
416 
417  //first 3 are linear, next 3 are angular
418 
419  void setLimit(int axis, btScalar lo, btScalar hi)
420  {
421  if(axis<3)
422  {
423  m_linearLimits.m_lowerLimit[axis] = lo;
424  m_linearLimits.m_upperLimit[axis] = hi;
425  }
426  else
427  {
428  lo = btNormalizeAngle(lo);
429  hi = btNormalizeAngle(hi);
430  m_angularLimits[axis-3].m_loLimit = lo;
431  m_angularLimits[axis-3].m_hiLimit = hi;
432  }
433  }
434 
435  void setLimitReversed(int axis, btScalar lo, btScalar hi)
436  {
437  if(axis<3)
438  {
439  m_linearLimits.m_lowerLimit[axis] = lo;
440  m_linearLimits.m_upperLimit[axis] = hi;
441  }
442  else
443  {
444  lo = btNormalizeAngle(lo);
445  hi = btNormalizeAngle(hi);
446  m_angularLimits[axis-3].m_hiLimit = -lo;
447  m_angularLimits[axis-3].m_loLimit = -hi;
448  }
449  }
450 
451  bool isLimited(int limitIndex)
452  {
453  if(limitIndex<3)
454  {
455  return m_linearLimits.isLimited(limitIndex);
456  }
457  return m_angularLimits[limitIndex-3].isLimited();
458  }
459 
460  void setRotationOrder(RotateOrder order) { m_rotateOrder = order; }
461  RotateOrder getRotationOrder() { return m_rotateOrder; }
462 
463  void setAxis( const btVector3& axis1, const btVector3& axis2);
464 
465  void setBounce(int index, btScalar bounce);
466 
467  void enableMotor(int index, bool onOff);
468  void setServo(int index, bool onOff); // set the type of the motor (servo or not) (the motor has to be turned on for servo also)
469  void setTargetVelocity(int index, btScalar velocity);
470  void setServoTarget(int index, btScalar target);
471  void setMaxMotorForce(int index, btScalar force);
472 
473  void enableSpring(int index, bool onOff);
474  void setStiffness(int index, btScalar stiffness, bool limitIfNeeded = true); // if limitIfNeeded is true the system will automatically limit the stiffness in necessary situations where otherwise the spring would move unrealistically too widely
475  void setDamping(int index, btScalar damping, bool limitIfNeeded = true); // if limitIfNeeded is true the system will automatically limit the damping in necessary situations where otherwise the spring would blow up
476  void setEquilibriumPoint(); // set the current constraint position/orientation as an equilibrium point for all DOF
477  void setEquilibriumPoint(int index); // set the current constraint position/orientation as an equilibrium point for given DOF
478  void setEquilibriumPoint(int index, btScalar val);
479 
480  //override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5).
481  //If no axis is provided, it uses the default axis for this constraint.
482  virtual void setParam(int num, btScalar value, int axis = -1);
483  virtual btScalar getParam(int num, int axis = -1) const;
484 
485  static btScalar btGetMatrixElem(const btMatrix3x3& mat, int index);
486  static bool matrixToEulerXYZ(const btMatrix3x3& mat,btVector3& xyz);
487  static bool matrixToEulerXZY(const btMatrix3x3& mat,btVector3& xyz);
488  static bool matrixToEulerYXZ(const btMatrix3x3& mat,btVector3& xyz);
489  static bool matrixToEulerYZX(const btMatrix3x3& mat,btVector3& xyz);
490  static bool matrixToEulerZXY(const btMatrix3x3& mat,btVector3& xyz);
491  static bool matrixToEulerZYX(const btMatrix3x3& mat,btVector3& xyz);
492 };
493 
494 
496 {
500 
519  char m_padding1[4];
520 
539 
541 };
542 
544 {
548 
567  char m_padding1[4];
568 
587 
589 };
590 
592 {
594 }
595 
596 SIMD_FORCE_INLINE const char* btGeneric6DofSpring2Constraint::serialize(void* dataBuffer, btSerializer* serializer) const
597 {
599  btTypedConstraint::serialize(&dof->m_typeConstraintData,serializer);
600 
601  m_frameInA.serialize(dof->m_rbAFrame);
602  m_frameInB.serialize(dof->m_rbBFrame);
603 
604  int i;
605  for (i=0;i<3;i++)
606  {
607  dof->m_angularLowerLimit.m_floats[i] = m_angularLimits[i].m_loLimit;
608  dof->m_angularUpperLimit.m_floats[i] = m_angularLimits[i].m_hiLimit;
609  dof->m_angularBounce.m_floats[i] = m_angularLimits[i].m_bounce;
610  dof->m_angularStopERP.m_floats[i] = m_angularLimits[i].m_stopERP;
611  dof->m_angularStopCFM.m_floats[i] = m_angularLimits[i].m_stopCFM;
612  dof->m_angularMotorERP.m_floats[i] = m_angularLimits[i].m_motorERP;
613  dof->m_angularMotorCFM.m_floats[i] = m_angularLimits[i].m_motorCFM;
614  dof->m_angularTargetVelocity.m_floats[i] = m_angularLimits[i].m_targetVelocity;
615  dof->m_angularMaxMotorForce.m_floats[i] = m_angularLimits[i].m_maxMotorForce;
616  dof->m_angularServoTarget.m_floats[i] = m_angularLimits[i].m_servoTarget;
617  dof->m_angularSpringStiffness.m_floats[i] = m_angularLimits[i].m_springStiffness;
618  dof->m_angularSpringDamping.m_floats[i] = m_angularLimits[i].m_springDamping;
619  dof->m_angularEquilibriumPoint.m_floats[i] = m_angularLimits[i].m_equilibriumPoint;
620  }
621  dof->m_angularLowerLimit.m_floats[3] = 0;
622  dof->m_angularUpperLimit.m_floats[3] = 0;
623  dof->m_angularBounce.m_floats[3] = 0;
624  dof->m_angularStopERP.m_floats[3] = 0;
625  dof->m_angularStopCFM.m_floats[3] = 0;
626  dof->m_angularMotorERP.m_floats[3] = 0;
627  dof->m_angularMotorCFM.m_floats[3] = 0;
628  dof->m_angularTargetVelocity.m_floats[3] = 0;
629  dof->m_angularMaxMotorForce.m_floats[3] = 0;
630  dof->m_angularServoTarget.m_floats[3] = 0;
631  dof->m_angularSpringStiffness.m_floats[3] = 0;
632  dof->m_angularSpringDamping.m_floats[3] = 0;
633  dof->m_angularEquilibriumPoint.m_floats[3] = 0;
634  for (i=0;i<4;i++)
635  {
636  dof->m_angularEnableMotor[i] = i < 3 ? ( m_angularLimits[i].m_enableMotor ? 1 : 0 ) : 0;
637  dof->m_angularServoMotor[i] = i < 3 ? ( m_angularLimits[i].m_servoMotor ? 1 : 0 ) : 0;
638  dof->m_angularEnableSpring[i] = i < 3 ? ( m_angularLimits[i].m_enableSpring ? 1 : 0 ) : 0;
639  dof->m_angularSpringStiffnessLimited[i] = i < 3 ? ( m_angularLimits[i].m_springStiffnessLimited ? 1 : 0 ) : 0;
640  dof->m_angularSpringDampingLimited[i] = i < 3 ? ( m_angularLimits[i].m_springDampingLimited ? 1 : 0 ) : 0;
641  }
642 
643  m_linearLimits.m_lowerLimit.serialize( dof->m_linearLowerLimit );
644  m_linearLimits.m_upperLimit.serialize( dof->m_linearUpperLimit );
645  m_linearLimits.m_bounce.serialize( dof->m_linearBounce );
646  m_linearLimits.m_stopERP.serialize( dof->m_linearStopERP );
647  m_linearLimits.m_stopCFM.serialize( dof->m_linearStopCFM );
648  m_linearLimits.m_motorERP.serialize( dof->m_linearMotorERP );
649  m_linearLimits.m_motorCFM.serialize( dof->m_linearMotorCFM );
650  m_linearLimits.m_targetVelocity.serialize( dof->m_linearTargetVelocity );
651  m_linearLimits.m_maxMotorForce.serialize( dof->m_linearMaxMotorForce );
652  m_linearLimits.m_servoTarget.serialize( dof->m_linearServoTarget );
653  m_linearLimits.m_springStiffness.serialize( dof->m_linearSpringStiffness );
654  m_linearLimits.m_springDamping.serialize( dof->m_linearSpringDamping );
655  m_linearLimits.m_equilibriumPoint.serialize( dof->m_linearEquilibriumPoint );
656  for (i=0;i<4;i++)
657  {
658  dof->m_linearEnableMotor[i] = i < 3 ? ( m_linearLimits.m_enableMotor[i] ? 1 : 0 ) : 0;
659  dof->m_linearServoMotor[i] = i < 3 ? ( m_linearLimits.m_servoMotor[i] ? 1 : 0 ) : 0;
660  dof->m_linearEnableSpring[i] = i < 3 ? ( m_linearLimits.m_enableSpring[i] ? 1 : 0 ) : 0;
661  dof->m_linearSpringStiffnessLimited[i] = i < 3 ? ( m_linearLimits.m_springStiffnessLimited[i] ? 1 : 0 ) : 0;
662  dof->m_linearSpringDampingLimited[i] = i < 3 ? ( m_linearLimits.m_springDampingLimited[i] ? 1 : 0 ) : 0;
663  }
664 
665  dof->m_rotateOrder = m_rotateOrder;
666 
667  dof->m_padding1[0] = 0;
668  dof->m_padding1[1] = 0;
669  dof->m_padding1[2] = 0;
670  dof->m_padding1[3] = 0;
671 
673 }
674 
675 
676 
677 
678 
679 #endif //BT_GENERIC_6DOF_CONSTRAINT_H
btGeneric6DofSpring2ConstraintData::m_angularSpringDampingLimited
char m_angularSpringDampingLimited[4]
Definition: btGeneric6DofSpring2Constraint.h:538
btTranslationalLimitMotor2::m_springStiffnessLimited
bool m_springStiffnessLimited[3]
Definition: btGeneric6DofSpring2Constraint.h:183
btTypedConstraint
TypedConstraint is the baseclass for Bullet constraints and vehicles.
Definition: btTypedConstraint.h:78
btTransformDoubleData
Definition: btTransform.h:259
btTranslationalLimitMotor2::m_motorERP
btVector3 m_motorERP
Definition: btGeneric6DofSpring2Constraint.h:176
btRotationalLimitMotor2::m_servoMotor
bool m_servoMotor
Definition: btGeneric6DofSpring2Constraint.h:85
btGeneric6DofSpring2ConstraintData::m_linearEnableSpring
char m_linearEnableSpring[4]
Definition: btGeneric6DofSpring2Constraint.h:516
btVector3::serialize
void serialize(struct btVector3Data &dataOut) const
Definition: btVector3.h:1351
RO_XZY
@ RO_XZY
Definition: btGeneric6DofSpring2Constraint.h:62
btRigidBody
The btRigidBody is the main class for rigid body objects.
Definition: btRigidBody.h:62
RO_XYZ
@ RO_XYZ
Definition: btGeneric6DofSpring2Constraint.h:61
btRotationalLimitMotor2::isLimited
bool isLimited()
Definition: btGeneric6DofSpring2Constraint.h:154
btGeneric6DofSpring2Constraint::m_factB
btScalar m_factB
Definition: btGeneric6DofSpring2Constraint.h:300
btTranslationalLimitMotor2::isLimited
bool isLimited(int limitIndex)
Definition: btGeneric6DofSpring2Constraint.h:259
btGeneric6DofSpring2ConstraintData::m_rotateOrder
int m_rotateOrder
Definition: btGeneric6DofSpring2Constraint.h:540
btGeneric6DofSpring2ConstraintData::m_linearLowerLimit
btVector3FloatData m_linearLowerLimit
Definition: btGeneric6DofSpring2Constraint.h:502
btGeneric6DofSpring2Constraint::setLinearUpperLimit
void setLinearUpperLimit(const btVector3 &linearUpper)
Definition: btGeneric6DofSpring2Constraint.h:366
btGeneric6DofSpring2ConstraintDoubleData2::m_linearTargetVelocity
btVector3DoubleData m_linearTargetVelocity
Definition: btGeneric6DofSpring2Constraint.h:556
btGeneric6DofSpring2ConstraintData::m_rbBFrame
btTransformFloatData m_rbBFrame
Definition: btGeneric6DofSpring2Constraint.h:499
btGeneric6DofSpring2Constraint::getRelativePivotPosition
btScalar getRelativePivotPosition(int axis_index) const
Definition: btGeneric6DofSpring2Constraint.h:360
btGeneric6DofSpring2ConstraintData::m_angularSpringDamping
btVector3FloatData m_angularSpringDamping
Definition: btGeneric6DofSpring2Constraint.h:532
btGeneric6DofSpring2Constraint::getFrameOffsetB
btTransform & getFrameOffsetB()
Definition: btGeneric6DofSpring2Constraint.h:351
btGeneric6DofSpring2ConstraintDoubleData2::m_angularMaxMotorForce
btVector3DoubleData m_angularMaxMotorForce
Definition: btGeneric6DofSpring2Constraint.h:577
btTranslationalLimitMotor2::m_currentLimitError
btVector3 m_currentLimitError
Definition: btGeneric6DofSpring2Constraint.h:190
btGeneric6DofSpring2Constraint::getFrameOffsetA
const btTransform & getFrameOffsetA() const
Definition: btGeneric6DofSpring2Constraint.h:347
btGeneric6DofSpring2Constraint::getAngularUpperLimitReversed
void getAngularUpperLimitReversed(btVector3 &angularUpper)
Definition: btGeneric6DofSpring2Constraint.h:411
btTranslationalLimitMotor2::m_targetVelocity
btVector3 m_targetVelocity
Definition: btGeneric6DofSpring2Constraint.h:187
btGeneric6DofSpring2ConstraintDoubleData2::m_linearEnableMotor
char m_linearEnableMotor[4]
Definition: btGeneric6DofSpring2Constraint.h:562
RO_YZX
@ RO_YZX
Definition: btGeneric6DofSpring2Constraint.h:64
btRotationalLimitMotor2::m_equilibriumPoint
btScalar m_equilibriumPoint
Definition: btGeneric6DofSpring2Constraint.h:92
btVector3::setValue
void setValue(const btScalar &_x, const btScalar &_y, const btScalar &_z)
Definition: btVector3.h:652
btGeneric6DofSpring2ConstraintData::m_linearBounce
btVector3FloatData m_linearBounce
Definition: btGeneric6DofSpring2Constraint.h:503
RotateOrder
RotateOrder
Definition: btGeneric6DofSpring2Constraint.h:59
btScalar
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
Definition: btScalar.h:292
btGeneric6DofSpring2ConstraintData::m_padding1
char m_padding1[4]
Definition: btGeneric6DofSpring2Constraint.h:519
btGeneric6DofSpring2Constraint::setAngularLowerLimitReversed
void setAngularLowerLimitReversed(const btVector3 &angularLower)
Definition: btGeneric6DofSpring2Constraint.h:375
btGeneric6DofSpring2ConstraintDoubleData2::m_rbBFrame
btTransformDoubleData m_rbBFrame
Definition: btGeneric6DofSpring2Constraint.h:547
btTranslationalLimitMotor2::m_enableSpring
bool m_enableSpring[3]
Definition: btGeneric6DofSpring2Constraint.h:180
btJacobianEntry
Jacobian entry is an abstraction that allows to describe constraints it can be used in combination wi...
Definition: btJacobianEntry.h:30
btGeneric6DofSpring2ConstraintData::m_angularLowerLimit
btVector3FloatData m_angularLowerLimit
Definition: btGeneric6DofSpring2Constraint.h:522
btTranslationalLimitMotor2::m_currentLimit
int m_currentLimit[3]
Definition: btGeneric6DofSpring2Constraint.h:193
btTranslationalLimitMotor2::m_currentLimitErrorHi
btVector3 m_currentLimitErrorHi
Definition: btGeneric6DofSpring2Constraint.h:191
btGeneric6DofSpring2Constraint::setRotationOrder
void setRotationOrder(RotateOrder order)
Definition: btGeneric6DofSpring2Constraint.h:460
btTranslationalLimitMotor2::m_stopERP
btVector3 m_stopERP
Definition: btGeneric6DofSpring2Constraint.h:174
btGeneric6DofSpring2Constraint
Definition: btGeneric6DofSpring2Constraint.h:277
btRotationalLimitMotor2::m_currentPosition
btScalar m_currentPosition
Definition: btGeneric6DofSpring2Constraint.h:96
btGeneric6DofSpring2Constraint::getAngularLowerLimitReversed
void getAngularLowerLimitReversed(btVector3 &angularLower)
Definition: btGeneric6DofSpring2Constraint.h:387
btGeneric6DofSpring2ConstraintData::m_angularUpperLimit
btVector3FloatData m_angularUpperLimit
Definition: btGeneric6DofSpring2Constraint.h:521
btGeneric6DofSpring2ConstraintData::m_angularServoTarget
btVector3FloatData m_angularServoTarget
Definition: btGeneric6DofSpring2Constraint.h:530
btRotationalLimitMotor2::m_currentLimitErrorHi
btScalar m_currentLimitErrorHi
Definition: btGeneric6DofSpring2Constraint.h:95
btGeneric6DofSpring2ConstraintDoubleData2::m_linearSpringDampingLimited
char m_linearSpringDampingLimited[4]
Definition: btGeneric6DofSpring2Constraint.h:566
btGeneric6DofSpring2ConstraintDoubleData2::m_angularEnableSpring
char m_angularEnableSpring[4]
Definition: btGeneric6DofSpring2Constraint.h:584
btGeneric6DofSpring2Constraint::getRotationOrder
RotateOrder getRotationOrder()
Definition: btGeneric6DofSpring2Constraint.h:461
btTranslationalLimitMotor2::m_bounce
btVector3 m_bounce
Definition: btGeneric6DofSpring2Constraint.h:173
btGeneric6DofSpring2ConstraintData::m_linearMaxMotorForce
btVector3FloatData m_linearMaxMotorForce
Definition: btGeneric6DofSpring2Constraint.h:509
btGeneric6DofSpring2Constraint::getCalculatedTransformA
const btTransform & getCalculatedTransformA() const
Definition: btGeneric6DofSpring2Constraint.h:343
bt6DofFlags2
bt6DofFlags2
Definition: btGeneric6DofSpring2Constraint.h:267
btGeneric6DofSpring2ConstraintData::m_angularBounce
btVector3FloatData m_angularBounce
Definition: btGeneric6DofSpring2Constraint.h:523
btGeneric6DofSpring2Constraint::isLimited
bool isLimited(int limitIndex)
Definition: btGeneric6DofSpring2Constraint.h:451
btGetMatrixElem
btScalar btGetMatrixElem(const btMatrix3x3 &mat, int index)
Definition: btGeneric6DofConstraint.cpp:73
btGeneric6DofSpring2ConstraintData::m_linearSpringStiffness
btVector3FloatData m_linearSpringStiffness
Definition: btGeneric6DofSpring2Constraint.h:511
btGeneric6DofSpring2ConstraintData::m_linearMotorCFM
btVector3FloatData m_linearMotorCFM
Definition: btGeneric6DofSpring2Constraint.h:507
btGeneric6DofSpring2Constraint::getAxis
btVector3 getAxis(int axis_index) const
Definition: btGeneric6DofSpring2Constraint.h:354
btTranslationalLimitMotor2::btTranslationalLimitMotor2
btTranslationalLimitMotor2(const btTranslationalLimitMotor2 &other)
Definition: btGeneric6DofSpring2Constraint.h:227
btTranslationalLimitMotor2::testLimitValue
void testLimitValue(int limitIndex, btScalar test_value)
Definition: btGeneric6DofSpring2Constraint.cpp:1154
btGeneric6DofSpring2Constraint::m_factA
btScalar m_factA
Definition: btGeneric6DofSpring2Constraint.h:299
btTranslationalLimitMotor2::btTranslationalLimitMotor2
btTranslationalLimitMotor2()
Definition: btGeneric6DofSpring2Constraint.h:195
btTranslationalLimitMotor2::m_servoTarget
btVector3 m_servoTarget
Definition: btGeneric6DofSpring2Constraint.h:181
btGeneric6DofSpring2ConstraintDoubleData2::m_linearStopERP
btVector3DoubleData m_linearStopERP
Definition: btGeneric6DofSpring2Constraint.h:552
btGeneric6DofSpring2ConstraintDoubleData2::m_linearServoMotor
char m_linearServoMotor[4]
Definition: btGeneric6DofSpring2Constraint.h:563
btRotationalLimitMotor2::m_targetVelocity
btScalar m_targetVelocity
Definition: btGeneric6DofSpring2Constraint.h:83
btGeneric6DofSpring2Constraint::m_calculatedLinearDiff
btVector3 m_calculatedLinearDiff
Definition: btGeneric6DofSpring2Constraint.h:298
btGeneric6DofSpring2ConstraintData::m_linearTargetVelocity
btVector3FloatData m_linearTargetVelocity
Definition: btGeneric6DofSpring2Constraint.h:508
btVector3FloatData
Definition: btVector3.h:1312
btGeneric6DofSpring2ConstraintDoubleData2::m_linearEquilibriumPoint
btVector3DoubleData m_linearEquilibriumPoint
Definition: btGeneric6DofSpring2Constraint.h:561
btRotationalLimitMotor2::m_stopERP
btScalar m_stopERP
Definition: btGeneric6DofSpring2Constraint.h:78
btJacobianEntry.h
btGeneric6DofSpring2ConstraintData::m_angularMaxMotorForce
btVector3FloatData m_angularMaxMotorForce
Definition: btGeneric6DofSpring2Constraint.h:529
btGeneric6DofSpring2Constraint::m_frameInB
btTransform m_frameInB
Definition: btGeneric6DofSpring2Constraint.h:282
btTranslationalLimitMotor2::m_motorCFM
btVector3 m_motorCFM
Definition: btGeneric6DofSpring2Constraint.h:177
btGeneric6DofSpring2Constraint::getTranslationalLimitMotor
btTranslationalLimitMotor2 * getTranslationalLimitMotor()
Definition: btGeneric6DofSpring2Constraint.h:336
btRotationalLimitMotor2::m_currentLimitError
btScalar m_currentLimitError
Definition: btGeneric6DofSpring2Constraint.h:94
btGeneric6DofSpring2ConstraintDoubleData2::m_linearSpringStiffness
btVector3DoubleData m_linearSpringStiffness
Definition: btGeneric6DofSpring2Constraint.h:559
btVector3.h
btGeneric6DofSpring2ConstraintDoubleData2::m_linearBounce
btVector3DoubleData m_linearBounce
Definition: btGeneric6DofSpring2Constraint.h:551
btGeneric6DofSpring2ConstraintDoubleData2::m_angularSpringDamping
btVector3DoubleData m_angularSpringDamping
Definition: btGeneric6DofSpring2Constraint.h:580
btAssert
#define btAssert(x)
Definition: btScalar.h:131
btGeneric6DofSpring2Constraint::m_linearLimits
btTranslationalLimitMotor2 m_linearLimits
Definition: btGeneric6DofSpring2Constraint.h:287
btGeneric6DofSpring2ConstraintDoubleData2::m_angularEnableMotor
char m_angularEnableMotor[4]
Definition: btGeneric6DofSpring2Constraint.h:582
btVector3DoubleData
Definition: btVector3.h:1317
btGeneric6DofSpring2ConstraintData::m_linearServoMotor
char m_linearServoMotor[4]
Definition: btGeneric6DofSpring2Constraint.h:515
btTranslationalLimitMotor2::m_lowerLimit
btVector3 m_lowerLimit
Definition: btGeneric6DofSpring2Constraint.h:171
btTypedConstraint.h
btGeneric6DofSpring2ConstraintDoubleData2::m_angularStopERP
btVector3DoubleData m_angularStopERP
Definition: btGeneric6DofSpring2Constraint.h:572
btGeneric6DofSpring2Constraint::getCalculatedTransformB
const btTransform & getCalculatedTransformB() const
Definition: btGeneric6DofSpring2Constraint.h:345
btGeneric6DofSpring2Constraint::setAngularLowerLimit
void setAngularLowerLimit(const btVector3 &angularLower)
Definition: btGeneric6DofSpring2Constraint.h:369
btGeneric6DofSpring2ConstraintData::m_linearUpperLimit
btVector3FloatData m_linearUpperLimit
Definition: btGeneric6DofSpring2Constraint.h:501
btTranslationalLimitMotor2::m_currentLinearDiff
btVector3 m_currentLinearDiff
Definition: btGeneric6DofSpring2Constraint.h:192
btNormalizeAngle
btScalar btNormalizeAngle(btScalar angleInRadians)
Definition: btScalar.h:759
btRotationalLimitMotor2::m_servoTarget
btScalar m_servoTarget
Definition: btGeneric6DofSpring2Constraint.h:86
btRotationalLimitMotor2::m_springStiffnessLimited
bool m_springStiffnessLimited
Definition: btGeneric6DofSpring2Constraint.h:89
btGeneric6DofSpring2Constraint::m_calculatedTransformB
btTransform m_calculatedTransformB
Definition: btGeneric6DofSpring2Constraint.h:295
btGeneric6DofSpring2Constraint::setLimitReversed
void setLimitReversed(int axis, btScalar lo, btScalar hi)
Definition: btGeneric6DofSpring2Constraint.h:435
btGeneric6DofSpring2ConstraintDoubleData2::m_linearEnableSpring
char m_linearEnableSpring[4]
Definition: btGeneric6DofSpring2Constraint.h:564
btGeneric6DofSpring2ConstraintData::m_angularMotorCFM
btVector3FloatData m_angularMotorCFM
Definition: btGeneric6DofSpring2Constraint.h:527
btGeneric6DofSpring2ConstraintData::m_angularServoMotor
char m_angularServoMotor[4]
Definition: btGeneric6DofSpring2Constraint.h:535
BT_6DOF_FLAGS_ERP_STOP2
@ BT_6DOF_FLAGS_ERP_STOP2
Definition: btGeneric6DofSpring2Constraint.h:270
btRotationalLimitMotor2::m_springDampingLimited
bool m_springDampingLimited
Definition: btGeneric6DofSpring2Constraint.h:91
btGeneric6DofSpring2ConstraintData::m_linearServoTarget
btVector3FloatData m_linearServoTarget
Definition: btGeneric6DofSpring2Constraint.h:510
btTransform::serialize
void serialize(struct btTransformData &dataOut) const
Definition: btTransform.h:267
BT_6DOF_FLAGS_ERP_MOTO2
@ BT_6DOF_FLAGS_ERP_MOTO2
Definition: btGeneric6DofSpring2Constraint.h:272
btGeneric6DofSpring2Constraint::buildJacobian
virtual void buildJacobian()
internal method used by the constraint solver, don't use them directly
Definition: btGeneric6DofSpring2Constraint.h:329
btTranslationalLimitMotor2::m_springDamping
btVector3 m_springDamping
Definition: btGeneric6DofSpring2Constraint.h:184
btGeneric6DofSpring2ConstraintData::m_linearSpringStiffnessLimited
char m_linearSpringStiffnessLimited[4]
Definition: btGeneric6DofSpring2Constraint.h:517
btRotationalLimitMotor2::m_enableSpring
bool m_enableSpring
Definition: btGeneric6DofSpring2Constraint.h:87
btGeneric6DofSpring2ConstraintData2
#define btGeneric6DofSpring2ConstraintData2
Definition: btGeneric6DofSpring2Constraint.h:55
btMatrix3x3
The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with...
Definition: btMatrix3x3.h:48
btGeneric6DofSpring2Constraint::getFrameOffsetB
const btTransform & getFrameOffsetB() const
Definition: btGeneric6DofSpring2Constraint.h:348
btGeneric6DofSpring2ConstraintData::m_rbAFrame
btTransformFloatData m_rbAFrame
Definition: btGeneric6DofSpring2Constraint.h:498
btGeneric6DofSpring2ConstraintDoubleData2::m_angularSpringDampingLimited
char m_angularSpringDampingLimited[4]
Definition: btGeneric6DofSpring2Constraint.h:586
btGeneric6DofSpring2ConstraintDoubleData2::m_linearSpringStiffnessLimited
char m_linearSpringStiffnessLimited[4]
Definition: btGeneric6DofSpring2Constraint.h:565
btTransform
The btTransform class supports rigid transforms with only translation and rotation and no scaling/she...
Definition: btTransform.h:34
btGeneric6DofSpring2Constraint::m_hasStaticBody
bool m_hasStaticBody
Definition: btGeneric6DofSpring2Constraint.h:301
btGeneric6DofSpring2ConstraintData::m_linearMotorERP
btVector3FloatData m_linearMotorERP
Definition: btGeneric6DofSpring2Constraint.h:506
BT_DECLARE_ALIGNED_ALLOCATOR
#define BT_DECLARE_ALIGNED_ALLOCATOR()
Definition: btScalar.h:403
btGeneric6DofSpring2ConstraintData::m_angularEnableSpring
char m_angularEnableSpring[4]
Definition: btGeneric6DofSpring2Constraint.h:536
btGeneric6DofSpring2ConstraintData::m_angularEnableMotor
char m_angularEnableMotor[4]
Definition: btGeneric6DofSpring2Constraint.h:534
btGeneric6DofSpring2ConstraintDoubleData2::m_linearStopCFM
btVector3DoubleData m_linearStopCFM
Definition: btGeneric6DofSpring2Constraint.h:553
btVector3
btVector3 can be used to represent 3D points and vectors.
Definition: btVector3.h:83
btRotationalLimitMotor2::m_maxMotorForce
btScalar m_maxMotorForce
Definition: btGeneric6DofSpring2Constraint.h:84
btGeneric6DofSpring2Constraint::m_rotateOrder
RotateOrder m_rotateOrder
Definition: btGeneric6DofSpring2Constraint.h:290
btGeneric6DofSpring2ConstraintData::m_linearEnableMotor
char m_linearEnableMotor[4]
Definition: btGeneric6DofSpring2Constraint.h:514
btGeneric6DofSpring2Constraint::setLimit
void setLimit(int axis, btScalar lo, btScalar hi)
Definition: btGeneric6DofSpring2Constraint.h:419
btGeneric6DofSpring2ConstraintDoubleData2::m_angularServoTarget
btVector3DoubleData m_angularServoTarget
Definition: btGeneric6DofSpring2Constraint.h:578
btGeneric6DofSpring2Constraint::m_flags
int m_flags
Definition: btGeneric6DofSpring2Constraint.h:302
btGeneric6DofSpring2ConstraintData::m_angularStopCFM
btVector3FloatData m_angularStopCFM
Definition: btGeneric6DofSpring2Constraint.h:525
btGeneric6DofSpring2ConstraintDoubleData2::m_linearLowerLimit
btVector3DoubleData m_linearLowerLimit
Definition: btGeneric6DofSpring2Constraint.h:550
btGeneric6DofSpring2ConstraintDoubleData2::m_angularSpringStiffnessLimited
char m_angularSpringStiffnessLimited[4]
Definition: btGeneric6DofSpring2Constraint.h:585
btGeneric6DofSpring2ConstraintDoubleData2::m_angularSpringStiffness
btVector3DoubleData m_angularSpringStiffness
Definition: btGeneric6DofSpring2Constraint.h:579
btGeneric6DofSpring2Constraint::getAngle
btScalar getAngle(int axis_index) const
Definition: btGeneric6DofSpring2Constraint.h:357
btGeneric6DofSpring2ConstraintDoubleData2::m_angularBounce
btVector3DoubleData m_angularBounce
Definition: btGeneric6DofSpring2Constraint.h:571
btGeneric6DofSpring2ConstraintDoubleData2::m_angularStopCFM
btVector3DoubleData m_angularStopCFM
Definition: btGeneric6DofSpring2Constraint.h:573
btGeneric6DofSpring2ConstraintDoubleData2::m_linearUpperLimit
btVector3DoubleData m_linearUpperLimit
Definition: btGeneric6DofSpring2Constraint.h:549
btTranslationalLimitMotor2::m_upperLimit
btVector3 m_upperLimit
Definition: btGeneric6DofSpring2Constraint.h:172
btGeneric6DofSpring2Constraint::getRotationalLimitMotor
btRotationalLimitMotor2 * getRotationalLimitMotor(int index)
Definition: btGeneric6DofSpring2Constraint.h:335
ATTRIBUTE_ALIGNED16
#define ATTRIBUTE_ALIGNED16(a)
Definition: btScalar.h:82
btGeneric6DofSpring2ConstraintDoubleData2::m_angularUpperLimit
btVector3DoubleData m_angularUpperLimit
Definition: btGeneric6DofSpring2Constraint.h:569
BT_6DOF_FLAGS_CFM_STOP2
@ BT_6DOF_FLAGS_CFM_STOP2
Definition: btGeneric6DofSpring2Constraint.h:269
btGeneric6DofSpring2ConstraintDoubleData2::m_angularEquilibriumPoint
btVector3DoubleData m_angularEquilibriumPoint
Definition: btGeneric6DofSpring2Constraint.h:581
btTranslationalLimitMotor2::m_enableMotor
bool m_enableMotor[3]
Definition: btGeneric6DofSpring2Constraint.h:178
btGeneric6DofSpring2ConstraintDoubleData2::m_rbAFrame
btTransformDoubleData m_rbAFrame
Definition: btGeneric6DofSpring2Constraint.h:546
btTranslationalLimitMotor2::m_maxMotorForce
btVector3 m_maxMotorForce
Definition: btGeneric6DofSpring2Constraint.h:188
btTransformFloatData
for serialization
Definition: btTransform.h:253
btGeneric6DofSpring2ConstraintDoubleData2::m_linearSpringDamping
btVector3DoubleData m_linearSpringDamping
Definition: btGeneric6DofSpring2Constraint.h:560
btGeneric6DofSpring2Constraint::calculateSerializeBufferSize
virtual int calculateSerializeBufferSize() const
Definition: btGeneric6DofSpring2Constraint.h:591
btGeneric6DofSpring2ConstraintData::m_linearStopCFM
btVector3FloatData m_linearStopCFM
Definition: btGeneric6DofSpring2Constraint.h:505
btRotationalLimitMotor2::testLimitValue
void testLimitValue(btScalar test_value)
Definition: btGeneric6DofSpring2Constraint.cpp:1135
btGeneric6DofSpring2ConstraintData::m_linearSpringDamping
btVector3FloatData m_linearSpringDamping
Definition: btGeneric6DofSpring2Constraint.h:512
btGeneric6DofSpring2ConstraintData::m_linearStopERP
btVector3FloatData m_linearStopERP
Definition: btGeneric6DofSpring2Constraint.h:504
SIMD_FORCE_INLINE
#define SIMD_FORCE_INLINE
Definition: btScalar.h:81
btRotationalLimitMotor2::m_springDamping
btScalar m_springDamping
Definition: btGeneric6DofSpring2Constraint.h:90
btGeneric6DofSpring2Constraint::setLinearLowerLimit
void setLinearLowerLimit(const btVector3 &linearLower)
Definition: btGeneric6DofSpring2Constraint.h:364
btRotationalLimitMotor2::btRotationalLimitMotor2
btRotationalLimitMotor2()
Definition: btGeneric6DofSpring2Constraint.h:99
btRotationalLimitMotor2::btRotationalLimitMotor2
btRotationalLimitMotor2(const btRotationalLimitMotor2 &limot)
Definition: btGeneric6DofSpring2Constraint.h:126
btSerializer
Definition: btSerializer.h:68
btGeneric6DofSpring2Constraint::setAngularUpperLimitReversed
void setAngularUpperLimitReversed(const btVector3 &angularUpper)
Definition: btGeneric6DofSpring2Constraint.h:399
btGeneric6DofSpring2ConstraintDoubleData2::m_angularMotorCFM
btVector3DoubleData m_angularMotorCFM
Definition: btGeneric6DofSpring2Constraint.h:575
btGeneric6DofSpring2ConstraintDoubleData2::m_angularTargetVelocity
btVector3DoubleData m_angularTargetVelocity
Definition: btGeneric6DofSpring2Constraint.h:576
btGeneric6DofSpring2ConstraintDoubleData2::m_rotateOrder
int m_rotateOrder
Definition: btGeneric6DofSpring2Constraint.h:588
btGeneric6DofSpring2ConstraintData::m_angularStopERP
btVector3FloatData m_angularStopERP
Definition: btGeneric6DofSpring2Constraint.h:524
btRotationalLimitMotor2::m_bounce
btScalar m_bounce
Definition: btGeneric6DofSpring2Constraint.h:77
btTypedConstraintData
this structure is not used, except for loading pre-2.82 .bullet files
Definition: btTypedConstraint.h:393
btRotationalLimitMotor2::m_motorCFM
btScalar m_motorCFM
Definition: btGeneric6DofSpring2Constraint.h:81
btTranslationalLimitMotor2::m_springDampingLimited
bool m_springDampingLimited[3]
Definition: btGeneric6DofSpring2Constraint.h:185
btGeneric6DofSpring2ConstraintDoubleData2::m_linearMotorCFM
btVector3DoubleData m_linearMotorCFM
Definition: btGeneric6DofSpring2Constraint.h:555
btGeneric6DofSpring2ConstraintDoubleData2::m_angularLowerLimit
btVector3DoubleData m_angularLowerLimit
Definition: btGeneric6DofSpring2Constraint.h:570
btGeneric6DofSpring2Constraint::operator=
btGeneric6DofSpring2Constraint & operator=(btGeneric6DofSpring2Constraint &)
Definition: btGeneric6DofSpring2Constraint.h:304
btGeneric6DofSpring2ConstraintData::m_angularEquilibriumPoint
btVector3FloatData m_angularEquilibriumPoint
Definition: btGeneric6DofSpring2Constraint.h:533
btRotationalLimitMotor2::m_currentLimit
int m_currentLimit
Definition: btGeneric6DofSpring2Constraint.h:97
btGeneric6DofSpring2ConstraintDoubleData2::m_linearServoTarget
btVector3DoubleData m_linearServoTarget
Definition: btGeneric6DofSpring2Constraint.h:558
btGeneric6DofSpring2ConstraintData::m_angularSpringStiffnessLimited
char m_angularSpringStiffnessLimited[4]
Definition: btGeneric6DofSpring2Constraint.h:537
RO_ZYX
@ RO_ZYX
Definition: btGeneric6DofSpring2Constraint.h:66
btGeneric6DofSpring2ConstraintData::m_angularTargetVelocity
btVector3FloatData m_angularTargetVelocity
Definition: btGeneric6DofSpring2Constraint.h:528
btRotationalLimitMotor2::m_motorERP
btScalar m_motorERP
Definition: btGeneric6DofSpring2Constraint.h:80
btRotationalLimitMotor2::m_hiLimit
btScalar m_hiLimit
Definition: btGeneric6DofSpring2Constraint.h:76
btGeneric6DofSpring2Constraint::m_frameInA
btTransform m_frameInA
Definition: btGeneric6DofSpring2Constraint.h:281
matrixToEulerXYZ
bool matrixToEulerXYZ(const btMatrix3x3 &mat, btVector3 &xyz)
MatrixToEulerXYZ from http://www.geometrictools.com/LibFoundation/Mathematics/Wm4Matrix3....
Definition: btGeneric6DofConstraint.cpp:84
btGeneric6DofSpring2Constraint::getAngularUpperLimit
void getAngularUpperLimit(btVector3 &angularUpper)
Definition: btGeneric6DofSpring2Constraint.h:405
btGeneric6DofSpring2Constraint::getLinearLowerLimit
void getLinearLowerLimit(btVector3 &linearLower)
Definition: btGeneric6DofSpring2Constraint.h:365
btRotationalLimitMotor2::m_stopCFM
btScalar m_stopCFM
Definition: btGeneric6DofSpring2Constraint.h:79
btGeneric6DofSpring2ConstraintData::m_linearSpringDampingLimited
char m_linearSpringDampingLimited[4]
Definition: btGeneric6DofSpring2Constraint.h:518
btGeneric6DofSpring2ConstraintData
Definition: btGeneric6DofSpring2Constraint.h:495
btTranslationalLimitMotor2::m_stopCFM
btVector3 m_stopCFM
Definition: btGeneric6DofSpring2Constraint.h:175
btGeneric6DofSpring2Constraint::serialize
virtual const char * serialize(void *dataBuffer, btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure)
Definition: btGeneric6DofSpring2Constraint.h:596
btGeneric6DofSpring2Constraint::getFrameOffsetA
btTransform & getFrameOffsetA()
Definition: btGeneric6DofSpring2Constraint.h:350
btRotationalLimitMotor2
Definition: btGeneric6DofSpring2Constraint.h:69
btGeneric6DofSpring2Constraint::getAngularLowerLimit
void getAngularLowerLimit(btVector3 &angularLower)
Definition: btGeneric6DofSpring2Constraint.h:381
btTypedConstraint::serialize
virtual const char * serialize(void *dataBuffer, btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure)
Definition: btTypedConstraint.cpp:110
btTranslationalLimitMotor2::m_equilibriumPoint
btVector3 m_equilibriumPoint
Definition: btGeneric6DofSpring2Constraint.h:186
btGeneric6DofSpring2ConstraintData::m_angularMotorERP
btVector3FloatData m_angularMotorERP
Definition: btGeneric6DofSpring2Constraint.h:526
btGeneric6DofSpring2ConstraintDoubleData2::m_linearMotorERP
btVector3DoubleData m_linearMotorERP
Definition: btGeneric6DofSpring2Constraint.h:554
RO_YXZ
@ RO_YXZ
Definition: btGeneric6DofSpring2Constraint.h:63
btTranslationalLimitMotor2::m_springStiffness
btVector3 m_springStiffness
Definition: btGeneric6DofSpring2Constraint.h:182
RO_ZXY
@ RO_ZXY
Definition: btGeneric6DofSpring2Constraint.h:65
btTranslationalLimitMotor2::m_servoMotor
bool m_servoMotor[3]
Definition: btGeneric6DofSpring2Constraint.h:179
btGeneric6DofSpring2Constraint::m_angularLimits
btRotationalLimitMotor2 m_angularLimits[3]
Definition: btGeneric6DofSpring2Constraint.h:288
btGeneric6DofSpring2Constraint::setAngularUpperLimit
void setAngularUpperLimit(const btVector3 &angularUpper)
Definition: btGeneric6DofSpring2Constraint.h:393
btGeneric6DofSpring2ConstraintDataName
#define btGeneric6DofSpring2ConstraintDataName
Definition: btGeneric6DofSpring2Constraint.h:56
btGeneric6DofSpring2ConstraintDoubleData2::m_padding1
char m_padding1[4]
Definition: btGeneric6DofSpring2Constraint.h:567
BT_6DOF_FLAGS_CFM_MOTO2
@ BT_6DOF_FLAGS_CFM_MOTO2
Definition: btGeneric6DofSpring2Constraint.h:271
btGeneric6DofSpring2ConstraintDoubleData2::m_linearMaxMotorForce
btVector3DoubleData m_linearMaxMotorForce
Definition: btGeneric6DofSpring2Constraint.h:557
btGeneric6DofSpring2ConstraintDoubleData2::m_angularServoMotor
char m_angularServoMotor[4]
Definition: btGeneric6DofSpring2Constraint.h:583
btGeneric6DofSpring2ConstraintDoubleData2::m_typeConstraintData
btTypedConstraintDoubleData m_typeConstraintData
Definition: btGeneric6DofSpring2Constraint.h:545
btGeneric6DofSpring2ConstraintDoubleData2
Definition: btGeneric6DofSpring2Constraint.h:543
btGeneric6DofSpring2ConstraintData::m_angularSpringStiffness
btVector3FloatData m_angularSpringStiffness
Definition: btGeneric6DofSpring2Constraint.h:531
btRotationalLimitMotor2::m_enableMotor
bool m_enableMotor
Definition: btGeneric6DofSpring2Constraint.h:82
btRotationalLimitMotor2::m_springStiffness
btScalar m_springStiffness
Definition: btGeneric6DofSpring2Constraint.h:88
btRotationalLimitMotor2::m_loLimit
btScalar m_loLimit
Definition: btGeneric6DofSpring2Constraint.h:75
btGeneric6DofSpring2Constraint::getLinearUpperLimit
void getLinearUpperLimit(btVector3 &linearUpper)
Definition: btGeneric6DofSpring2Constraint.h:367
btGeneric6DofSpring2ConstraintData::m_linearEquilibriumPoint
btVector3FloatData m_linearEquilibriumPoint
Definition: btGeneric6DofSpring2Constraint.h:513
btGeneric6DofSpring2ConstraintData::m_typeConstraintData
btTypedConstraintData m_typeConstraintData
Definition: btGeneric6DofSpring2Constraint.h:497
btGeneric6DofSpring2ConstraintDoubleData2::m_angularMotorERP
btVector3DoubleData m_angularMotorERP
Definition: btGeneric6DofSpring2Constraint.h:574
btGeneric6DofSpring2Constraint::m_calculatedAxisAngleDiff
btVector3 m_calculatedAxisAngleDiff
Definition: btGeneric6DofSpring2Constraint.h:296
btGeneric6DofSpring2Constraint::m_calculatedTransformA
btTransform m_calculatedTransformA
Definition: btGeneric6DofSpring2Constraint.h:294
btTranslationalLimitMotor2
Definition: btGeneric6DofSpring2Constraint.h:165
btTypedConstraintDoubleData
Definition: btTypedConstraint.h:416