btBulletWorldImporter fix: don't crash when loading files that have wrong constraint setup for btGeneric6DofConstraints

This commit is contained in:
erwin.coumans
2010-03-15 23:28:50 +00:00
parent 2f2d33d578
commit 9de41ddd7a

View File

@@ -810,11 +810,20 @@ bool btBulletWorldImporter::loadFileFromMemory( bParse::btBulletFile* bulletFil
rbBFrame.deSerializeFloat(dofData->m_rbBFrame); rbBFrame.deSerializeFloat(dofData->m_rbBFrame);
dof = createGeneric6DofConstraint(*rbA,*rbB,rbAFrame,rbBFrame,dofData->m_useLinearReferenceFrameA!=0); dof = createGeneric6DofConstraint(*rbA,*rbB,rbAFrame,rbBFrame,dofData->m_useLinearReferenceFrameA!=0);
} else } else
{
if (rbB)
{ {
btTransform rbBFrame; btTransform rbBFrame;
rbBFrame.deSerializeFloat(dofData->m_rbBFrame); rbBFrame.deSerializeFloat(dofData->m_rbBFrame);
dof = createGeneric6DofConstraint(*rbB,rbBFrame,dofData->m_useLinearReferenceFrameA!=0); dof = createGeneric6DofConstraint(*rbB,rbBFrame,dofData->m_useLinearReferenceFrameA!=0);
} else
{
printf("Error in btWorldImporter::createGeneric6DofConstraint: missing rbB\n");
} }
}
if (dof)
{
btVector3 angLowerLimit,angUpperLimit, linLowerLimit,linUpperlimit; btVector3 angLowerLimit,angUpperLimit, linLowerLimit,linUpperlimit;
angLowerLimit.deSerializeFloat(dofData->m_angularLowerLimit); angLowerLimit.deSerializeFloat(dofData->m_angularLowerLimit);
angUpperLimit.deSerializeFloat(dofData->m_angularUpperLimit); angUpperLimit.deSerializeFloat(dofData->m_angularUpperLimit);
@@ -825,6 +834,7 @@ bool btBulletWorldImporter::loadFileFromMemory( bParse::btBulletFile* bulletFil
dof->setAngularUpperLimit(angUpperLimit); dof->setAngularUpperLimit(angUpperLimit);
dof->setLinearLowerLimit(linLowerLimit); dof->setLinearLowerLimit(linLowerLimit);
dof->setLinearUpperLimit(linUpperlimit); dof->setLinearUpperLimit(linUpperlimit);
}
constraint = dof; constraint = dof;
break; break;