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