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