2
Copyright (c) 2008-2009 NetAllied Systems GmbH
4
This file is part of COLLADAMax.
6
Portions of the code are:
7
Copyright (c) 2005-2007 Feeling Software Inc.
8
Copyright (c) 2005-2007 Sony Computer Entertainment America
10
Based on the 3dsMax COLLADASW Tools:
11
Copyright (c) 2005-2006 Autodesk Media Entertainment
13
Licensed under the MIT Open Source License,
14
for details please see LICENSE file or the website
15
http://www.opensource.org/licenses/mit-license.php
18
#include "COLLADAMaxStableHeaders.h"
19
#include "COLLADAMaxImporterBase.h"
21
#include "COLLADAFWUniqueId.h"
22
#include "COLLADAFWAnimationList.h"
23
#include "COLLADAFWVisualScene.h"
29
const String ImporterBase::EMPTY_STRING = "";
31
ImporterBase::ImporterBase( DocumentImporter* documentImporter)
32
: mDocumentImporter(documentImporter)
36
//------------------------------
37
ImporterBase::~ImporterBase()
41
//------------------------------
42
void* ImporterBase::createMaxObject( SClass_ID superClassId, Class_ID classId )
44
return mDocumentImporter->createMaxObject( superClassId, classId );
47
//------------------------------
48
Interface* ImporterBase::getMaxInterface()
50
return mDocumentImporter->getMaxInterface();
53
//------------------------------
54
ImpInterface* ImporterBase::getMaxImportInterface()
56
return mDocumentImporter->getMaxImportInterface();
59
//------------------------------
60
void ImporterBase::printMessage( const String& message )
62
mDocumentImporter->printMessage(message);
65
//------------------------------
66
double ImporterBase::getElapsedTime()const
68
return mDocumentImporter->getElapsedTime();
71
//------------------------------
72
DummyObject* ImporterBase::getDummyObject()
74
return mDocumentImporter->getDummyObject();
77
//------------------------------
78
void ImporterBase::addUniqueIdObjectINodePair( const COLLADAFW::UniqueId& uniqueId, INode* node )
80
mDocumentImporter->getUniqueIdObjectINodeMap().insert(std::pair<COLLADAFW::UniqueId, INode*>(uniqueId, node) );
83
//------------------------------
84
void ImporterBase::addUniqueIdReferencingImpNodePair( const COLLADAFW::UniqueId& uniqueId, ImpNode* node )
86
mDocumentImporter->getUniqueIdReferencingImpNodeMap().insert(std::pair<COLLADAFW::UniqueId, ImpNode*>(uniqueId, node) );
89
//------------------------------
90
void ImporterBase::removeUniqueIdReferencingImpNodePair( const COLLADAFW::UniqueId& uniqueId, ImpNode* node )
92
DocumentImporter::UniqueIdImpNodeMultiMap& uniqueIdReferencingImpNodeMap = mDocumentImporter->getUniqueIdReferencingImpNodeMap();
94
DocumentImporter::UniqueIdImpNodeMultiMap::iterator rangeBegin = uniqueIdReferencingImpNodeMap.lower_bound(uniqueId);
95
DocumentImporter::UniqueIdImpNodeMultiMap::iterator rangeEnd = uniqueIdReferencingImpNodeMap.upper_bound(uniqueId);
97
for (DocumentImporter::UniqueIdImpNodeMultiMap::iterator it = rangeBegin; it != rangeEnd; ++it)
99
if ( it->second == node )
101
uniqueIdReferencingImpNodeMap.erase(it);
107
//------------------------------
108
void ImporterBase::getObjectINodesByUniqueId( const COLLADAFW::UniqueId& uniqueId, COLLADAMax::INodeList& nodelist )
110
const DocumentImporter::UniqueIdINodeMultiMap& uniqueIdINodeMap = mDocumentImporter->getUniqueIdObjectINodeMap();
112
DocumentImporter::UniqueIdINodeMultiMap::const_iterator rangeBegin = uniqueIdINodeMap.lower_bound(uniqueId);
113
DocumentImporter::UniqueIdINodeMultiMap::const_iterator rangeEnd = uniqueIdINodeMap.upper_bound(uniqueId);
115
for (DocumentImporter::UniqueIdINodeMultiMap::const_iterator it = rangeBegin; it != rangeEnd; ++it)
116
nodelist.push_back(it->second);
119
//------------------------------
120
DocumentImporter::UniqueIdINodeMultiMapConstIterator ImporterBase::getUniqueIdObjectINodesBegin() const
122
const DocumentImporter::UniqueIdINodeMultiMap& uniqueIdINodeMap = mDocumentImporter->getUniqueIdObjectINodeMap();
123
return uniqueIdINodeMap.begin();
126
//------------------------------
127
DocumentImporter::UniqueIdINodeMultiMapConstIterator ImporterBase::getUniqueIdObjectINodesEnd() const
129
const DocumentImporter::UniqueIdINodeMultiMap& uniqueIdINodeMap = mDocumentImporter->getUniqueIdObjectINodeMap();
130
return uniqueIdINodeMap.end();
133
//------------------------------
134
ImpNode* ImporterBase::getReferencingImpNodesByUniqueId( const COLLADAFW::UniqueId& uniqueId )
136
const DocumentImporter::UniqueIdImpNodeMultiMap& uniqueIdReferencingImpNodeMap = mDocumentImporter->getUniqueIdReferencingImpNodeMap();
138
DocumentImporter::UniqueIdImpNodeMultiMap::const_iterator it = uniqueIdReferencingImpNodeMap.find(uniqueId);
139
if ( it == uniqueIdReferencingImpNodeMap.end() )
146
//------------------------------
147
void ImporterBase::addUniqueIdObjectPair( const COLLADAFW::UniqueId& uniqueId, Object* object )
149
mDocumentImporter->getUniqueIdObjectMap()[uniqueId] = object;
153
//------------------------------
154
void ImporterBase::addUniqueIdINodePair( const COLLADAFW::UniqueId& uniqueId, INode* iNode )
156
mDocumentImporter->getUniqueIdINodeMap()[uniqueId] = iNode;
159
//------------------------------
160
void ImporterBase::addObjectINodeUniqueIdPair( INode* iNode, const COLLADAFW::UniqueId& uniqueId )
162
mDocumentImporter->getObjectINodeUniqueIdMap()[iNode] = uniqueId;
165
//------------------------------
166
void ImporterBase::addUniqueIdFWNodePair( const COLLADAFW::UniqueId& uniqueId, const COLLADAFW::Node* node )
168
mDocumentImporter->getUniqueIdFWNodeMap()[uniqueId] = node;
171
//------------------------------
172
void ImporterBase::addUniqueIdFWMaterialPair( const COLLADAFW::UniqueId& uniqueId, const COLLADAFW::Material& material )
174
mDocumentImporter->getUniqueIdFWMaterialMap().insert(std::pair<COLLADAFW::UniqueId, COLLADAFW::Material>(uniqueId, material));
177
//------------------------------
178
void ImporterBase::addUniqueIdFWEffectPair( const COLLADAFW::UniqueId& uniqueId, const COLLADAFW::Effect& effect )
180
mDocumentImporter->getUniqueIdFWEffectMap().insert(std::pair<COLLADAFW::UniqueId, COLLADAFW::Effect>(uniqueId, effect));;
183
//------------------------------
184
void ImporterBase::addUniqueIdFWImagePair( const COLLADAFW::UniqueId& uniqueId, const COLLADAFW::Image& Image )
186
mDocumentImporter->getUniqueIdFWImageMap().insert(std::pair<COLLADAFW::UniqueId, COLLADAFW::Image>(uniqueId, Image));;
189
//------------------------------
190
DocumentImporter::NodeMaterialBindingsPair& ImporterBase::createAndAddNodeMaterialBindingsPair( INode* node )
192
DocumentImporter::NodeMaterialBindingsPair newPair;
193
newPair.maxNode = node;
194
DocumentImporter::NodeMaterialBindingsList& list = mDocumentImporter->getNodeMaterialBindingsList();
195
list.push_back(newPair);
196
return *list.rbegin();
199
//------------------------------
200
void ImporterBase::addLibraryNodes( const COLLADAFW::LibraryNodes* libraryNodes )
202
mDocumentImporter->getLibraryNodesList().push_back(libraryNodes);
205
//------------------------------
206
void ImporterBase::addVisualScene( const COLLADAFW::VisualScene* visualScene )
208
DocumentImporter::UniqueIdVisualSceneMap& map = mDocumentImporter->getUniqueIdVisualSceneMap();
209
map[ visualScene->getUniqueId() ] = visualScene;
212
//------------------------------
213
void ImporterBase::addClonedINodeOriginalINodePair( INode* clonedNode, INode* originalNode )
215
DocumentImporter::INodeINodePairList& inodeInodePairList = mDocumentImporter->getClonedINodeOriginalINodePairList();
216
inodeInodePairList.push_back(std::pair<INode*, INode*>(clonedNode, originalNode));
219
//------------------------------
220
void ImporterBase::addObjectObjectNamePair( Object* object, const String& name )
222
DocumentImporter::ObjectObjectNameMap& objectObjectNameMap = mDocumentImporter->getObjectObjectNameMap();
223
objectObjectNameMap.insert(std::pair<Object*, String>(object, name));
226
//------------------------------
227
void ImporterBase::addVertexColorObjects(const COLLADAFW::UniqueId& vertexColorObjectuniqueId)
229
DocumentImporter::UniqueIdList& vertexColorObjects = mDocumentImporter->getVertexColorObjects();
230
vertexColorObjects.push_back(vertexColorObjectuniqueId);
233
//------------------------------
234
void ImporterBase::addMaxControllerToAnimationUniqueId( const COLLADAFW::UniqueId& animationUniqueId, Control* maxController )
236
DocumentImporter::UniqueIdMaxControllerListMap& map = mDocumentImporter->getAnimationUniqueIdMaxControllerListMap();
237
map[ animationUniqueId ].push_back( maxController );
240
//------------------------------
241
void ImporterBase::addAnimationList( const COLLADAFW::AnimationList& animationList )
243
DocumentImporter::UniqueIdAnimationListMap& map = mDocumentImporter->getUniqueIdAnimationListMap();
244
map[ animationList.getUniqueId() ] = new COLLADAFW::AnimationList( animationList );
247
//------------------------------
248
Object* ImporterBase::getObjectByUniqueId( const COLLADAFW::UniqueId& uniqueId )
250
const DocumentImporter::UniqueIdObjectMap& uniqueIdObjectMap = mDocumentImporter->getUniqueIdObjectMap();
251
DocumentImporter::UniqueIdObjectMap::const_iterator it = uniqueIdObjectMap.find(uniqueId);
252
if ( it == uniqueIdObjectMap.end() )
258
//------------------------------
259
INode* ImporterBase::getINodeByUniqueId( const COLLADAFW::UniqueId& uniqueId )
261
const DocumentImporter::UniqueIdINodeMap& uniqueIdINodeMap = mDocumentImporter->getUniqueIdINodeMap();
262
DocumentImporter::UniqueIdINodeMap::const_iterator it = uniqueIdINodeMap.find(uniqueId);
263
if ( it == uniqueIdINodeMap.end() )
269
//------------------------------
270
const COLLADAFW::UniqueId& ImporterBase::getUniqueIdByObjectINode( INode* iNode )
272
const DocumentImporter::ObjectINodeUniqueIdMap& objectINodeUniqueIdMap = mDocumentImporter->getObjectINodeUniqueIdMap();
273
DocumentImporter::ObjectINodeUniqueIdMap::const_iterator it = objectINodeUniqueIdMap.find(iNode);
274
if ( it == objectINodeUniqueIdMap.end() )
275
return COLLADAFW::UniqueId::INVALID;
281
//------------------------------
282
const COLLADAFW::Node* ImporterBase::getFWNodeByUniqueId( const COLLADAFW::UniqueId& uniqueId )
284
const DocumentImporter::UniqueIdFWNodeMap& uniqueIdFWNodeMap = mDocumentImporter->getUniqueIdFWNodeMap();
285
DocumentImporter::UniqueIdFWNodeMap::const_iterator it = uniqueIdFWNodeMap.find(uniqueId);
286
if ( it == uniqueIdFWNodeMap.end() )
292
//------------------------------
293
const DocumentImporter::UniqueIdFWNodeMap& ImporterBase::getUniqueIdFWNodeMap( )
295
return mDocumentImporter->getUniqueIdFWNodeMap();
298
//------------------------------
299
const COLLADAFW::Material* ImporterBase::getFWMaterialByUniqueId( const COLLADAFW::UniqueId& uniqueId )
301
const DocumentImporter::UniqueIdFWMaterialMap& uniqueIdFWMaterialMap = mDocumentImporter->getUniqueIdFWMaterialMap();
302
DocumentImporter::UniqueIdFWMaterialMap::const_iterator it = uniqueIdFWMaterialMap.find(uniqueId);
303
if ( it == uniqueIdFWMaterialMap.end() )
309
//------------------------------
310
const COLLADAFW::Effect* ImporterBase::getFWEffectByUniqueId( const COLLADAFW::UniqueId& uniqueId )
312
const DocumentImporter::UniqueIdFWEffectMap& uniqueIdFWEffectMap = mDocumentImporter->getUniqueIdFWEffectMap();
313
DocumentImporter::UniqueIdFWEffectMap::const_iterator it = uniqueIdFWEffectMap.find(uniqueId);
314
if ( it == uniqueIdFWEffectMap.end() )
320
//------------------------------
321
const EffectMaps* ImporterBase::getFWEffectMapsByUniqueId( const COLLADAFW::UniqueId& uniqueId )
323
const DocumentImporter::UniqueIdEffectMapsMap& uniqueIdEffectMapsMap = mDocumentImporter->getUniqueIdEffectMapsMap();
324
DocumentImporter::UniqueIdEffectMapsMap::const_iterator it = uniqueIdEffectMapsMap.find(uniqueId);
325
if ( it == uniqueIdEffectMapsMap.end() )
331
//------------------------------
332
const COLLADAFW::Image* ImporterBase::getFWImageByUniqueId( const COLLADAFW::UniqueId& uniqueId )
334
const DocumentImporter::UniqueIdFWImageMap& uniqueIdFWImageMap = mDocumentImporter->getUniqueIdFWImageMap();
335
DocumentImporter::UniqueIdFWImageMap::const_iterator it = uniqueIdFWImageMap.find(uniqueId);
336
if ( it == uniqueIdFWImageMap.end() )
342
//------------------------------
343
const DocumentImporter::NodeMaterialBindingsList& ImporterBase::getNodeMaterialBindings()
345
return mDocumentImporter->getNodeMaterialBindingsList();
348
//------------------------------
349
DocumentImporter::FWMaterialIdMaxMtlIdMap& ImporterBase::getMaterialIdMapByGeometryUniqueId( const COLLADAFW::UniqueId& uniqueId )
351
return mDocumentImporter->getGeometryMaterialIdMapMap()[uniqueId];
354
//------------------------------
355
DocumentImporter::SetMapChannelMap& ImporterBase::getSetMapChannelByGeometryUniqueId( const COLLADAFW::UniqueId& uniqueId )
357
return mDocumentImporter->getGeometrySetMapChannelMap()[uniqueId];
360
//------------------------------
361
const COLLADAFW::VisualScene* ImporterBase::getVisualSceneByUniqueId( const COLLADAFW::UniqueId& visualSceneUniqueId )
363
const DocumentImporter::UniqueIdVisualSceneMap& map = mDocumentImporter->getUniqueIdVisualSceneMap();
364
DocumentImporter::UniqueIdVisualSceneMap::const_iterator it = map.find( visualSceneUniqueId );
365
if ( it == map.end() )
375
//------------------------------
376
const DocumentImporter::INodeINodePairList& ImporterBase::getClonedINodeOriginalINodePairList()
378
return mDocumentImporter->getClonedINodeOriginalINodePairList();
381
//------------------------------
382
const String& ImporterBase::getObjectNameByObject( Object* object ) const
384
const DocumentImporter::ObjectObjectNameMap& objectObjectNameMap = mDocumentImporter->getObjectObjectNameMap();
385
DocumentImporter::ObjectObjectNameMap::const_iterator it = objectObjectNameMap.find(object);
386
if ( it == objectObjectNameMap.end() )
392
//------------------------------
393
const DocumentImporter::MaxControllerList& ImporterBase::getMaxControllerListByAnimationUniqueId( const COLLADAFW::UniqueId& animationUniqueId ) const
395
DocumentImporter::UniqueIdMaxControllerListMap& map = mDocumentImporter->getAnimationUniqueIdMaxControllerListMap();
396
return map[ animationUniqueId ];
399
//------------------------------
400
const COLLADAFW::AnimationList* ImporterBase::getAnimationListByUniqueId( const COLLADAFW::UniqueId& animationListUniqueId ) const
402
const DocumentImporter::UniqueIdAnimationListMap& map = mDocumentImporter->getUniqueIdAnimationListMap();
403
DocumentImporter::UniqueIdAnimationListMap::const_iterator it = map.find( animationListUniqueId );
404
if ( it == map.end() )
414
//------------------------------
415
void ImporterBase::addUniqueIdControllerPair( const COLLADAFW::UniqueId& controllerData, const COLLADAFW::Controller* controller )
417
mDocumentImporter->getUniqueIdControllerMap().insert(std::make_pair(controllerData, controller));
420
//------------------------------
421
void ImporterBase::addMorphController( const COLLADAFW::MorphController* morphController )
423
mDocumentImporter->getUniqueIdMorphControllerMap().insert(std::make_pair(morphController->getUniqueId(), morphController));
426
//------------------------------
427
const COLLADAFW::MorphController* ImporterBase::getMorphControllerByUniqueId( const COLLADAFW::UniqueId& morphControllerUniqueId ) const
429
const DocumentImporter::UniqueIdMorphControllerMap& map = mDocumentImporter->getUniqueIdMorphControllerMap();
430
DocumentImporter::UniqueIdMorphControllerMap::const_iterator it = map.find( morphControllerUniqueId );
431
if ( it == map.end() )
441
//------------------------------
442
void ImporterBase::addSkinController( const COLLADAFW::SkinController* skinController )
444
mDocumentImporter->getUniqueIdSkinControllerMap().insert(std::make_pair(skinController->getUniqueId(), skinController));
447
//------------------------------
448
const COLLADAFW::SkinController* ImporterBase::getSkinControllerByUniqueId( const COLLADAFW::UniqueId& skinControllerUniqueId ) const
450
const DocumentImporter::UniqueIdSkinControllerMap& map = mDocumentImporter->getUniqueIdSkinControllerMap();
451
DocumentImporter::UniqueIdSkinControllerMap::const_iterator it = map.find( skinControllerUniqueId );
452
if ( it == map.end() )
463
//------------------------------
464
const COLLADAFW::AnimationList* ImporterBase::getAnimationList( const COLLADAFW::Animatable* animatable )
471
const COLLADAFW::UniqueId& referencedAnimationListUniqueId = animatable->getAnimationList();
473
if ( !referencedAnimationListUniqueId.isValid() )
478
return getAnimationListByUniqueId( referencedAnimationListUniqueId );
481
//------------------------------
482
const DocumentImporter::UniqueIdList& ImporterBase::getVertexColorObjects()
484
return mDocumentImporter->getVertexColorObjects();
487
//---------------------------------------------------------------
488
void ImporterBase::Matrix4ToMaxMatrix3 ( Matrix3 & copy, const COLLADABU::Math::Matrix4& original )
491
column[ 0 ] = (float)original.getElement(0,0);
492
column[ 1 ] = (float)original.getElement(0,1);
493
column[ 2 ] = (float)original.getElement(0,2);
494
column[ 3 ] = convertSpaceUnit((float)original.getElement(0,3));
495
copy.SetColumn(0, column);
497
column[ 0 ] = (float)original.getElement(1,0);
498
column[ 1 ] = (float)original.getElement(1,1);
499
column[ 2 ] = (float)original.getElement(1,2);
500
column[ 3 ] = convertSpaceUnit((float)original.getElement(1,3));
501
copy.SetColumn(1, column);
503
column[ 0 ] = (float)original.getElement(2,0);
504
column[ 1 ] = (float)original.getElement(2,1);
505
column[ 2 ] = (float)original.getElement(2,2);
506
column[ 3 ] = convertSpaceUnit((float)original.getElement(2,3));
507
copy.SetColumn(2, column);
510
//------------------------------
511
float ImporterBase::convertSpaceUnit( float originalValue )
513
return mDocumentImporter->convertSpaceUnit(originalValue);
516
//------------------------------
517
const SkyLightParameters* ImporterBase::getSkyLightParametersByUniqueId( const COLLADAFW::UniqueId& uniqueId )
519
const DocumentImporter::UniqueIdSkyLightMap& map = mDocumentImporter->getUniqueIdSkyLightMap();
520
DocumentImporter::UniqueIdSkyLightMap::const_iterator it = map.find( uniqueId );
521
if ( it == map.end() )
531
//------------------------------
532
void ImporterBase::addUniqueIdSkyLightParametersPair( const COLLADAFW::UniqueId& lightUniqueId, const SkyLightParameters& skyLightParameters )
534
mDocumentImporter->getUniqueIdSkyLightMap()[lightUniqueId] = skyLightParameters;
537
//------------------------------
538
void ImporterBase::addUniqueIdEffectBumpMapParametersPair( const COLLADAFW::UniqueId& effectUniqueId, const BumpMap& bumpParameters )
540
mDocumentImporter->addUniqueIdEffectBumpMapParametersPair(effectUniqueId, bumpParameters);
543
} // namespace COLLADAMax