1 /* 2 Copyright (c) 2008-2009 NetAllied Systems GmbH 3 4 This file is part of COLLADASaxFrameworkLoader. 5 6 Licensed under the MIT Open Source License, 7 for details please see LICENSE file or the website 8 http://www.opensource.org/licenses/mit-license.php 9 */ 10 11 #include "COLLADASaxFWLStableHeaders.h" 12 #include "COLLADASaxFWLLibraryMaterialsLoader.h" 13 #include "COLLADASaxFWLLoader.h" 14 15 #include "COLLADAFWIWriter.h" 16 #include "COLLADAFWMaterial.h" 17 #include "COLLADAFWEffect.h" 18 19 20 namespace COLLADASaxFWL 21 { 22 23 //------------------------------ LibraryMaterialsLoader(IFilePartLoader * callingFilePartLoader)24 LibraryMaterialsLoader::LibraryMaterialsLoader( IFilePartLoader* callingFilePartLoader ) 25 : FilePartLoader(callingFilePartLoader) 26 , mCurrentMaterial(0) 27 , mInInstanceEffect (false) 28 { 29 30 } 31 32 //------------------------------ ~LibraryMaterialsLoader()33 LibraryMaterialsLoader::~LibraryMaterialsLoader() 34 { 35 } 36 37 //------------------------------ begin__material(const material__AttributeData & attributeData)38 bool LibraryMaterialsLoader::begin__material( const material__AttributeData& attributeData ) 39 { 40 mCurrentMaterial = FW_NEW COLLADAFW::Material(createUniqueIdFromId(attributeData.id, COLLADAFW::Material::ID())); 41 42 if ( attributeData.name ) 43 mCurrentMaterial->setName ( (const char*)attributeData.name ); 44 else if ( attributeData.id ) 45 mCurrentMaterial->setName ( (const char*)attributeData.id ); 46 47 if ( attributeData.id ) 48 mCurrentMaterial->setOriginalId ( (const char*)attributeData.id ); 49 50 return true; 51 } 52 53 //------------------------------ end__material()54 bool LibraryMaterialsLoader::end__material() 55 { 56 bool success = true; 57 if ( (getObjectFlags() & Loader::MATERIAL_FLAG) != 0 ) 58 { 59 success = writer()->writeMaterial(mCurrentMaterial); 60 } 61 62 FW_DELETE mCurrentMaterial; 63 mCurrentMaterial = 0; 64 return success; 65 } 66 67 //------------------------------ begin__instance_effect(const instance_effect__AttributeData & attributeData)68 bool LibraryMaterialsLoader::begin__instance_effect( const instance_effect__AttributeData& attributeData ) 69 { 70 mInInstanceEffect = true; 71 mCurrentMaterial->setInstantiatedEffect(createUniqueIdFromUrl(attributeData.url, COLLADAFW::Effect::ID())); 72 return true; 73 } 74 75 //------------------------------ end__instance_effect()76 bool LibraryMaterialsLoader::end__instance_effect () 77 { 78 mInInstanceEffect = false; 79 return true; 80 } 81 82 //------------------------------ end__library_materials()83 bool LibraryMaterialsLoader::end__library_materials() 84 { 85 moveUpInSidTree(); 86 finish(); 87 return true; 88 } 89 90 //------------------------------ getUniqueId()91 const COLLADAFW::UniqueId& LibraryMaterialsLoader::getUniqueId () 92 { 93 if ( mCurrentMaterial ) 94 return mCurrentMaterial->getUniqueId (); 95 return COLLADAFW::UniqueId::INVALID; 96 } 97 98 } // namespace COLLADASaxFWL 99