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 "COLLADASaxFWLMeshLoader14.h" 13 #include "COLLADASaxFWLSplineLoader14.h" 14 #include "COLLADASaxFWLMeshLoader15.h" 15 #include "COLLADASaxFWLGeometryLoader.h" 16 17 #include "COLLADAFWIWriter.h" 18 19 20 namespace COLLADASaxFWL 21 { 22 GeometryLoader(IFilePartLoader * callingFilePartLoader)23 GeometryLoader::GeometryLoader( IFilePartLoader* callingFilePartLoader) 24 : FilePartLoader(callingFilePartLoader) 25 , mMeshLoader(0) 26 , mSplineLoader(0) 27 { 28 } 29 30 //------------------------------ ~GeometryLoader()31 GeometryLoader::~GeometryLoader() 32 { 33 } 34 35 //------------------------------ getUniqueId()36 const COLLADAFW::UniqueId& GeometryLoader::getUniqueId () 37 { 38 if ( mMeshLoader ) 39 return mMeshLoader->getUniqueId (); 40 return COLLADAFW::UniqueId::INVALID; 41 } 42 43 //------------------------------ begin__mesh()44 bool GeometryLoader::begin__mesh() 45 { 46 mMeshLoader = new MeshLoader(this, mGeometryId, mGeometryName); 47 setPartLoader(mMeshLoader); 48 switch (this->getParserImpl()->getCOLLADAVersion()) 49 { 50 case COLLADA_14: 51 { 52 MeshLoader14* meshloader14 = new MeshLoader14( mMeshLoader ); 53 mMeshLoader->setParserImpl(meshloader14); 54 setParser(meshloader14); 55 break; 56 } 57 case COLLADA_15: 58 { 59 MeshLoader15* meshloader15 = new MeshLoader15( mMeshLoader ); 60 mMeshLoader->setParserImpl(meshloader15); 61 setParser(meshloader15); 62 break; 63 } 64 default: 65 break; 66 } 67 return true; 68 } 69 70 //------------------------------ begin__spline(const spline__AttributeData & attributeData)71 bool GeometryLoader::begin__spline(const spline__AttributeData & attributeData) 72 { 73 mSplineLoader = new SplineLoader(this, mGeometryId, mGeometryName); 74 setPartLoader(mSplineLoader); 75 switch (this->getParserImpl()->getCOLLADAVersion()) 76 { 77 case COLLADA_14: 78 { 79 SplineLoader14* splineloader14 = new SplineLoader14( mSplineLoader ); 80 mSplineLoader->setParserImpl(splineloader14); 81 setParser(splineloader14); 82 break; 83 } 84 case COLLADA_15: 85 { 86 return false; 87 break; 88 } 89 default: 90 break; 91 } 92 return true; 93 } 94 95 //------------------------------ end__geometry()96 bool GeometryLoader::end__geometry() 97 { 98 bool success = true; 99 COLLADAFW::Mesh * mesh = mMeshLoader ? mMeshLoader->getMesh() : 0; 100 if ( ((getObjectFlags() & Loader::GEOMETRY_FLAG) != 0) && mesh ) 101 { 102 success |= writer()->writeGeometry(mesh); 103 } 104 105 COLLADAFW::Spline * spline = mSplineLoader ? mSplineLoader->getSpline() : 0; 106 if ( ((getObjectFlags() & Loader::GEOMETRY_FLAG) != 0) && spline ) 107 { 108 success |= writer()->writeGeometry(spline); 109 } 110 111 finish(); 112 moveUpInSidTree(); 113 return success; 114 } 115 116 } // namespace COLLADAFW 117