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