Bullet Collision Detection & Physics Library
btWorldImporter.h
Go to the documentation of this file.
1 /*
2 Bullet Continuous Collision Detection and Physics Library
3 Copyright (c) 2003-2012 Erwin Coumans http://bulletphysics.org
4 
5 This software is provided 'as-is', without any express or implied warranty.
6 In no event will the authors be held liable for any damages arising from the use of this software.
7 Permission is granted to anyone to use this software for any purpose,
8 including commercial applications, and to alter it and redistribute it freely,
9 subject to the following restrictions:
10 
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.
12 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
13 3. This notice may not be removed or altered from any source distribution.
14 */
15 
16 
17 #ifndef BT_WORLD_IMPORTER_H
18 #define BT_WORLD_IMPORTER_H
19 
20 #include "LinearMath/btTransform.h"
21 #include "LinearMath/btVector3.h"
23 #include "LinearMath/btHashMap.h"
24 
25 class btCollisionShape;
26 class btCollisionObject;
27 class btRigidBody;
28 class btTypedConstraint;
29 class btDynamicsWorld;
30 struct ConstraintInput;
31 class btRigidBodyColladaInfo;
36 class btGImpactMeshShape;
37 class btOptimizedBvh;
38 struct btTriangleInfoMap;
41 class btHingeConstraint;
46 class btSliderConstraint;
47 class btGearConstraint;
48 struct btContactSolverInfo;
52 
55 
56 #ifdef BT_USE_DOUBLE_PRECISION
57 #define btRigidBodyData btRigidBodyDoubleData
58 #else
59 #define btRigidBodyData btRigidBodyFloatData
60 #endif//BT_USE_DOUBLE_PRECISION
61 
62 
64 {
65 protected:
67 
69 
77 
79 
83 
86 
87 
90 
95 
98 
99 
100  //methods
101 
102  static btRigidBody& getFixedBody();
103 
104  char* duplicateName(const char* name);
105 
107 
108  void convertConstraintBackwardsCompatible281(btTypedConstraintData* constraintData, btRigidBody* rbA, btRigidBody* rbB, int fileVersion);
109  void convertConstraintFloat(btTypedConstraintFloatData* constraintData, btRigidBody* rbA, btRigidBody* rbB, int fileVersion);
110  void convertConstraintDouble(btTypedConstraintDoubleData* constraintData, btRigidBody* rbA, btRigidBody* rbB, int fileVersion);
113 
114 public:
115 
117 
118  virtual ~btWorldImporter();
119 
122  virtual void deleteAllData();
123 
124  void setVerboseMode(int verboseMode)
125  {
126  m_verboseMode = verboseMode;
127  }
128 
129  int getVerboseMode() const
130  {
131  return m_verboseMode;
132  }
133 
134  // query for data
135  int getNumCollisionShapes() const;
137  int getNumRigidBodies() const;
138  btCollisionObject* getRigidBodyByIndex(int index) const;
139  int getNumConstraints() const;
140  btTypedConstraint* getConstraintByIndex(int index) const;
141  int getNumBvhs() const;
142  btOptimizedBvh* getBvhByIndex(int index) const;
143  int getNumTriangleInfoMaps() const;
145 
146  // queris involving named objects
147  btCollisionShape* getCollisionShapeByName(const char* name);
148  btRigidBody* getRigidBodyByName(const char* name);
149  btTypedConstraint* getConstraintByName(const char* name);
150  const char* getNameForPointer(const void* ptr) const;
151 
153 
154  virtual void setDynamicsWorldInfo(const btVector3& gravity, const btContactSolverInfo& solverInfo);
155 
156  //bodies
157  virtual btRigidBody* createRigidBody(bool isDynamic, btScalar mass, const btTransform& startTransform, btCollisionShape* shape,const char* bodyName);
158  virtual btCollisionObject* createCollisionObject( const btTransform& startTransform, btCollisionShape* shape,const char* bodyName);
159 
161 
162  virtual btCollisionShape* createPlaneShape(const btVector3& planeNormal,btScalar planeConstant);
163  virtual btCollisionShape* createBoxShape(const btVector3& halfExtents);
165  virtual btCollisionShape* createCapsuleShapeX(btScalar radius, btScalar height);
166  virtual btCollisionShape* createCapsuleShapeY(btScalar radius, btScalar height);
167  virtual btCollisionShape* createCapsuleShapeZ(btScalar radius, btScalar height);
168 
169  virtual btCollisionShape* createCylinderShapeX(btScalar radius,btScalar height);
170  virtual btCollisionShape* createCylinderShapeY(btScalar radius,btScalar height);
171  virtual btCollisionShape* createCylinderShapeZ(btScalar radius,btScalar height);
172  virtual btCollisionShape* createConeShapeX(btScalar radius,btScalar height);
173  virtual btCollisionShape* createConeShapeY(btScalar radius,btScalar height);
174  virtual btCollisionShape* createConeShapeZ(btScalar radius,btScalar height);
180 
181  virtual class btConvexHullShape* createConvexHullShape();
182  virtual class btCompoundShape* createCompoundShape();
183  virtual class btScaledBvhTriangleMeshShape* createScaledTrangleMeshShape(btBvhTriangleMeshShape* meshShape,const btVector3& localScalingbtBvhTriangleMeshShape);
184 
185  virtual class btMultiSphereShape* createMultiSphereShape(const btVector3* positions,const btScalar* radi,int numSpheres);
186 
188 
192 
194  virtual btPoint2PointConstraint* createPoint2PointConstraint(btRigidBody& rbA,btRigidBody& rbB, const btVector3& pivotInA,const btVector3& pivotInB);
196  virtual btHingeConstraint* createHingeConstraint(btRigidBody& rbA,btRigidBody& rbB, const btTransform& rbAFrame, const btTransform& rbBFrame, bool useReferenceFrameA=false);
197  virtual btHingeConstraint* createHingeConstraint(btRigidBody& rbA,const btTransform& rbAFrame, bool useReferenceFrameA=false);
198  virtual btConeTwistConstraint* createConeTwistConstraint(btRigidBody& rbA,btRigidBody& rbB,const btTransform& rbAFrame, const btTransform& rbBFrame);
200  virtual btGeneric6DofConstraint* createGeneric6DofConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB ,bool useLinearReferenceFrameA);
201  virtual btGeneric6DofConstraint* createGeneric6DofConstraint(btRigidBody& rbB, const btTransform& frameInB, bool useLinearReferenceFrameB);
202  virtual btGeneric6DofSpringConstraint* createGeneric6DofSpringConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB ,bool useLinearReferenceFrameA);
203  virtual btGeneric6DofSpring2Constraint* createGeneric6DofSpring2Constraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB, int rotateOrder );
204 
205  virtual btSliderConstraint* createSliderConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB ,bool useLinearReferenceFrameA);
206  virtual btSliderConstraint* createSliderConstraint(btRigidBody& rbB, const btTransform& frameInB, bool useLinearReferenceFrameA);
207  virtual btGearConstraint* createGearConstraint(btRigidBody& rbA, btRigidBody& rbB, const btVector3& axisInA,const btVector3& axisInB, btScalar ratio);
208 
209 
210 
211 
212 };
213 
214 
215 #endif //BT_WORLD_IMPORTER_H
virtual btGeneric6DofSpringConstraint * createGeneric6DofSpringConstraint(btRigidBody &rbA, btRigidBody &rbB, const btTransform &frameInA, const btTransform &frameInB, bool useLinearReferenceFrameA)
virtual btGeneric6DofConstraint * createGeneric6DofConstraint(btRigidBody &rbA, btRigidBody &rbB, const btTransform &frameInA, const btTransform &frameInB, bool useLinearReferenceFrameA)
void convertConstraintBackwardsCompatible281(btTypedConstraintData *constraintData, btRigidBody *rbA, btRigidBody *rbB, int fileVersion)
btCollisionShape * convertCollisionShape(btCollisionShapeData *shapeData)
btTriangleInfoMap * getTriangleInfoMapByIndex(int index) const
virtual btStridingMeshInterfaceData * createStridingMeshInterfaceData(btStridingMeshInterfaceData *interfaceData)
point to point constraint between two rigidbodies each with a pivotpoint that descibes the 'ballsocke...
virtual class btTriangleIndexVertexArray * createTriangleMeshContainer()
void convertRigidBodyDouble(btRigidBodyDoubleData *colObjData)
virtual btBvhTriangleMeshShape * createBvhTriangleMeshShape(btStridingMeshInterface *trimesh, btOptimizedBvh *bvh)
virtual btCollisionShape * createSphereShape(btScalar radius)
virtual btConeTwistConstraint * createConeTwistConstraint(btRigidBody &rbA, btRigidBody &rbB, const btTransform &rbAFrame, const btTransform &rbBFrame)
virtual btTriangleInfoMap * createTriangleInfoMap()
void convertRigidBodyFloat(btRigidBodyFloatData *colObjData)
virtual btCollisionShape * createCylinderShapeZ(btScalar radius, btScalar height)
The btAlignedObjectArray template class uses a subset of the stl::vector interface for its methods It...
btAlignedObjectArray< unsigned char * > m_charIndexArrays
The btGeatConstraint will couple the angular velocity for two bodies around given local axis and rati...
The btMultiSphereShape represents the convex hull of a collection of spheres.
virtual btRigidBody * createRigidBody(bool isDynamic, btScalar mass, const btTransform &startTransform, btCollisionShape *shape, const char *bodyName)
btGeneric6DofConstraint between two rigidbodies each with a pivotpoint that descibes the axis locatio...
btWorldImporter(btDynamicsWorld *world)
The btDynamicsWorld is the interface class for several dynamics implementation, basic, discrete, parallel, and continuous etc.
virtual class btConvexHullShape * createConvexHullShape()
The btCollisionShape class provides an interface for collision shapes that can be shared among btColl...
int getNumCollisionShapes() const
btHashMap< btHashString, btCollisionShape * > m_nameShapeMap
btAlignedObjectArray< short int * > m_shortIndexArrays
virtual btCollisionShape * createConvexTriangleMeshShape(btStridingMeshInterface *trimesh)
virtual btCollisionShape * createCapsuleShapeY(btScalar radius, btScalar height)
virtual btCollisionShape * createCylinderShapeX(btScalar radius, btScalar height)
btCollisionShape * getCollisionShapeByName(const char *name)
virtual btCollisionShape * createCylinderShapeY(btScalar radius, btScalar height)
btAlignedObjectArray< btOptimizedBvh * > m_allocatedBvhs
virtual btCollisionShape * createConeShapeX(btScalar radius, btScalar height)
This class manages a mesh supplied by the btStridingMeshInterface interface.
virtual btCollisionShape * createCapsuleShapeZ(btScalar radius, btScalar height)
hinge constraint between two rigidbodies each with a pivotpoint that descibes the axis location in lo...
The btHashMap template class implements a generic and lightweight hashmap.
Definition: btHashMap.h:220
virtual btCollisionShape * createPlaneShape(const btVector3 &planeNormal, btScalar planeConstant)
shapes
int getVerboseMode() const
btAlignedObjectArray< btTriangleInfoMap * > m_allocatedTriangleInfoMaps
virtual void deleteAllData()
delete all memory collision shapes, rigid bodies, constraints etc.
btTypedConstraint * getConstraintByName(const char *name)
int getNumRigidBodies() const
virtual class btCompoundShape * createCompoundShape()
The btBvhTriangleMeshShape is a static-triangle mesh shape, it can only be used for fixed/non-moving ...
btCollisionObject * getRigidBodyByIndex(int index) const
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
The btTriangleIndexVertexArray allows to access multiple triangle meshes, by indexing into existing t...
btHashMap< btHashPtr, btOptimizedBvh * > m_bvhMap
btAlignedObjectArray< btVector3DoubleData * > m_doubleVertexArrays
btAlignedObjectArray< btStridingMeshInterfaceData * > m_allocatedbtStridingMeshInterfaceDatas
virtual btGImpactMeshShape * createGimpactShape(btStridingMeshInterface *trimesh)
btHashMap< btHashString, btTypedConstraint * > m_nameConstraintMap
virtual btGearConstraint * createGearConstraint(btRigidBody &rbA, btRigidBody &rbB, const btVector3 &axisInA, const btVector3 &axisInB, btScalar ratio)
btOptimizedBvh * getBvhByIndex(int index) const
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
Definition: btRigidBody.h:587
virtual btCollisionShape * createConeShapeZ(btScalar radius, btScalar height)
virtual btOptimizedBvh * createOptimizedBvh()
acceleration and connectivity structures
btHashMap< btHashPtr, btCollisionShape * > m_shapeMap
btHashMap< btHashPtr, btTriangleInfoMap * > m_timMap
char * duplicateName(const char *name)
btCollisionObject can be used to manage collision detection objects.
virtual btCollisionShape * createBoxShape(const btVector3 &halfExtents)
btAlignedObjectArray< btTypedConstraint * > m_allocatedConstraints
virtual class btScaledBvhTriangleMeshShape * createScaledTrangleMeshShape(btBvhTriangleMeshShape *meshShape, const btVector3 &localScalingbtBvhTriangleMeshShape)
virtual btGeneric6DofSpring2Constraint * createGeneric6DofSpring2Constraint(btRigidBody &rbA, btRigidBody &rbB, const btTransform &frameInA, const btTransform &frameInB, int rotateOrder)
The btRigidBody is the main class for rigid body objects.
Definition: btRigidBody.h:62
The btOptimizedBvh extends the btQuantizedBvh to create AABB tree for triangle meshes, through the btStridingMeshInterface.
virtual btCollisionObject * createCollisionObject(const btTransform &startTransform, btCollisionShape *shape, const char *bodyName)
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
Definition: btRigidBody.h:561
this structure is not used, except for loading pre-2.82 .bullet files
btAlignedObjectArray< int * > m_indexArrays
void convertConstraintFloat(btTypedConstraintFloatData *constraintData, btRigidBody *rbA, btRigidBody *rbB, int fileVersion)
virtual void setDynamicsWorldInfo(const btVector3 &gravity, const btContactSolverInfo &solverInfo)
those virtuals are called by load and can be overridden by the user
virtual btTriangleIndexVertexArray * createMeshInterface(btStridingMeshInterfaceData &meshData)
virtual btCollisionShape * createConeShapeY(btScalar radius, btScalar height)
btVector3 can be used to represent 3D points and vectors.
Definition: btVector3.h:83
int getNumConstraints() const
virtual btPoint2PointConstraint * createPoint2PointConstraint(btRigidBody &rbA, btRigidBody &rbB, const btVector3 &pivotInA, const btVector3 &pivotInB)
constraints
The btTransform class supports rigid transforms with only translation and rotation and no scaling/she...
Definition: btTransform.h:34
btConeTwistConstraint can be used to simulate ragdoll joints (upper arm, leg etc) ...
The btStridingMeshInterface is the interface class for high performance generic access to triangle me...
btAlignedObjectArray< char * > m_allocatedNames
btTypedConstraint * getConstraintByIndex(int index) const
TypedConstraint is the baseclass for Bullet constraints and vehicles.
const char * getNameForPointer(const void *ptr) const
static btRigidBody & getFixedBody()
void setVerboseMode(int verboseMode)
int getNumTriangleInfoMaps() const
btAlignedObjectArray< btCollisionShape * > m_allocatedCollisionShapes
virtual btHingeConstraint * createHingeConstraint(btRigidBody &rbA, btRigidBody &rbB, const btTransform &rbAFrame, const btTransform &rbBFrame, bool useReferenceFrameA=false)
The btScaledBvhTriangleMeshShape allows to instance a scaled version of an existing btBvhTriangleMesh...
btCollisionShape * getCollisionShapeByIndex(int index)
btRigidBody * getRigidBodyByName(const char *name)
btHashMap< btHashPtr, btCollisionObject * > m_bodyMap
virtual btSliderConstraint * createSliderConstraint(btRigidBody &rbA, btRigidBody &rbB, const btTransform &frameInA, const btTransform &frameInB, bool useLinearReferenceFrameA)
The btConvexHullShape implements an implicit convex hull of an array of vertices. ...
The btTriangleInfoMap stores edge angle information for some triangles. You can compute this informat...
The btCompoundShape allows to store multiple other btCollisionShapes This allows for moving concave c...
btAlignedObjectArray< btTriangleIndexVertexArray * > m_allocatedTriangleIndexArrays
btAlignedObjectArray< btCollisionObject * > m_allocatedRigidBodies
virtual ~btWorldImporter()
btDynamicsWorld * m_dynamicsWorld
btAlignedObjectArray< btVector3FloatData * > m_floatVertexArrays
btHashMap< btHashPtr, const char * > m_objectNameMap
virtual btCollisionShape * createCapsuleShapeX(btScalar radius, btScalar height)
Generic 6 DOF constraint that allows to set spring motors to any translational and rotational DOF...
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
virtual class btMultiSphereShape * createMultiSphereShape(const btVector3 *positions, const btScalar *radi, int numSpheres)
btHashMap< btHashString, btRigidBody * > m_nameBodyMap
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
Definition: btScalar.h:278
void convertConstraintDouble(btTypedConstraintDoubleData *constraintData, btRigidBody *rbA, btRigidBody *rbB, int fileVersion)
int getNumBvhs() const