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