1 #include "COLLADASaxFWLStableHeaders.h" 2 #include "COLLADASaxFWLLibraryAnimationClipsLoader.h" 3 #include "COLLADASaxFWLLoader.h" 4 5 #include "COLLADAFWAnimationClip.h" 6 #include "COLLADAFWIWriter.h" 7 #include "COLLADAFWUniqueId.h" 8 9 namespace COLLADASaxFWL 10 { 11 //------------------------------ LibraryAnimationClipsLoader(IFilePartLoader * callingFilePartLoader)12 LibraryAnimationClipsLoader::LibraryAnimationClipsLoader( IFilePartLoader* callingFilePartLoader ) 13 : FilePartLoader(callingFilePartLoader) 14 , mAnimationClip(0) 15 { 16 17 } 18 19 //------------------------------ ~LibraryAnimationClipsLoader()20 LibraryAnimationClipsLoader::~LibraryAnimationClipsLoader() 21 { 22 } 23 24 //------------------------------ getUniqueId()25 const COLLADAFW::UniqueId& LibraryAnimationClipsLoader::getUniqueId() 26 { 27 if ( mAnimationClip ) 28 return mAnimationClip->getUniqueId(); 29 return COLLADAFW::UniqueId::INVALID; 30 } 31 32 //------------------------------ end__library_animation_clips()33 bool LibraryAnimationClipsLoader::end__library_animation_clips() 34 { 35 moveUpInSidTree(); 36 finish(); 37 return true; 38 } 39 40 //------------------------------ begin__animation_clip(const animation_clip__AttributeData & attributeData)41 bool LibraryAnimationClipsLoader::begin__animation_clip( const animation_clip__AttributeData& attributeData ) 42 { 43 mAnimationClip = FW_NEW COLLADAFW::AnimationClip(createUniqueIdFromId(attributeData.id, COLLADAFW::AnimationClip::ID())); 44 45 if ( attributeData.name ) 46 mAnimationClip->setName ( (const char*)attributeData.name ); 47 else if ( attributeData.id ) 48 mAnimationClip->setName ( (const char*)attributeData.id ); 49 50 if ( attributeData.id ) 51 mAnimationClip->setOriginalId ( (const char*)attributeData.id ); 52 53 return true; 54 } 55 56 //------------------------------ end__animation_clip()57 bool LibraryAnimationClipsLoader::end__animation_clip() 58 { 59 COLLADAFW::UniqueIdArray& instanceAnimationUniqueIds = mAnimationClip->getInstanceAnimationUniqueIds(); 60 instanceAnimationUniqueIds.allocMemory( mInstanceAnimationIds.size() ); 61 instanceAnimationUniqueIds.setCount( mInstanceAnimationIds.size() ); 62 63 UniqueIdSet::const_iterator it = mInstanceAnimationIds.begin(); 64 size_t i = 0; 65 for ( ; it != mInstanceAnimationIds.end(); ++it, ++i ) 66 { 67 instanceAnimationUniqueIds[i] = *it; 68 } 69 70 mInstanceAnimationIds.clear(); 71 72 bool success = true; 73 if ( (getObjectFlags() & Loader::ANIMATION_CLIP_FLAG) != 0) 74 { 75 success = writer()->writeAnimationClip(mAnimationClip); 76 } 77 78 FW_DELETE mAnimationClip; 79 mAnimationClip = 0; 80 return success; 81 } 82 83 //------------------------------ begin__instance_animation(const instance_animation__AttributeData & attributeData)84 bool LibraryAnimationClipsLoader::begin__instance_animation( const instance_animation__AttributeData& attributeData ) 85 { 86 mInstanceAnimationIds.insert(createUniqueIdFromUrl(attributeData.url, COLLADAFW::Animation::ID())); 87 return true; 88 } 89 90 //------------------------------ end__instance_animation()91 bool LibraryAnimationClipsLoader::end__instance_animation() 92 { 93 return true; 94 } 95 } // namespace COLLADASaxFWL