diff --git a/Extras/BulletColladaConverter/ColladaConverter.cpp b/Extras/BulletColladaConverter/ColladaConverter.cpp index c2650dc39..c25d91100 100644 --- a/Extras/BulletColladaConverter/ColladaConverter.cpp +++ b/Extras/BulletColladaConverter/ColladaConverter.cpp @@ -3189,6 +3189,35 @@ void ColladaConverter::registerRigidBody(btRigidBody* body, const char* name) } +void ColladaConverter::deRegisterRigidBody(btRigidBody* body) +{ + btRigidBodyColladaInfo* rbci = findRigidBodyColladaInfo (body); + + if (!rbci) + return; + + daeElement::removeFromParent (rbci->m_instanceRigidBody); + daeElement::removeFromParent (rbci->m_domRigidBody); + daeElement::removeFromParent (rbci->m_node); + + delete rbci; + + // remove from map + int uid = body->getBroadphaseProxy()->getUid(); + btHashKeyPtr tmpKey(uid); + m_rbUserInfoHashMap.remove (tmpKey); +} + +const char* ColladaConverter::getName (btRigidBody* body) +{ + btRigidBodyColladaInfo* rbci = findRigidBodyColladaInfo (body); + + if (!rbci) + return NULL; + + return rbci->m_node->getSid(); +} + void ColladaConverter::registerConstraint(btTypedConstraint* constraint, const char* name) { @@ -3203,3 +3232,38 @@ void ColladaConverter::registerConstraint(btTypedConstraint* constraint, const c rcci->m_domRigidConstraint->setSid(name); rcci->m_domInstanceRigidConstraint->setConstraint (name); } + +void ColladaConverter::deRegisterConstraint(btTypedConstraint* constraint) +{ + if (constraint->getConstraintType () != D6_CONSTRAINT_TYPE) + { + return; + } + + btRigidConstraintColladaInfo* rcci = findRigidConstraintColladaInfo(constraint); + + if (!rcci) + { + return; + } + + daeElement::removeFromParent (rcci->m_domInstanceRigidConstraint); + daeElement::removeFromParent (rcci->m_domRigidConstraint); + delete rcci; + + // remove from map + int uid = constraint->getUid(); + btHashKeyPtr tmpKey(uid); + m_constraintUserInfoHashMap.remove (tmpKey); +} + + +const char* ColladaConverter::getName (btTypedConstraint* constraint) +{ + btRigidConstraintColladaInfo* rcci = findRigidConstraintColladaInfo (constraint); + + if (!rcci) + return NULL; + + return rcci->m_domRigidConstraint->getSid(); +} \ No newline at end of file diff --git a/Extras/BulletColladaConverter/ColladaConverter.h b/Extras/BulletColladaConverter/ColladaConverter.h index 43bbdbea4..9f4a1cdeb 100644 --- a/Extras/BulletColladaConverter/ColladaConverter.h +++ b/Extras/BulletColladaConverter/ColladaConverter.h @@ -99,7 +99,6 @@ protected: btHashMap,btRigidBodyColladaInfo*> m_rbUserInfoHashMap; btHashMap,btRigidConstraintColladaInfo*> m_constraintUserInfoHashMap; - class DAE* m_collada; class domCOLLADA* m_dom; char* m_filename; @@ -191,10 +190,11 @@ public: void registerRigidBody(btRigidBody* body, const char* name); void deRegisterRigidBody(btRigidBody* body); + const char* getName (btRigidBody* body); void registerConstraint(btTypedConstraint* constraint, const char* name); void deRegisterConstraint(btTypedConstraint* constraint); - + const char* getName (btTypedConstraint* constraint); ///those virtuals are called by load and save. virtual btTypedConstraint* createUniversalD6Constraint(