void Exporter::validateData() { info += "\r\n"; removeRedundantMaterials(); buildBoneHierarchy(); // Calculate bone id (prevents mixing wrong types) boneId = 0; for(unsigned int i = 0; i < bones.size(); ++i) { // Sum of child index * parent index for(unsigned int j = 0; j < i; ++j) if(bones[i].getParentName() == bones[j].getName()) boneId += i*j; } if(model.getObjects().size() > 1) { model.buildObjectHierarchy(); printInfo("Resorted object hierarchy"); } if(model.getHelpers().size() > 1) { model.buildHelperHierarchy(); printInfo("Resorted helper hierarchy"); } if(boneId >= 0) { char number[20] = { 0 }; _itoa(boneId, number, 10); info += "\r\n"; printInfo("Calculated bone id: " + std::string(number)); } model.setCollisionFlags(); // !!!!!!!!!!!!!!!!!! //if(boneId <= 0) // model.chopObjects(); }
//----------------------------------------------------------------------------- const AxisAlignedBox& XsiSkeletonExporter::exportSkeleton(const String& skeletonFileName, DeformerMap& deformers, float framesPerSecond, AnimationList& animList) { LogOgreAndXSI(L"** Begin OGRE Skeleton Export **"); copyDeformerMap(deformers); SkeletonPtr skeleton = SkeletonManager::getSingleton().create("export", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); // construct the hierarchy buildBoneHierarchy(skeleton.get(), deformers, animList); // progress report ProgressManager::getSingleton().progress(); establishInitialTransforms(deformers); // create animations mAABB.setNull(); createAnimations(skeleton.get(), deformers, framesPerSecond, animList, mAABB); // progress report ProgressManager::getSingleton().progress(); // Optimise skeleton->optimiseAllAnimations(); SkeletonSerializer ser; ser.exportSkeleton(skeleton.get(), skeletonFileName); // progress report ProgressManager::getSingleton().progress(); LogOgreAndXSI(L"** OGRE Skeleton Export Complete **"); cleanup(); return mAABB; }