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
 |