int matNum;
StMaterial OutMaterial;
for ( matNum = 0; matNum < OutModel.INFO.CountMaterials; matNum++ )
{
DtMtlGetNameByID( matNum, &OutMaterial.MaterialName);
DtMtlGetAllClrbyID( matNum,0,
&OutMaterial.Ambient.Red ,&OutMaterial.Ambient.Green,&OutMaterial.Ambient.Blue,
&OutMaterial.Diffuse.Red, &OutMaterial.Diffuse.Green,&OutMaterial.Diffuse.Blue,
&OutMaterial.Specular.Red, &OutMaterial.Specular.Green,&OutMaterial.Specular.Blue,
&OutMaterial.Emmision.Red, &OutMaterial.Emmision.Green,&OutMaterial.Emmision.Blue,
&OutMaterial.Shiness, &OutMaterial.Transparency);
DtTextureGetName( OutMaterial.MaterialName, &OutMaterial.TextureName);
WriteChar(hFile,OutMaterial.MaterialName);
int TextureType=MTL_TYPE_NONE;
if ( OutMaterial.TextureName )
{
WriteChar(hFile,OutMaterial.TextureName);
OutMaterial.TexturePath=NULL;
DtTextureGetFileName( OutMaterial.MaterialName, &OutMaterial.TexturePath );
char NewPath[1024];
int TextureType=0;
if (OutMaterial.TexturePath!=NULL&&OutMaterial.TexturePath[0]!=0)
{
TextureType=MTL_TYPE_NORMAL;
write(hFile,&TextureType,sizeof(int));
strcpy(NewPath,stPathDirectory);
strcat(NewPath,"\\");
strcat(NewPath,PathFindFileName(OutMaterial.TexturePath));
CopyFile(ConvertToNormalPath(OutMaterial.TexturePath),NewPath,false);
WriteChar(hFile,PathFindFileName(OutMaterial.TexturePath));
}
else
{
TextureType=MTL_TYPE_LIGHTMAP;
write(hFile,&TextureType,sizeof(int));
MString command;
command = "listConnections -d off -s on " + MString( OutMaterial.TextureName );
MStatus status;
MStringArray connections;
MGlobal::executeCommand(command, connections);
if ( status == MS::kSuccess )
{
strcpy(OutMaterial.LightMapTextureName, (char*)connections[0].asChar());
MStringArray path;
command = "getAttr "+MString(OutMaterial.LightMapTextureName)+".fileTextureName";
MGlobal::executeCommand(command, path);
strcpy(OutMaterial.LightMapTexturePath, (char*)path[0].asChar());
strcpy(NewPath,stPathDirectory);
strcat(NewPath,"\\");
strcat(NewPath,PathFindFileName(OutMaterial.LightMapTexturePath));
CopyFile(ConvertToNormalPath(OutMaterial.LightMapTexturePath),NewPath,false);
WriteChar(hFile, PathFindFileName(OutMaterial.LightMapTextureName));
WriteChar(hFile, PathFindFileName(OutMaterial.LightMapTexturePath));
strcpy(OutMaterial.LightMapTextureName, (char*)connections[1].asChar());
command = "getAttr "+MString(OutMaterial.LightMapTextureName)+".fileTextureName";
MGlobal::executeCommand(command, path);
strcpy(OutMaterial.LightMapTexturePath, (char*)path[0].asChar());
strcpy(NewPath,stPathDirectory);
strcat(NewPath,"\\");
strcat(NewPath,PathFindFileName(OutMaterial.LightMapTexturePath));
CopyFile(ConvertToNormalPath(OutMaterial.LightMapTexturePath),NewPath,false);
WriteChar(hFile, PathFindFileName(OutMaterial.LightMapTextureName));
WriteChar(hFile, PathFindFileName(OutMaterial.LightMapTexturePath));
}
}
}
else
{
TextureType=MTL_TYPE_NONE;
write(hFile,&TextureType,sizeof(int));
}
WriteColor(hFile,OutMaterial.Ambient);
WriteColor(hFile,OutMaterial.Diffuse);
WriteColor(hFile,OutMaterial.Specular);
WriteColor(hFile,OutMaterial.Emmision);
write(hFile,&OutMaterial.Shiness,sizeof(float));
write(hFile,&OutMaterial.Transparency,sizeof(float));
}