void mdlWriter::WriteBone(scene::BoneNode* bone,OS::IStream* stream) { core::stringc tmpStr; OS::StreamWriter writer(stream); MDLLoaderV0::JoinHeader jointHeader; core::string_to_char(bone->getNodeName(),tmpStr); jointHeader.index=bone->getID(); jointHeader.position=bone->getPosition(); jointHeader.rotation=bone->getOrintation(); jointHeader.scale=bone->getScale(); jointHeader.basePosition=bone->getBasePosition(); jointHeader.baseRotation=bone->getBaseOrintation(); jointHeader.baseScale=bone->getScale(); jointHeader.childCount=bone->getSubBones().size(); writer.binWriteString(tmpStr); stream->write(&jointHeader,sizeof(jointHeader)); const scene::BonesList&bones= bone->getSubBones(); scene::BonesList::const_iterator it=bones.begin(); for(;it!=bones.end();++it) { WriteBone(*it,stream); } }
void LegacyAvatarSerializer::WriteBoneModifierSet(QDomDocument& dest, QDomElement& dest_elem, const BoneModifierSet& bones) { QDomElement parameter = dest.createElement("dynamic_animation_parameter"); QDomElement modifier = dest.createElement("dynamic_animation"); SetAttribute(parameter, "name", bones.name_); SetAttribute(parameter, "position", bones.value_); SetAttribute(modifier, "name", bones.name_); QDomElement base_animations = dest.createElement("base_animations"); modifier.appendChild(base_animations); QDomElement bonelist = dest.createElement("bones"); for (uint i = 0; i < bones.modifiers_.size(); ++i) { QDomElement bone = WriteBone(dest, bones.modifiers_[i]); bonelist.appendChild(bone); } modifier.appendChild(bonelist); if (!dest_elem.isNull()) { dest_elem.appendChild(parameter); dest_elem.appendChild(modifier); } else { dest.appendChild(parameter); dest.appendChild(modifier); } }
void mdlWriter::WriteSkeleton(scene::Skeleton*skeleton,OS::IStream* stream) { core::stringc tmpStr; OS::StreamWriter writer(stream); MDLLoaderV0::SkeletonHeader skHeader; core::string_to_char(skeleton->getResourceName(),tmpStr); writer.binWriteString(tmpStr); skHeader.rootsCount=skeleton->getRootBonesCount(); stream->write(&skHeader,sizeof(skHeader)); for(int i=0;i<skHeader.rootsCount;++i) { scene::BoneNode* bone=skeleton->getRootBone(i); WriteBone(bone,stream); } }