190 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			190 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								Bullet Continuous Collision Detection and Physics Library
							 | 
						||
| 
								 | 
							
								Copyright (c) 2003-2014 Erwin Coumans  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_COLLISION_WORLD_IMPORTER_H
							 | 
						||
| 
								 | 
							
								#define BT_COLLISION_WORLD_IMPORTER_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "LinearMath/btTransform.h"
							 | 
						||
| 
								 | 
							
								#include "LinearMath/btVector3.h"
							 | 
						||
| 
								 | 
							
								#include "LinearMath/btAlignedObjectArray.h"
							 | 
						||
| 
								 | 
							
								#include "LinearMath/btHashMap.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class btCollisionShape;
							 | 
						||
| 
								 | 
							
								class btCollisionObject;
							 | 
						||
| 
								 | 
							
								struct btBulletSerializedArrays;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct ConstraintInput;
							 | 
						||
| 
								 | 
							
								class btCollisionWorld;
							 | 
						||
| 
								 | 
							
								struct btCollisionShapeData;
							 | 
						||
| 
								 | 
							
								class btTriangleIndexVertexArray;
							 | 
						||
| 
								 | 
							
								class btStridingMeshInterface;
							 | 
						||
| 
								 | 
							
								struct btStridingMeshInterfaceData;
							 | 
						||
| 
								 | 
							
								class btGImpactMeshShape;
							 | 
						||
| 
								 | 
							
								class btOptimizedBvh;
							 | 
						||
| 
								 | 
							
								struct btTriangleInfoMap;
							 | 
						||
| 
								 | 
							
								class btBvhTriangleMeshShape;
							 | 
						||
| 
								 | 
							
								class btPoint2PointConstraint;
							 | 
						||
| 
								 | 
							
								class btHingeConstraint;
							 | 
						||
| 
								 | 
							
								class btConeTwistConstraint;
							 | 
						||
| 
								 | 
							
								class btGeneric6DofConstraint;
							 | 
						||
| 
								 | 
							
								class btGeneric6DofSpringConstraint;
							 | 
						||
| 
								 | 
							
								class btSliderConstraint;
							 | 
						||
| 
								 | 
							
								class btGearConstraint;
							 | 
						||
| 
								 | 
							
								struct btContactSolverInfo;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class btCollisionWorldImporter
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								protected:
							 | 
						||
| 
								 | 
							
									btCollisionWorld* m_collisionWorld;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									int m_verboseMode;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btAlignedObjectArray<btCollisionShape*>  m_allocatedCollisionShapes;
							 | 
						||
| 
								 | 
							
									btAlignedObjectArray<btCollisionObject*> m_allocatedRigidBodies;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btAlignedObjectArray<btOptimizedBvh*>	 m_allocatedBvhs;
							 | 
						||
| 
								 | 
							
									btAlignedObjectArray<btTriangleInfoMap*> m_allocatedTriangleInfoMaps;
							 | 
						||
| 
								 | 
							
									btAlignedObjectArray<btTriangleIndexVertexArray*> m_allocatedTriangleIndexArrays;
							 | 
						||
| 
								 | 
							
									btAlignedObjectArray<btStridingMeshInterfaceData*> m_allocatedbtStridingMeshInterfaceDatas;
							 | 
						||
| 
								 | 
							
									btAlignedObjectArray<btCollisionObject*> m_allocatedCollisionObjects;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btAlignedObjectArray<char*>				m_allocatedNames;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btAlignedObjectArray<int*>				m_indexArrays;
							 | 
						||
| 
								 | 
							
									btAlignedObjectArray<short int*>		m_shortIndexArrays;
							 | 
						||
| 
								 | 
							
									btAlignedObjectArray<unsigned char*>	m_charIndexArrays;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btAlignedObjectArray<btVector3FloatData*>	m_floatVertexArrays;
							 | 
						||
| 
								 | 
							
									btAlignedObjectArray<btVector3DoubleData*>	m_doubleVertexArrays;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btHashMap<btHashPtr,btOptimizedBvh*>	m_bvhMap;
							 | 
						||
| 
								 | 
							
									btHashMap<btHashPtr,btTriangleInfoMap*>	m_timMap;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btHashMap<btHashString,btCollisionShape*>	m_nameShapeMap;
							 | 
						||
| 
								 | 
							
									btHashMap<btHashString,btCollisionObject*>	m_nameColObjMap;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btHashMap<btHashPtr,const char*>	m_objectNameMap;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btHashMap<btHashPtr,btCollisionShape*>	m_shapeMap;
							 | 
						||
| 
								 | 
							
									btHashMap<btHashPtr,btCollisionObject*>	m_bodyMap;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									//methods
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									char*	duplicateName(const char* name);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btCollisionShape* convertCollisionShape(  btCollisionShapeData* shapeData  );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btCollisionWorldImporter(btCollisionWorld* world);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									virtual ~btCollisionWorldImporter();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    bool	convertAllObjects( btBulletSerializedArrays* arrays);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										///delete all memory collision shapes, rigid bodies, constraints etc. allocated during the load.
							 | 
						||
| 
								 | 
							
									///make sure you don't use the dynamics world containing objects after you call this method
							 | 
						||
| 
								 | 
							
									virtual void deleteAllData();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void	setVerboseMode(int verboseMode)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_verboseMode = verboseMode;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									int getVerboseMode() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_verboseMode;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// query for data
							 | 
						||
| 
								 | 
							
									int	getNumCollisionShapes() const;
							 | 
						||
| 
								 | 
							
									btCollisionShape* getCollisionShapeByIndex(int index);
							 | 
						||
| 
								 | 
							
									int getNumRigidBodies() const;
							 | 
						||
| 
								 | 
							
									btCollisionObject* getRigidBodyByIndex(int index) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									int getNumBvhs() const;
							 | 
						||
| 
								 | 
							
									btOptimizedBvh*  getBvhByIndex(int index) const;
							 | 
						||
| 
								 | 
							
									int getNumTriangleInfoMaps() const;
							 | 
						||
| 
								 | 
							
									btTriangleInfoMap* getTriangleInfoMapByIndex(int index) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// queris involving named objects
							 | 
						||
| 
								 | 
							
									btCollisionShape* getCollisionShapeByName(const char* name);
							 | 
						||
| 
								 | 
							
									btCollisionObject* getCollisionObjectByName(const char* name);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const char*	getNameForPointer(const void* ptr) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									///those virtuals are called by load and can be overridden by the user
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									//bodies
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									virtual btCollisionObject*  createCollisionObject(	const btTransform& startTransform,	btCollisionShape* shape,const char* bodyName);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									///shapes
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									virtual btCollisionShape* createPlaneShape(const btVector3& planeNormal,btScalar planeConstant);
							 | 
						||
| 
								 | 
							
									virtual btCollisionShape* createBoxShape(const btVector3& halfExtents);
							 | 
						||
| 
								 | 
							
									virtual btCollisionShape* createSphereShape(btScalar radius);
							 | 
						||
| 
								 | 
							
									virtual btCollisionShape* createCapsuleShapeX(btScalar radius, btScalar height);
							 | 
						||
| 
								 | 
							
									virtual btCollisionShape* createCapsuleShapeY(btScalar radius, btScalar height);
							 | 
						||
| 
								 | 
							
									virtual btCollisionShape* createCapsuleShapeZ(btScalar radius, btScalar height);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									virtual btCollisionShape* createCylinderShapeX(btScalar radius,btScalar height);
							 | 
						||
| 
								 | 
							
									virtual btCollisionShape* createCylinderShapeY(btScalar radius,btScalar height);
							 | 
						||
| 
								 | 
							
									virtual btCollisionShape* createCylinderShapeZ(btScalar radius,btScalar height);
							 | 
						||
| 
								 | 
							
									virtual btCollisionShape* createConeShapeX(btScalar radius,btScalar height);
							 | 
						||
| 
								 | 
							
									virtual btCollisionShape* createConeShapeY(btScalar radius,btScalar height);
							 | 
						||
| 
								 | 
							
									virtual btCollisionShape* createConeShapeZ(btScalar radius,btScalar height);
							 | 
						||
| 
								 | 
							
									virtual class btTriangleIndexVertexArray*	createTriangleMeshContainer();
							 | 
						||
| 
								 | 
							
									virtual	btBvhTriangleMeshShape* createBvhTriangleMeshShape(btStridingMeshInterface* trimesh, btOptimizedBvh* bvh);
							 | 
						||
| 
								 | 
							
									virtual btCollisionShape* createConvexTriangleMeshShape(btStridingMeshInterface* trimesh);
							 | 
						||
| 
								 | 
							
								#ifdef SUPPORT_GIMPACT_SHAPE_IMPORT
							 | 
						||
| 
								 | 
							
									virtual btGImpactMeshShape* createGimpactShape(btStridingMeshInterface* trimesh);
							 | 
						||
| 
								 | 
							
								#endif //SUPPORT_GIMPACT_SHAPE_IMPORT
							 | 
						||
| 
								 | 
							
									virtual btStridingMeshInterfaceData* createStridingMeshInterfaceData(btStridingMeshInterfaceData* interfaceData);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									virtual class btConvexHullShape* createConvexHullShape();
							 | 
						||
| 
								 | 
							
									virtual class btCompoundShape* createCompoundShape();
							 | 
						||
| 
								 | 
							
									virtual class btScaledBvhTriangleMeshShape* createScaledTrangleMeshShape(btBvhTriangleMeshShape* meshShape,const btVector3& localScalingbtBvhTriangleMeshShape);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									virtual class btMultiSphereShape* createMultiSphereShape(const btVector3* positions,const btScalar* radi,int numSpheres);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									virtual btTriangleIndexVertexArray* createMeshInterface(btStridingMeshInterfaceData& meshData);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									///acceleration and connectivity structures
							 | 
						||
| 
								 | 
							
									virtual btOptimizedBvh*	createOptimizedBvh();
							 | 
						||
| 
								 | 
							
									virtual btTriangleInfoMap* createTriangleInfoMap();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif //BT_WORLD_IMPORTER_H
							 |