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
19
#include "COLLADAMaxStableHeaders.h"
21
#include "COLLADAMaxMaterialExporter.h"
22
#include "COLLADASWNode.h"
24
#include "COLLADAMaxExportSceneGraph.h"
32
// The information from this file comes from the MaxSDK sample: /material/multi.cpp.
34
namespace MultiMaterial
36
const Class_ID classID ( MULTI_CLASS_ID, 0 );
38
const unsigned int PBLOCK_REF = 0;
39
const unsigned int MTL_REF = 1;
41
// multi_params param IDs
52
//---------------------------------------------------------------
53
MaterialExporter::MaterialExporter ( COLLADASW::StreamWriter * streamWriter, DocumentExporter * documentExporter )
54
: COLLADASW::LibraryMaterials ( streamWriter ),
55
mDocumentExporter ( documentExporter )
59
//---------------------------------------------------------------
60
void MaterialExporter::doExport()
63
// set mWireFrameColorEffectList
64
mWireFrameColorEffectList = & ( mDocumentExporter->getEffectExporter() ->getWireFrameColorEffectMap() );
66
// export all wire frame color materials
68
for ( WireFrameColorEffectList::const_iterator it = mWireFrameColorEffectList->begin(); it != mWireFrameColorEffectList->end(); ++it )
70
const String & effectURL = EffectExporter::getEffectId ( *it );
71
String materialId = getMaterialIdFromEffectId ( effectURL );
73
openMaterial ( materialId, materialId );
74
addInstanceEffect ( "#" + effectURL );
78
// export all ordinary materials
80
for ( ExportedEffectIdAndNameList::const_iterator it = mExportedEffectIdAndNameList.begin(); it != mExportedEffectIdAndNameList.end(); ++it )
82
const EffectIdAndName & effectIdAndName= *it;
83
const String & effectURL = effectIdAndName.effectId;
84
String materialId = getMaterialIdFromEffectId ( effectURL );
86
const String & effectName = effectIdAndName.effectName;
87
openMaterial ( materialId, COLLADABU::Utils::checkNCName(effectName) );
88
addInstanceEffect ( "#" + effectURL );
96
//---------------------------------------------------------------
97
String MaterialExporter::getMaterialIdFromEffectId ( const String & effectId )
99
return effectId + MATERIAL_ID_SUFFIX;
103
//---------------------------------------------------------------
104
Mtl* MaterialExporter::GetSubMaterialById ( Mtl* mtl, int materialId )
106
if ( !mtl->IsMultiMtl() )
109
IParamBlock2* subMaterialParameters = ( IParamBlock2* ) mtl->GetReference ( MultiMaterial::PBLOCK_REF );
111
if ( !subMaterialParameters )
112
return mtl->GetSubMtl ( materialId );
114
// check if we ever reach this point
117
int subMaterialCount = mtl->NumSubMtls();
119
for ( int subMaterialIndex = 0; subMaterialIndex < subMaterialCount; ++subMaterialIndex )
121
int subMatId = subMaterialParameters->GetInt ( MultiMaterial::multi_ids,0 , subMaterialIndex );
123
if ( subMatId == materialId )
125
Mtl * material = mtl->GetSubMtl ( subMaterialIndex );