#pragma warning( disable : 4311 4312 )
#include "TextureConveyor.h"
#include <QtGui/QFileDialog>
#include <QtGui/QMessageBox>
#include <QtCore/QDir>
MB_PLUGIN( "TextureConveyor", "Exports Texture Layers", "Autodesk", "http://www.mudbox3d.com", TextureConveyor::Initializer );
TextureConveyor::TextureConveyor( void )
{
}
void TextureConveyor::ExportTextureChannels( void )
{
QFileDialog dialog(Kernel()->MainWindow(), "Texture Export...");
dialog.setFileMode(QFileDialog::Directory);
dialog.setOption(QFileDialog::ShowDirsOnly, true);
dialog.exec();
QDir directory = dialog.directory();
if (!directory.exists())
{
if (QMessageBox::question(Kernel()->MainWindow(), tr("Question..."), tr("Directory does not exist. Do you want to create it?")) == QMessageBox::Yes)
{
if (!directory.mkpath(directory.absolutePath()))
{
QMessageBox::information(Kernel()->MainWindow(), tr("Information..."), tr("Failed to create directory %1.").arg(directory.absolutePath()));
return;
}
}
else
{
QMessageBox::information(Kernel()->MainWindow(), tr("Information..."), tr("No files have been written."));
return;
}
}
Kernel()->WaitCursorStart();
for(Node *pNode = Node::First(); pNode; pNode = pNode->Next())
{
if(pNode->IsKindOf( Material::StaticClass()))
{
Material *pMaterial = dynamic_cast<Material *>(pNode);
if (!pMaterial)
continue;
for( int jj = 0; jj < pMaterial->TextureCount(); jj++ )
{
TexturePool *pTexturePool = pMaterial->Texture(jj);
if (pTexturePool)
{
int iNumTiles = pTexturePool->TileCount();
for (int ii = 0; ii < iNumTiles; ii++)
{
QString filename = QString("%1/%2.%3.tile%4.png").arg(directory.absolutePath()).arg(pMaterial->Name()).arg(pTexturePool->Name()).arg(ii+1);
Texture *pTexture = pTexturePool->Tile(ii);
if (pTexture && pTexture->Width() && pTexture->Height())
{
Image *pImage = CreateInstance<Image>();
pTexture->CopyTo(pImage);
pImage->Save(filename);
delete pImage;
}
}
}
}
}
}
Kernel()->WaitCursorEnd();
}
void TextureConveyor::Initializer( void )
{
Kernel()->AddCallbackMenuItem( Kernel::menuFile, QString::null, tr("Export Textures..."), ExportTextureChannels);
}