serialize btGeneric6DofSpringConstraint

serialize btSoftBody::Joint
See also Issue 456
This commit is contained in:
erwin.coumans
2010-12-16 02:35:44 +00:00
parent b52eced793
commit dd7ee6919e
12 changed files with 617 additions and 359 deletions

View File

@@ -3353,6 +3353,98 @@ const char* btSoftBody::serialize(void* dataBuffer, class btSerializer* serializ
}
sbd->m_numJoints = m_joints.size();
sbd->m_joints = m_joints.size()? (btSoftBodyJointData*) serializer->getUniquePointer((void*)&m_joints[0]) : 0;
if (sbd->m_joints)
{
int sz = sizeof(btSoftBodyJointData);
int numElem = m_joints.size();
btChunk* chunk = serializer->allocate(sz,numElem);
btSoftBodyJointData* memPtr = (btSoftBodyJointData*)chunk->m_oldPtr;
for (int i=0;i<numElem;i++,memPtr++)
{
memPtr->m_jointType = (int)m_joints[i]->Type();
m_joints[i]->m_massmatrix.serializeFloat(memPtr->m_massmatrix);
m_joints[i]->m_refs[0].serializeFloat(memPtr->m_refs[0]);
m_joints[i]->m_refs[1].serializeFloat(memPtr->m_refs[1]);
m_joints[i]->m_drift.serializeFloat(memPtr->m_drift);
m_joints[i]->m_sdrift.serializeFloat(memPtr->m_sdrift);
memPtr->m_cfm = m_joints[i]->m_cfm;
memPtr->m_erp = m_joints[i]->m_erp;
memPtr->m_split = m_joints[i]->m_split;
memPtr->m_delete = m_joints[i]->m_delete;
for (int j=0;j<4;j++)
{
memPtr->m_relPosition[0].m_floats[j] = 0.f;
memPtr->m_relPosition[1].m_floats[j] = 0.f;
memPtr->m_axis[0].m_floats[j] = 0.f;
memPtr->m_axis[1].m_floats[j] = 0.f;
}
memPtr->m_bodyA = 0;
memPtr->m_bodyB = 0;
if (m_joints[i]->m_bodies[0].m_soft)
{
memPtr->m_bodyAtype = BT_JOINT_SOFT_BODY_CLUSTER;
memPtr->m_bodyA = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[0].m_soft);
}
if (m_joints[i]->m_bodies[0].m_collisionObject)
{
memPtr->m_bodyAtype = BT_JOINT_COLLISION_OBJECT;
memPtr->m_bodyA = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[0].m_collisionObject);
}
if (m_joints[i]->m_bodies[0].m_rigid)
{
memPtr->m_bodyAtype = BT_JOINT_RIGID_BODY;
memPtr->m_bodyA = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[0].m_rigid);
}
if (m_joints[i]->m_bodies[1].m_soft)
{
memPtr->m_bodyBtype = BT_JOINT_SOFT_BODY_CLUSTER;
memPtr->m_bodyB = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[1].m_soft);
}
if (m_joints[i]->m_bodies[1].m_collisionObject)
{
memPtr->m_bodyBtype = BT_JOINT_COLLISION_OBJECT;
memPtr->m_bodyB = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[1].m_collisionObject);
}
if (m_joints[i]->m_bodies[1].m_rigid)
{
memPtr->m_bodyBtype = BT_JOINT_RIGID_BODY;
memPtr->m_bodyB = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[1].m_rigid);
}
switch (m_joints[i]->Type())
{
case btSoftBody::Joint::eType::Linear:
{
btSoftBody::LJoint* lj = (btSoftBody::LJoint*)m_joints[i];
lj->m_rpos[0].serializeFloat(memPtr->m_relPosition[0]);
lj->m_rpos[1].serializeFloat(memPtr->m_relPosition[1]);
break;
}
case btSoftBody::Joint::eType::Angular:
{
btSoftBody::AJoint* aj = (btSoftBody::AJoint*) m_joints[i];
aj->m_axis[0].serializeFloat(memPtr->m_axis[0]);
aj->m_axis[1].serializeFloat(memPtr->m_axis[1]);
break;
}
default:
{
}
};
}
serializer->finalizeChunk(chunk,"btSoftBodyJointData",BT_ARRAY_CODE,(void*) &m_joints[0]);
}
return btSoftBodyDataName;
}