btDiscreteDynamicsWorld.h
Go to the documentation of this file.
00001 /*
00002 Bullet Continuous Collision Detection and Physics Library
00003 Copyright (c) 2003-2009 Erwin Coumans  http://bulletphysics.org
00004 
00005 This software is provided 'as-is', without any express or implied warranty.
00006 In no event will the authors be held liable for any damages arising from the use of this software.
00007 Permission is granted to anyone to use this software for any purpose, 
00008 including commercial applications, and to alter it and redistribute it freely, 
00009 subject to the following restrictions:
00010 
00011 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.
00012 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
00013 3. This notice may not be removed or altered from any source distribution.
00014 */
00015 
00016 
00017 #ifndef BT_DISCRETE_DYNAMICS_WORLD_H
00018 #define BT_DISCRETE_DYNAMICS_WORLD_H
00019 
00020 #include "btDynamicsWorld.h"
00021 
00022 class btDispatcher;
00023 class btOverlappingPairCache;
00024 class btConstraintSolver;
00025 class btSimulationIslandManager;
00026 class btTypedConstraint;
00027 class btActionInterface;
00028 
00029 class btIDebugDraw;
00030 #include "LinearMath/btAlignedObjectArray.h"
00031 
00032 
00035 class btDiscreteDynamicsWorld : public btDynamicsWorld
00036 {
00037 protected:
00038 
00039         btConstraintSolver*     m_constraintSolver;
00040 
00041         btSimulationIslandManager*      m_islandManager;
00042 
00043         btAlignedObjectArray<btTypedConstraint*> m_constraints;
00044 
00045         btAlignedObjectArray<btRigidBody*> m_nonStaticRigidBodies;
00046 
00047         btVector3       m_gravity;
00048 
00049         //for variable timesteps
00050         btScalar        m_localTime;
00051         //for variable timesteps
00052 
00053         bool    m_ownsIslandManager;
00054         bool    m_ownsConstraintSolver;
00055         bool    m_synchronizeAllMotionStates;
00056 
00057         btAlignedObjectArray<btActionInterface*>        m_actions;
00058         
00059         int     m_profileTimings;
00060 
00061         virtual void    predictUnconstraintMotion(btScalar timeStep);
00062         
00063         virtual void    integrateTransforms(btScalar timeStep);
00064                 
00065         virtual void    calculateSimulationIslands();
00066 
00067         virtual void    solveConstraints(btContactSolverInfo& solverInfo);
00068         
00069         void    updateActivationState(btScalar timeStep);
00070 
00071         void    updateActions(btScalar timeStep);
00072 
00073         void    startProfiling(btScalar timeStep);
00074 
00075         virtual void    internalSingleStepSimulation( btScalar timeStep);
00076 
00077 
00078         virtual void    saveKinematicState(btScalar timeStep);
00079 
00080         void    serializeRigidBodies(btSerializer* serializer);
00081 
00082 public:
00083 
00084 
00086         btDiscreteDynamicsWorld(btDispatcher* dispatcher,btBroadphaseInterface* pairCache,btConstraintSolver* constraintSolver,btCollisionConfiguration* collisionConfiguration);
00087 
00088         virtual ~btDiscreteDynamicsWorld();
00089 
00091         virtual int     stepSimulation( btScalar timeStep,int maxSubSteps=1, btScalar fixedTimeStep=btScalar(1.)/btScalar(60.));
00092 
00093 
00094         virtual void    synchronizeMotionStates();
00095 
00097         void    synchronizeSingleMotionState(btRigidBody* body);
00098 
00099         virtual void    addConstraint(btTypedConstraint* constraint, bool disableCollisionsBetweenLinkedBodies=false);
00100 
00101         virtual void    removeConstraint(btTypedConstraint* constraint);
00102 
00103         virtual void    addAction(btActionInterface*);
00104 
00105         virtual void    removeAction(btActionInterface*);
00106         
00107         btSimulationIslandManager*      getSimulationIslandManager()
00108         {
00109                 return m_islandManager;
00110         }
00111 
00112         const btSimulationIslandManager*        getSimulationIslandManager() const 
00113         {
00114                 return m_islandManager;
00115         }
00116 
00117         btCollisionWorld*       getCollisionWorld()
00118         {
00119                 return this;
00120         }
00121 
00122         virtual void    setGravity(const btVector3& gravity);
00123 
00124         virtual btVector3 getGravity () const;
00125 
00126         virtual void    addCollisionObject(btCollisionObject* collisionObject,short int collisionFilterGroup=btBroadphaseProxy::StaticFilter,short int collisionFilterMask=btBroadphaseProxy::AllFilter ^ btBroadphaseProxy::StaticFilter);
00127 
00128         virtual void    addRigidBody(btRigidBody* body);
00129 
00130         virtual void    addRigidBody(btRigidBody* body, short group, short mask);
00131 
00132         virtual void    removeRigidBody(btRigidBody* body);
00133 
00135         virtual void    removeCollisionObject(btCollisionObject* collisionObject);
00136 
00137 
00138         void    debugDrawConstraint(btTypedConstraint* constraint);
00139 
00140         virtual void    debugDrawWorld();
00141 
00142         virtual void    setConstraintSolver(btConstraintSolver* solver);
00143 
00144         virtual btConstraintSolver* getConstraintSolver();
00145         
00146         virtual int             getNumConstraints() const;
00147 
00148         virtual btTypedConstraint* getConstraint(int index)     ;
00149 
00150         virtual const btTypedConstraint* getConstraint(int index) const;
00151 
00152         
00153         virtual btDynamicsWorldType     getWorldType() const
00154         {
00155                 return BT_DISCRETE_DYNAMICS_WORLD;
00156         }
00157         
00159         virtual void    clearForces();
00160 
00162         virtual void    applyGravity();
00163 
00164         virtual void    setNumTasks(int numTasks)
00165         {
00166         (void) numTasks;
00167         }
00168 
00170         virtual void updateVehicles(btScalar timeStep)
00171         {
00172                 updateActions(timeStep);
00173         }
00174 
00176         virtual void    addVehicle(btActionInterface* vehicle);
00178         virtual void    removeVehicle(btActionInterface* vehicle);
00180         virtual void    addCharacter(btActionInterface* character);
00182         virtual void    removeCharacter(btActionInterface* character);
00183 
00184         void    setSynchronizeAllMotionStates(bool synchronizeAll)
00185         {
00186                 m_synchronizeAllMotionStates = synchronizeAll;
00187         }
00188         bool getSynchronizeAllMotionStates() const
00189         {
00190                 return m_synchronizeAllMotionStates;
00191         }
00192 
00194         virtual void    serialize(btSerializer* serializer);
00195 
00196 };
00197 
00198 #endif //BT_DISCRETE_DYNAMICS_WORLD_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines


bullet
Author(s): Erwin Coumans, ROS package maintained by Tully Foote
autogenerated on Wed Oct 31 2012 07:54:31