Imported Upstream version 2.81
[platform/upstream/libbullet.git] / Extras / Serialize / BulletWorldImporter / btWorldImporter.h
1 /*\r
2 Bullet Continuous Collision Detection and Physics Library\r
3 Copyright (c) 2003-2012 Erwin Coumans  http://bulletphysics.org\r
4 \r
5 This software is provided 'as-is', without any express or implied warranty.\r
6 In no event will the authors be held liable for any damages arising from the use of this software.\r
7 Permission is granted to anyone to use this software for any purpose, \r
8 including commercial applications, and to alter it and redistribute it freely, \r
9 subject to the following restrictions:\r
10 \r
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.\r
12 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\r
13 3. This notice may not be removed or altered from any source distribution.\r
14 */\r
15 \r
16 \r
17 #ifndef BT_WORLD_IMPORTER_H\r
18 #define BT_WORLD_IMPORTER_H\r
19 \r
20 #include "LinearMath/btTransform.h"\r
21 #include "LinearMath/btVector3.h"\r
22 #include "LinearMath/btAlignedObjectArray.h"\r
23 #include "LinearMath/btHashMap.h"\r
24 \r
25 class btCollisionShape;\r
26 class btCollisionObject;\r
27 class btRigidBody;\r
28 class btTypedConstraint;\r
29 class btDynamicsWorld;\r
30 struct ConstraintInput;\r
31 class btRigidBodyColladaInfo;\r
32 struct btCollisionShapeData;\r
33 class btTriangleIndexVertexArray;\r
34 class btStridingMeshInterface;\r
35 struct btStridingMeshInterfaceData;\r
36 class btGImpactMeshShape;\r
37 class btOptimizedBvh;\r
38 struct btTriangleInfoMap;\r
39 class btBvhTriangleMeshShape;\r
40 class btPoint2PointConstraint;\r
41 class btHingeConstraint;\r
42 class btConeTwistConstraint;\r
43 class btGeneric6DofConstraint;\r
44 class btGeneric6DofSpringConstraint;\r
45 class btSliderConstraint;\r
46 struct btContactSolverInfo;\r
47 struct btTypedConstraintData;\r
48 \r
49 struct btRigidBodyDoubleData;\r
50 struct btRigidBodyFloatData;\r
51 \r
52 #ifdef BT_USE_DOUBLE_PRECISION\r
53 #define btRigidBodyData btRigidBodyDoubleData\r
54 #else\r
55 #define btRigidBodyData btRigidBodyFloatData\r
56 #endif//BT_USE_DOUBLE_PRECISION\r
57 \r
58 \r
59 class btWorldImporter\r
60 {\r
61 protected:\r
62         btDynamicsWorld* m_dynamicsWorld;\r
63         \r
64         int m_verboseMode;\r
65 \r
66         btAlignedObjectArray<btCollisionShape*>  m_allocatedCollisionShapes;\r
67         btAlignedObjectArray<btCollisionObject*> m_allocatedRigidBodies;\r
68         btAlignedObjectArray<btTypedConstraint*> m_allocatedConstraints;\r
69         btAlignedObjectArray<btOptimizedBvh*>    m_allocatedBvhs;\r
70         btAlignedObjectArray<btTriangleInfoMap*> m_allocatedTriangleInfoMaps;\r
71         btAlignedObjectArray<btTriangleIndexVertexArray*> m_allocatedTriangleIndexArrays;\r
72         btAlignedObjectArray<btStridingMeshInterfaceData*> m_allocatedbtStridingMeshInterfaceDatas;\r
73 \r
74         btAlignedObjectArray<char*>                             m_allocatedNames;\r
75 \r
76         btAlignedObjectArray<int*>                              m_indexArrays;\r
77         btAlignedObjectArray<short int*>                m_shortIndexArrays;\r
78         btAlignedObjectArray<unsigned char*>    m_charIndexArrays;\r
79 \r
80         btAlignedObjectArray<btVector3FloatData*>       m_floatVertexArrays;\r
81         btAlignedObjectArray<btVector3DoubleData*>      m_doubleVertexArrays;\r
82 \r
83 \r
84         btHashMap<btHashPtr,btOptimizedBvh*>    m_bvhMap;\r
85         btHashMap<btHashPtr,btTriangleInfoMap*> m_timMap;\r
86         \r
87         btHashMap<btHashString,btCollisionShape*>       m_nameShapeMap;\r
88         btHashMap<btHashString,btRigidBody*>    m_nameBodyMap;\r
89         btHashMap<btHashString,btTypedConstraint*>      m_nameConstraintMap;\r
90         btHashMap<btHashPtr,const char*>        m_objectNameMap;\r
91 \r
92         btHashMap<btHashPtr,btCollisionShape*>  m_shapeMap;\r
93         btHashMap<btHashPtr,btCollisionObject*> m_bodyMap;\r
94 \r
95 \r
96         //methods\r
97 \r
98         static btRigidBody& getFixedBody();\r
99 \r
100         char*   duplicateName(const char* name);\r
101 \r
102         btCollisionShape* convertCollisionShape(  btCollisionShapeData* shapeData  );\r
103         void    convertConstraint(btTypedConstraintData* constraintData, btRigidBody* rbA, btRigidBody* rbB, bool isDoublePrecisionData, int fileVersion);\r
104         void    convertRigidBodyFloat(btRigidBodyFloatData* colObjData);\r
105         void    convertRigidBodyDouble( btRigidBodyDoubleData* colObjData);\r
106 \r
107 public:\r
108         \r
109         btWorldImporter(btDynamicsWorld* world);\r
110         \r
111         virtual ~btWorldImporter();\r
112 \r
113                 ///delete all memory collision shapes, rigid bodies, constraints etc. allocated during the load.\r
114         ///make sure you don't use the dynamics world containing objects after you call this method\r
115         virtual void deleteAllData();\r
116 \r
117         void    setVerboseMode(int verboseMode)\r
118         {\r
119                 m_verboseMode = verboseMode;\r
120         }\r
121 \r
122         int getVerboseMode() const\r
123         {\r
124                 return m_verboseMode;\r
125         }\r
126 \r
127                 // query for data\r
128         int     getNumCollisionShapes() const;\r
129         btCollisionShape* getCollisionShapeByIndex(int index);\r
130         int getNumRigidBodies() const;\r
131         btCollisionObject* getRigidBodyByIndex(int index) const;\r
132         int getNumConstraints() const;\r
133         btTypedConstraint* getConstraintByIndex(int index) const;\r
134         int getNumBvhs() const;\r
135         btOptimizedBvh*  getBvhByIndex(int index) const;\r
136         int getNumTriangleInfoMaps() const;\r
137         btTriangleInfoMap* getTriangleInfoMapByIndex(int index) const;\r
138         \r
139         // queris involving named objects\r
140         btCollisionShape* getCollisionShapeByName(const char* name);\r
141         btRigidBody* getRigidBodyByName(const char* name);\r
142         btTypedConstraint* getConstraintByName(const char* name);\r
143         const char*     getNameForPointer(const void* ptr) const;\r
144 \r
145         ///those virtuals are called by load and can be overridden by the user\r
146 \r
147         virtual void    setDynamicsWorldInfo(const btVector3& gravity, const btContactSolverInfo& solverInfo);\r
148 \r
149         //bodies\r
150         virtual btRigidBody*  createRigidBody(bool isDynamic,   btScalar mass,  const btTransform& startTransform,      btCollisionShape* shape,const char* bodyName);\r
151         virtual btCollisionObject*  createCollisionObject(      const btTransform& startTransform,      btCollisionShape* shape,const char* bodyName);\r
152 \r
153         ///shapes\r
154 \r
155         virtual btCollisionShape* createPlaneShape(const btVector3& planeNormal,btScalar planeConstant);\r
156         virtual btCollisionShape* createBoxShape(const btVector3& halfExtents);\r
157         virtual btCollisionShape* createSphereShape(btScalar radius);\r
158         virtual btCollisionShape* createCapsuleShapeX(btScalar radius, btScalar height);\r
159         virtual btCollisionShape* createCapsuleShapeY(btScalar radius, btScalar height);\r
160         virtual btCollisionShape* createCapsuleShapeZ(btScalar radius, btScalar height);\r
161         \r
162         virtual btCollisionShape* createCylinderShapeX(btScalar radius,btScalar height);\r
163         virtual btCollisionShape* createCylinderShapeY(btScalar radius,btScalar height);\r
164         virtual btCollisionShape* createCylinderShapeZ(btScalar radius,btScalar height);\r
165         virtual class btTriangleIndexVertexArray*       createTriangleMeshContainer();\r
166         virtual btBvhTriangleMeshShape* createBvhTriangleMeshShape(btStridingMeshInterface* trimesh, btOptimizedBvh* bvh);\r
167         virtual btCollisionShape* createConvexTriangleMeshShape(btStridingMeshInterface* trimesh);\r
168         virtual btGImpactMeshShape* createGimpactShape(btStridingMeshInterface* trimesh);\r
169         virtual btStridingMeshInterfaceData* createStridingMeshInterfaceData(btStridingMeshInterfaceData* interfaceData);\r
170 \r
171         virtual class btConvexHullShape* createConvexHullShape();\r
172         virtual class btCompoundShape* createCompoundShape();\r
173         virtual class btScaledBvhTriangleMeshShape* createScaledTrangleMeshShape(btBvhTriangleMeshShape* meshShape,const btVector3& localScalingbtBvhTriangleMeshShape);\r
174 \r
175         virtual class btMultiSphereShape* createMultiSphereShape(const btVector3* positions,const btScalar* radi,int numSpheres);\r
176 \r
177         virtual btTriangleIndexVertexArray* createMeshInterface(btStridingMeshInterfaceData& meshData);\r
178 \r
179         ///acceleration and connectivity structures\r
180         virtual btOptimizedBvh* createOptimizedBvh();\r
181         virtual btTriangleInfoMap* createTriangleInfoMap();\r
182 \r
183         ///constraints\r
184         virtual btPoint2PointConstraint* createPoint2PointConstraint(btRigidBody& rbA,btRigidBody& rbB, const btVector3& pivotInA,const btVector3& pivotInB);\r
185         virtual btPoint2PointConstraint* createPoint2PointConstraint(btRigidBody& rbA,const btVector3& pivotInA);\r
186         virtual btHingeConstraint* createHingeConstraint(btRigidBody& rbA,btRigidBody& rbB, const btTransform& rbAFrame, const btTransform& rbBFrame, bool useReferenceFrameA=false);\r
187         virtual btHingeConstraint* createHingeConstraint(btRigidBody& rbA,const btTransform& rbAFrame, bool useReferenceFrameA=false);\r
188         virtual btConeTwistConstraint* createConeTwistConstraint(btRigidBody& rbA,btRigidBody& rbB,const btTransform& rbAFrame, const btTransform& rbBFrame);\r
189         virtual btConeTwistConstraint* createConeTwistConstraint(btRigidBody& rbA,const btTransform& rbAFrame);\r
190         virtual btGeneric6DofConstraint* createGeneric6DofConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB ,bool useLinearReferenceFrameA);\r
191     virtual btGeneric6DofConstraint* createGeneric6DofConstraint(btRigidBody& rbB, const btTransform& frameInB, bool useLinearReferenceFrameB);\r
192         virtual btGeneric6DofSpringConstraint* createGeneric6DofSpringConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB ,bool useLinearReferenceFrameA);\r
193         virtual btSliderConstraint* createSliderConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB ,bool useLinearReferenceFrameA);\r
194     virtual btSliderConstraint* createSliderConstraint(btRigidBody& rbB, const btTransform& frameInB, bool useLinearReferenceFrameA);\r
195 \r
196 \r
197 \r
198 };\r
199 \r
200 \r
201 #endif //BT_WORLD_IMPORTER_H