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 "COLLADASaxFWLVisualSceneLoader.h"
13 #include "COLLADASaxFWLFileLoader.h"
14 
15 #include "COLLADAFWVisualScene.h"
16 #include "COLLADAFWIWriter.h"
17 
18 
19 namespace COLLADASaxFWL
20 {
21 
VisualSceneLoader(IFilePartLoader * callingFilePartLoader,const char * id)22 	VisualSceneLoader::VisualSceneLoader( IFilePartLoader* callingFilePartLoader, const char* id )
23 		: FilePartLoader(callingFilePartLoader)
24         , mVisualScene(new COLLADAFW::VisualScene(createUniqueIdFromId(id, COLLADAFW::VisualScene::ID())))
25         , mInNode (false)
26 	{
27 		NodeLoader::setHandlingFilePartLoader(this);
28 	}
29 
30     //------------------------------
~VisualSceneLoader()31 	VisualSceneLoader::~VisualSceneLoader()
32 	{
33 	}
34 
35     //------------------------------
getUniqueId()36     const COLLADAFW::UniqueId& VisualSceneLoader::getUniqueId()
37     {
38         if ( mCurrentInstanceController )
39 		{
40 			return mCurrentInstanceController->getUniqueId();
41 		}
42         else if ( mCurrentInstanceGeometry )
43 		{
44 			return mCurrentInstanceGeometry->getUniqueId();
45 		}
46 
47 		if ( !mNodeStack.empty() )
48 		{
49 			COLLADAFW::Node* currentNode = mNodeStack.top();
50 			return currentNode->getUniqueId();
51 		}
52 
53         if ( mVisualScene )
54 		{
55 			return mVisualScene->getUniqueId();
56 		}
57 
58         return COLLADAFW::UniqueId::INVALID;
59     }
60 
61 	//------------------------------
handleRootNode(COLLADAFW::Node * rootNode)62 	void VisualSceneLoader::handleRootNode( COLLADAFW::Node* rootNode )
63 	{
64 		mVisualScene->getRootNodes().append(rootNode);
65 	}
66 
67 	//------------------------------
begin__visual_scene__node(const node__AttributeData & attributeData)68 	bool VisualSceneLoader::begin__visual_scene__node( const node__AttributeData& attributeData )
69 	{
70         mInNode = true;
71 		return beginNode(attributeData);
72 	}
73 
74 	//------------------------------
end__visual_scene__node()75 	bool VisualSceneLoader::end__visual_scene__node()
76 	{
77         mInNode = false;
78 		return endNode();
79 	}
80 
81 	//------------------------------
end__visual_scene()82 	bool VisualSceneLoader::end__visual_scene()
83 	{
84 		getFileLoader()->addVisualScene(mVisualScene);
85 		mVisualScene = 0;
86 		finish();
87 		moveUpInSidTree();
88 		return true;
89 	}
90 
91 } // namespace COLLADASaxFWL
92