6DofConstraint bug (including patch)

gertvv

25-12-2012 15:06:47

Some copy/pasted code seems to have made it through to the 6DofConstraint wrapper, where each of the set*Limit functions calls the setLinearLowerLimit() from the wrapped bt object. Had me chasing a bug for quite a while before I considered OgreBullet as a potential problem. Patch attached.

Also, I attach a patch for Collisions/src/Utils/OgreBulletCollisionsMeshToShapeConverter.cpp, where I needed to modify a #include for it to compile (might be due to me having the build environment set up incorrectly though).



EDIT: couldn't find the uploaded patches anywhere, so here they are inline:


Index: Dynamics/src/Constraints/OgreBulletDynamics6DofConstraint.cpp
===================================================================
--- Dynamics/src/Constraints/OgreBulletDynamics6DofConstraint.cpp (revision 2986)
+++ Dynamics/src/Constraints/OgreBulletDynamics6DofConstraint.cpp (working copy)
@@ -70,17 +70,17 @@
// -------------------------------------------------------------------------
void SixDofConstraint::setLinearUpperLimit(const Ogre::Vector3& linearUpper)
{
- static_cast<btGeneric6DofConstraint* > (mConstraint)->setLinearLowerLimit(OgreBulletCollisions::OgreBtConverter::to (linearUpper));
+ static_cast<btGeneric6DofConstraint* > (mConstraint)->setLinearUpperLimit(OgreBulletCollisions::OgreBtConverter::to (linearUpper));
}
// -------------------------------------------------------------------------
void SixDofConstraint::setAngularLowerLimit(const Ogre::Vector3& angularLower)
{
- static_cast<btGeneric6DofConstraint* > (mConstraint)->setLinearLowerLimit(OgreBulletCollisions::OgreBtConverter::to (angularLower));
+ static_cast<btGeneric6DofConstraint* > (mConstraint)->setAngularLowerLimit(OgreBulletCollisions::OgreBtConverter::to (angularLower));
}
// -------------------------------------------------------------------------
void SixDofConstraint::setAngularUpperLimit(const Ogre::Vector3& angularUpper)
{
- static_cast<btGeneric6DofConstraint* > (mConstraint)->setLinearLowerLimit(OgreBulletCollisions::OgreBtConverter::to (angularUpper));
+ static_cast<btGeneric6DofConstraint* > (mConstraint)->setAngularUpperLimit(OgreBulletCollisions::OgreBtConverter::to (angularUpper));
}
// -------------------------------------------------------------------------
void SixDofConstraint::setLimit(const int axis, const Ogre::Real lo, const Ogre::Real hi)
@@ -92,4 +92,4 @@
{
return static_cast<btGeneric6DofConstraint* > (mConstraint)->isLimited(limitIndex);
}
-}
\ No newline at end of file
+}


And the include fix:


Index: Collisions/src/Utils/OgreBulletCollisionsMeshToShapeConverter.cpp
===================================================================
--- Collisions/src/Utils/OgreBulletCollisionsMeshToShapeConverter.cpp (revision 2986)
+++ Collisions/src/Utils/OgreBulletCollisionsMeshToShapeConverter.cpp (working copy)
@@ -32,7 +32,7 @@

#include "Utils/OgreBulletCollisionsMeshToShapeConverter.h"

-#include "ConvexBuilder.h"
+#include "ConvexDecomposition/ConvexBuilder.h"

#include "BulletCollision/CollisionShapes/btShapeHull.h"

@@ -1092,4 +1092,4 @@
//geom->setPosition(cap_orig + (boneOrientation * (cap_dirLength * 0.5)));

return geom;
-}
\ No newline at end of file
+}