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 "COLLADASaxFWLLibraryKinematicsScenesLoader.h"
13 #include "COLLADASaxFWLFileLoader.h"
14 
15 
16 namespace COLLADASaxFWL
17 {
18 
19 	//------------------------------
LibraryKinematicsScenesLoader(IFilePartLoader * callingFilePartLoader)20 	LibraryKinematicsScenesLoader::LibraryKinematicsScenesLoader( IFilePartLoader* callingFilePartLoader )
21 		: FilePartLoader(callingFilePartLoader)
22 		, mCurrentKinematicsScene(0)
23 		, mInstanceArticulatedSystemLoader()
24 	{}
25 
26 
27     //------------------------------
~LibraryKinematicsScenesLoader()28 	LibraryKinematicsScenesLoader::~LibraryKinematicsScenesLoader()
29 	{
30 	}
31 
32 	//------------------------------
end__library_kinematics_scenes()33 	bool LibraryKinematicsScenesLoader::end__library_kinematics_scenes()
34 	{
35 		moveUpInSidTree();
36 		finish();
37 		return true;
38 	}
39 
40 	//------------------------------
begin__kinematics_scene(const kinematics_scene__AttributeData & attributeData)41 	bool LibraryKinematicsScenesLoader::begin__kinematics_scene( const kinematics_scene__AttributeData& attributeData )
42 	{
43 		COLLADABU::URI uri(getFileUri());
44 		if ( attributeData.id )
45 		{
46 			uri.setFragment( attributeData.id );
47 		}
48 
49 		const char* name = 0;
50 		if ( attributeData.name )
51 		{
52 			name = attributeData.name;
53 		}
54 		else if ( attributeData.id )
55 		{
56 			name = attributeData.id;
57 		}
58 
59 		mCurrentKinematicsScene = new KinematicsScene(uri, name);
60 		addToSidTree(attributeData.id, 0);
61 		return true;
62 	}
63 
64 	//------------------------------
end__kinematics_scene()65 	bool LibraryKinematicsScenesLoader::end__kinematics_scene()
66 	{
67 		getFileLoader()->addKinematicsScene( mCurrentKinematicsScene );
68 		mCurrentKinematicsScene = 0;
69 		moveUpInSidTree();
70 		return true;
71 	}
72 
73 	//------------------------------
begin__instance_articulated_system(const instance_articulated_system__AttributeData & attributeData)74 	bool LibraryKinematicsScenesLoader::begin__instance_articulated_system( const instance_articulated_system__AttributeData& attributeData )
75 	{
76 		COLLADABU::URI absoluteUrl(getFileUri(), attributeData.url.getURIString());
77 
78 		KinematicsInstanceArticulatedSystem* instanceArticulatedSystem = new KinematicsInstanceArticulatedSystem(absoluteUrl);
79 		mInstanceArticulatedSystemLoader.setInstanceArticulatedSystem(instanceArticulatedSystem);
80 		return true;
81 	}
82 
83 	//------------------------------
end__instance_articulated_system()84 	bool LibraryKinematicsScenesLoader::end__instance_articulated_system()
85 	{
86 		mCurrentKinematicsScene->addInstanceArticulatedSystem(mInstanceArticulatedSystemLoader.getInstanceArticulatedSystem());
87 		return true;
88 	}
89 
90 	//------------------------------
begin__bind____kinematics_bind_type(const bind____kinematics_bind_type__AttributeData & attributeData)91 	bool LibraryKinematicsScenesLoader::begin__bind____kinematics_bind_type( const bind____kinematics_bind_type__AttributeData& attributeData )
92 	{
93 		return mInstanceArticulatedSystemLoader.begin__bind____kinematics_bind_type(attributeData);
94 	}
95 
96 	//------------------------------
end__bind____kinematics_bind_type()97 	bool LibraryKinematicsScenesLoader::end__bind____kinematics_bind_type()
98 	{
99 		return mInstanceArticulatedSystemLoader.end__bind____kinematics_bind_type();
100 	}
101 
102 	//------------------------------
begin__param____kinematics_param_type(const param____kinematics_param_type__AttributeData & attributeData)103 	bool LibraryKinematicsScenesLoader::begin__param____kinematics_param_type( const param____kinematics_param_type__AttributeData& attributeData )
104 	{
105 		return mInstanceArticulatedSystemLoader.begin__param____kinematics_param_type( attributeData );
106 	}
107 
108 	//------------------------------
end__param____kinematics_param_type()109 	bool LibraryKinematicsScenesLoader::end__param____kinematics_param_type()
110 	{
111 		return mInstanceArticulatedSystemLoader.end__param____kinematics_param_type();
112 	}
113 
114 	//------------------------------
begin__instance_kinematics_model(const instance_kinematics_model__AttributeData & attributeData)115 	bool LibraryKinematicsScenesLoader::begin__instance_kinematics_model( const instance_kinematics_model__AttributeData& attributeData )
116 	{
117 		KinematicsInstanceKinematicsModels& instanceKinematicsModels = mCurrentKinematicsScene->getKinematicsInstanceKinematicsModels();
118 		COLLADABU::URI absoluteUrl(getFileUri(), attributeData.url.getURIString());
119 		instanceKinematicsModels.push_back(KinematicsInstanceKinematicsModel(absoluteUrl));
120 		KinematicsInstanceKinematicsModel * instanceKinematicsModel = &instanceKinematicsModels.back();
121 		addToSidTree( 0, attributeData.sid, instanceKinematicsModel);
122 		mInstanceKinematicsModelLoader.setCurrentInstanceKinematicsModel(instanceKinematicsModel);
123 		return true;
124 	}
125 
126 	//------------------------------
end__instance_kinematics_model()127 	bool LibraryKinematicsScenesLoader::end__instance_kinematics_model()
128 	{
129 		moveUpInSidTree();
130 		return true;
131 	}
132 
133 	//------------------------------
begin__newparam____kinematics_newparam_type(const newparam____kinematics_newparam_type__AttributeData & attributeData)134 	bool LibraryKinematicsScenesLoader::begin__newparam____kinematics_newparam_type( const newparam____kinematics_newparam_type__AttributeData& attributeData )
135 	{
136 		mValueElementParentType = VALUE_ELEMENT_NEWPARAM;
137 		return mInstanceKinematicsModelLoader.begin__newparam____kinematics_newparam_type(attributeData);
138 	}
139 
140 	//------------------------------
end__newparam____kinematics_newparam_type()141 	bool LibraryKinematicsScenesLoader::end__newparam____kinematics_newparam_type()
142 	{
143 		mValueElementParentType = VALUE_ELEMENT_NONE;
144 		return mInstanceKinematicsModelLoader.end__newparam____kinematics_newparam_type();
145 	}
146 
147 	//-----------------------------------------------------------------
begin__float()148 	bool LibraryKinematicsScenesLoader::begin__float()
149 	{
150 		if ( mValueElementParentType == VALUE_ELEMENT_NEWPARAM )
151 		{
152             return mInstanceKinematicsModelLoader.begin__float();
153 		}
154 		return true;
155 	}
156 
157 	//-----------------------------------------------------------------
end__float()158 	bool LibraryKinematicsScenesLoader::end__float()
159 	{
160 		return mInstanceKinematicsModelLoader.end__float();
161 	}
162 
163 	//-----------------------------------------------------------------
data__float(float value)164 	bool LibraryKinematicsScenesLoader::data__float( float value )
165 	{
166 		if ( mValueElementParentType == VALUE_ELEMENT_NEWPARAM )
167 		{
168             mInstanceKinematicsModelLoader.data__float(value);
169 		}
170 		return true;
171 	}
172 
173 	//-----------------------------------------------------------------
begin__int()174 	bool LibraryKinematicsScenesLoader::begin__int()
175 	{
176 		if ( mValueElementParentType == VALUE_ELEMENT_NEWPARAM )
177 		{
178             mInstanceKinematicsModelLoader.begin__int();
179 		}
180 		return true;
181 	}
182 
183 	//-----------------------------------------------------------------
end__int()184 	bool LibraryKinematicsScenesLoader::end__int()
185 	{
186 		mInstanceKinematicsModelLoader.end__int();
187 		return true;
188 	}
189 
190 	//-----------------------------------------------------------------
data__int(int value)191 	bool LibraryKinematicsScenesLoader::data__int( int value )
192 	{
193 		if ( mValueElementParentType == VALUE_ELEMENT_NEWPARAM )
194 		{
195             mInstanceKinematicsModelLoader.data__int(value);
196 		}
197 		return true;
198 	}
199 
200 	//-----------------------------------------------------------------
begin__bool()201 	bool LibraryKinematicsScenesLoader::begin__bool()
202 	{
203 		if ( mValueElementParentType == VALUE_ELEMENT_NEWPARAM )
204 		{
205             mInstanceKinematicsModelLoader.begin__bool();
206 		}
207 		return true;
208 	}
209 
210 	//-----------------------------------------------------------------
end__bool()211 	bool LibraryKinematicsScenesLoader::end__bool()
212 	{
213 		mInstanceKinematicsModelLoader.end__bool();
214 		return true;
215 	}
216 
217 	//-----------------------------------------------------------------
data__bool(bool value)218 	bool LibraryKinematicsScenesLoader::data__bool( bool value )
219 	{
220 		if ( mValueElementParentType == VALUE_ELEMENT_NEWPARAM )
221 		{
222             mInstanceKinematicsModelLoader.data__bool(value);
223 		}
224 		return true;
225 	}
226 
227 	//-----------------------------------------------------------------
begin__SIDREF()228 	bool LibraryKinematicsScenesLoader::begin__SIDREF()
229 	{
230 		if ( mValueElementParentType == VALUE_ELEMENT_NEWPARAM )
231 		{
232             mInstanceKinematicsModelLoader.begin__SIDREF();
233 		}
234 		return true;
235 	}
236 
237 	//-----------------------------------------------------------------
end__SIDREF()238 	bool LibraryKinematicsScenesLoader::end__SIDREF()
239 	{
240 		if ( mValueElementParentType == VALUE_ELEMENT_NEWPARAM )
241 		{
242             mInstanceKinematicsModelLoader.end__SIDREF();
243 		}
244 		return true;
245 	}
246 
247 	//-----------------------------------------------------------------
data__SIDREF(const ParserChar * value,size_t length)248 	bool LibraryKinematicsScenesLoader::data__SIDREF( const ParserChar* value, size_t length )
249 	{
250 		mInstanceKinematicsModelLoader.data__SIDREF(value, length);
251 		return true;
252 	}
253 
254 
255 } // namespace COLLADASaxFWL
256