add btMultiBodyConstraint::finalizeMultiDof API: if you add multi-body constraints to a multi-dof btMultiBody, before it has been finalized using the btMultiBody::finalizeMultiDof call,

then you have to manually call the btMultiBodyConstraint::finalizeMultiDof for all multi-dof multi body constraints.
This commit is contained in:
erwin coumans
2015-03-03 13:24:06 -08:00
parent a391e619ed
commit 5d40d90bd0
13 changed files with 548 additions and 27 deletions

View File

@@ -15,21 +15,25 @@ btMultiBodyConstraint::btMultiBodyConstraint(btMultiBody* bodyA,btMultiBody* bod
m_isUnilateral(isUnilateral),
m_maxAppliedImpulse(100)
{
if(bodyA)
finalizeMultiDof();
}
void btMultiBodyConstraint::finalizeMultiDof()
{
if(m_bodyA)
{
if(bodyA->isMultiDof())
m_jacSizeA = (6 + bodyA->getNumDofs());
if(m_bodyA->isMultiDof())
m_jacSizeA = (6 + m_bodyA->getNumDofs());
else
m_jacSizeA = (6 + bodyA->getNumLinks());
m_jacSizeA = (6 + m_bodyA->getNumLinks());
}
if(bodyB)
if(m_bodyB)
{
if(bodyB->isMultiDof())
m_jacSizeBoth = m_jacSizeA + 6 + bodyB->getNumDofs();
if(m_bodyB->isMultiDof())
m_jacSizeBoth = m_jacSizeA + 6 + m_bodyB->getNumDofs();
else
m_jacSizeBoth = m_jacSizeA + 6 + bodyB->getNumLinks();
m_jacSizeBoth = m_jacSizeA + 6 + m_bodyB->getNumLinks();
}
else
m_jacSizeBoth = m_jacSizeA;