forked from LeenkxTeam/LNXSDK
		
	
		
			
				
	
	
		
			161 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			161 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
| Bullet Continuous Collision Detection and Physics Library
 | |
| Copyright (c) 2012 Advanced Micro Devices, Inc.  http://bulletphysics.org
 | |
| 
 | |
| 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 BT_GEAR_CONSTRAINT_H
 | |
| #define BT_GEAR_CONSTRAINT_H
 | |
| 
 | |
| #include "BulletDynamics/ConstraintSolver/btTypedConstraint.h"
 | |
| 
 | |
| 
 | |
| #ifdef BT_USE_DOUBLE_PRECISION
 | |
| #define btGearConstraintData	btGearConstraintDoubleData
 | |
| #define btGearConstraintDataName	"btGearConstraintDoubleData"
 | |
| #else
 | |
| #define btGearConstraintData	btGearConstraintFloatData
 | |
| #define btGearConstraintDataName	"btGearConstraintFloatData"
 | |
| #endif //BT_USE_DOUBLE_PRECISION
 | |
| 
 | |
| 
 | |
| 
 | |
| ///The btGeatConstraint will couple the angular velocity for two bodies around given local axis and ratio.
 | |
| ///See Bullet/Demos/ConstraintDemo for an example use.
 | |
| class btGearConstraint : public btTypedConstraint
 | |
| {
 | |
| protected:
 | |
| 	btVector3	m_axisInA;
 | |
| 	btVector3	m_axisInB;
 | |
| 	bool		m_useFrameA;
 | |
| 	btScalar	m_ratio;
 | |
| 
 | |
| public:
 | |
| 	btGearConstraint(btRigidBody& rbA, btRigidBody& rbB, const btVector3& axisInA,const btVector3& axisInB, btScalar ratio=1.f);
 | |
| 	virtual ~btGearConstraint ();
 | |
| 
 | |
| 	///internal method used by the constraint solver, don't use them directly
 | |
| 	virtual void getInfo1 (btConstraintInfo1* info);
 | |
| 
 | |
| 	///internal method used by the constraint solver, don't use them directly
 | |
| 	virtual void getInfo2 (btConstraintInfo2* info);
 | |
| 
 | |
| 	void setAxisA(btVector3& axisA) 
 | |
| 	{
 | |
| 		m_axisInA = axisA;
 | |
| 	}
 | |
| 	void setAxisB(btVector3& axisB)
 | |
| 	{
 | |
| 		m_axisInB = axisB;
 | |
| 	}
 | |
| 	void setRatio(btScalar ratio)
 | |
| 	{
 | |
| 		m_ratio = ratio;
 | |
| 	}
 | |
| 	const btVector3& getAxisA() const
 | |
| 	{
 | |
| 		return m_axisInA;
 | |
| 	}
 | |
| 	const btVector3& getAxisB() const
 | |
| 	{
 | |
| 		return m_axisInB;
 | |
| 	}
 | |
| 	btScalar getRatio() const
 | |
| 	{
 | |
| 		return m_ratio;
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	virtual	void	setParam(int num, btScalar value, int axis = -1) 
 | |
| 	{
 | |
| 		(void) num;
 | |
| 		(void) value;
 | |
| 		(void) axis;
 | |
| 		btAssert(0);
 | |
| 	}
 | |
| 
 | |
| 	///return the local value of parameter
 | |
| 	virtual	btScalar getParam(int num, int axis = -1) const 
 | |
| 	{ 
 | |
| 		(void) num;
 | |
| 		(void) axis;
 | |
| 		btAssert(0);
 | |
| 		return 0.f;
 | |
| 	}
 | |
| 
 | |
| 	virtual	int	calculateSerializeBufferSize() const;
 | |
| 
 | |
| 	///fills the dataBuffer and returns the struct name (and 0 on failure)
 | |
| 	virtual	const char*	serialize(void* dataBuffer, btSerializer* serializer) const;
 | |
| };
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
 | |
| struct btGearConstraintFloatData
 | |
| {
 | |
| 	btTypedConstraintFloatData	m_typeConstraintData;
 | |
| 
 | |
| 	btVector3FloatData			m_axisInA;
 | |
| 	btVector3FloatData			m_axisInB;
 | |
| 
 | |
| 	float							m_ratio;
 | |
| 	char							m_padding[4];
 | |
| };
 | |
| 
 | |
| struct btGearConstraintDoubleData
 | |
| {
 | |
| 	btTypedConstraintDoubleData	m_typeConstraintData;
 | |
| 
 | |
| 	btVector3DoubleData			m_axisInA;
 | |
| 	btVector3DoubleData			m_axisInB;
 | |
| 
 | |
| 	double						m_ratio;
 | |
| };
 | |
| 
 | |
| SIMD_FORCE_INLINE	int	btGearConstraint::calculateSerializeBufferSize() const
 | |
| {
 | |
| 	return sizeof(btGearConstraintData);
 | |
| }
 | |
| 
 | |
| 	///fills the dataBuffer and returns the struct name (and 0 on failure)
 | |
| SIMD_FORCE_INLINE	const char*	btGearConstraint::serialize(void* dataBuffer, btSerializer* serializer) const
 | |
| {
 | |
| 	btGearConstraintData* gear = (btGearConstraintData*)dataBuffer;
 | |
| 	btTypedConstraint::serialize(&gear->m_typeConstraintData,serializer);
 | |
| 
 | |
| 	m_axisInA.serialize( gear->m_axisInA );
 | |
| 	m_axisInB.serialize( gear->m_axisInB );
 | |
| 
 | |
| 	gear->m_ratio = m_ratio;
 | |
| 
 | |
| 	// Fill padding with zeros to appease msan.
 | |
| #ifndef BT_USE_DOUBLE_PRECISION
 | |
| 	gear->m_padding[0] = 0;
 | |
| 	gear->m_padding[1] = 0;
 | |
| 	gear->m_padding[2] = 0;
 | |
| 	gear->m_padding[3] = 0;
 | |
| #endif
 | |
| 
 | |
| 	return btGearConstraintDataName;
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| #endif //BT_GEAR_CONSTRAINT_H
 |