| /* | |
| Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org | |
| Copyright (C) 2006, 2007 Sony Computer Entertainment Inc. | |
| This software is provided 'as-is', without any express or implied warranty. | |
| In no event will the authors be held liable for any damages arising from the use of this software. | |
| Permission is granted to anyone to use this software for any purpose, | |
| including commercial applications, and to alter it and redistribute it freely, | |
| subject to the following restrictions: | |
| 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. | |
| 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. | |
| 3. This notice may not be removed or altered from any source distribution. | |
| */ | |
| #ifndef GENERIC_6DOF_SPRING_CONSTRAINT_H | |
| #define GENERIC_6DOF_SPRING_CONSTRAINT_H | |
| #include "LinearMath/btVector3.h" | |
| #include "btTypedConstraint.h" | |
| #include "btGeneric6DofConstraint.h" | |
| /// Generic 6 DOF constraint that allows to set spring motors to any translational and rotational DOF | |
| /// DOF index used in enableSpring() and setStiffness() means: | |
| /// 0 : translation X | |
| /// 1 : translation Y | |
| /// 2 : translation Z | |
| /// 3 : rotation X (3rd Euler rotational around new position of X axis, range [-PI+epsilon, PI-epsilon] ) | |
| /// 4 : rotation Y (2nd Euler rotational around new position of Y axis, range [-PI/2+epsilon, PI/2-epsilon] ) | |
| /// 5 : rotation Z (1st Euler rotational around Z axis, range [-PI+epsilon, PI-epsilon] ) | |
| class btGeneric6DofSpringConstraint : public btGeneric6DofConstraint | |
| { | |
| protected: | |
| bool m_springEnabled[6]; | |
| btScalar m_equilibriumPoint[6]; | |
| btScalar m_springStiffness[6]; | |
| btScalar m_springDamping[6]; // between 0 and 1 (1 == no damping) | |
| void internalUpdateSprings(btConstraintInfo2* info); | |
| public: | |
| btGeneric6DofSpringConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB ,bool useLinearReferenceFrameA); | |
| void enableSpring(int index, bool onOff); | |
| void setStiffness(int index, btScalar stiffness); | |
| void setDamping(int index, btScalar damping); | |
| void setEquilibriumPoint(); // set the current constraint position/orientation as an equilibrium point for all DOF | |
| void setEquilibriumPoint(int index); // set the current constraint position/orientation as an equilibrium point for given DOF | |
| virtual void getInfo2 (btConstraintInfo2* info); | |
| }; | |
| #endif // GENERIC_6DOF_SPRING_CONSTRAINT_H | |