SBGeomObject* SBCollisionManager::createCollisionObject( const std::string& geomName, const std::string& geomType, SrVec size, SrVec from, SrVec to ) { SBGeomObject* newObj = SBGeomObject::createGeometry(geomType,size,from,to); if (newObj) { removeCollisionObject(geomName); // remove existing one geomObjectMap[geomName] = newObj; newObj->color.set(1.0f, 1.0f, 0.0f); } return newObj; }
void btSimpleDynamicsWorld::removeRigidBody(btRigidBody* body) { removeCollisionObject(body); }
void ForkLiftDemo::exitPhysics() { //cleanup in the reverse order of creation/initialization //remove the rigidbodies from the dynamics world and delete them int i; for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) { btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; btRigidBody* body = btRigidBody::upcast(obj); if (body && body->getMotionState()) { while (body->getNumConstraintRefs()) { btTypedConstraint* constraint = body->getConstraintRef(0); m_dynamicsWorld->removeConstraint(constraint); delete constraint; } delete body->getMotionState(); m_dynamicsWorld->removeRigidBody(body); } else { m_dynamicsWorld->removeCollisionObject( obj ); } delete obj; } //delete collision shapes for (int j=0;j<m_collisionShapes.size();j++) { btCollisionShape* shape = m_collisionShapes[j]; delete shape; } m_collisionShapes.clear(); delete m_indexVertexArrays; delete m_vertices; //delete dynamics world delete m_dynamicsWorld; m_dynamicsWorld=0; delete m_vehicleRayCaster; m_vehicleRayCaster = 0; delete m_vehicle; m_vehicle=0; delete m_wheelShape; m_wheelShape=0; //delete solver delete m_constraintSolver; m_constraintSolver=0; //delete broadphase delete m_overlappingPairCache; m_overlappingPairCache=0; //delete dispatcher delete m_dispatcher; m_dispatcher=0; delete m_collisionConfiguration; m_collisionConfiguration=0; }
/** * Destructor. */ SimpleLightSource::~SimpleLightSource() { removeCollisionObject(mBodyCollisionObject); delete mBodyCollisionObject; }