Applied patch to avoid "Assert in ClosestConvexResultCallback::addSingleResult",

Thanks to Paul Dubois for the report and patch, see Issue 396
Also Issue 415
This commit is contained in:
erwin.coumans
2010-08-25 19:23:09 +00:00
parent 3c2d67115c
commit 9086c15e49

View File

@@ -434,11 +434,13 @@ void btCollisionWorld::rayTestSingle(const btTransform& rayFromTrans,const btTra
btCollisionShape* saveCollisionShape = collisionObject->getCollisionShape();
collisionObject->internalSetTemporaryCollisionShape((btCollisionShape*)childCollisionShape);
struct LocalInfoAdder2 : public RayResultCallback {
int m_i;
RayResultCallback* m_userCallback;
int m_i;
LocalInfoAdder2 (int i, RayResultCallback *user)
: m_i(i), m_userCallback(user)
: m_userCallback(user),
m_i(i)
{
m_closestHitFraction = m_userCallback->m_closestHitFraction;
}
virtual btScalar addSingleResult (btCollisionWorld::LocalRayResult &r, bool b)
{
@@ -447,13 +449,14 @@ void btCollisionWorld::rayTestSingle(const btTransform& rayFromTrans,const btTra
shapeInfo.m_triangleIndex = m_i;
if (r.m_localShapeInfo == NULL)
r.m_localShapeInfo = &shapeInfo;
return m_userCallback->addSingleResult(r, b);
const btScalar result = m_userCallback->addSingleResult(r, b);
m_closestHitFraction = m_userCallback->m_closestHitFraction;
return result;
}
};
LocalInfoAdder2 my_cb(i, &resultCallback);
my_cb.m_closestHitFraction = resultCallback.m_closestHitFraction;
rayTestSingle(rayFromTrans,rayToTrans,
collisionObject,
@@ -660,7 +663,10 @@ void btCollisionWorld::objectQuerySingle(const btConvexShape* castShape,const bt
int m_i;
LocalInfoAdder (int i, ConvexResultCallback *user)
: m_userCallback(user),m_i(i) { }
: m_userCallback(user), m_i(i)
{
m_closestHitFraction = m_userCallback->m_closestHitFraction;
}
virtual btScalar addSingleResult (btCollisionWorld::LocalConvexResult& r, bool b)
{
btCollisionWorld::LocalShapeInfo shapeInfo;
@@ -668,12 +674,15 @@ void btCollisionWorld::objectQuerySingle(const btConvexShape* castShape,const bt
shapeInfo.m_triangleIndex = m_i;
if (r.m_localShapeInfo == NULL)
r.m_localShapeInfo = &shapeInfo;
return m_userCallback->addSingleResult(r, b);
const btScalar result = m_userCallback->addSingleResult(r, b);
m_closestHitFraction = m_userCallback->m_closestHitFraction;
return result;
}
};
LocalInfoAdder my_cb(i, &resultCallback);
my_cb.m_closestHitFraction = resultCallback.m_closestHitFraction;
objectQuerySingle(castShape, convexFromTrans,convexToTrans,
collisionObject,