#include <maya/MFileObject.h>
#include <maya/MFnDependencyNode.h>
#include <maya/MFnPlugin.h>
#include <maya/MItDependencyNodes.h>
#include <maya/MPxFileTranslator.h>
#include <maya/MColorManagementUtilities.h>
#include <maya/MString.h>
#include <fstream>
#include <ios>
{
public:
FileAccessMode mode
) override;
static void* creator();
static void setPluginName(
const MString& name);
protected:
void writeColorSpaceForNodes(std::fstream& f);
void writeColorTransformData(std::fstream& f);
void writeOutputTransformId(std::fstream& f);
};
MString colorTransformDataTranslator::fFileVersion =
"1.0";
MString colorTransformDataTranslator::fExtension =
"ctd";
MString colorTransformDataTranslator::fPluginName =
"";
MString colorTransformDataTranslator::fTranslatorName =
"Maya Color Management Data";
inline MString colorTransformDataTranslator::defaultExtension()
const
{ return fExtension; }
inline bool colorTransformDataTranslator::haveReadMethod() const
{ return false; }
inline bool colorTransformDataTranslator::haveWriteMethod() const
{ return true; }
inline void colorTransformDataTranslator::setPluginName(
const MString& name)
{ fPluginName = name; }
inline MString colorTransformDataTranslator::translatorName()
{ return fTranslatorName; }
void* colorTransformDataTranslator::creator()
{
return new colorTransformDataTranslator();
}
MStatus colorTransformDataTranslator::writer(
)
{
if ((mode != kSaveAccessMode) && (mode != kExportAccessMode))
return MS::kNotImplemented;
if (!output.good()) return MS::kNotFound;
writeColorSpaceForNodes(output);
writeOutputTransformId(output);
writeColorTransformData(output);
output.close();
return MS::kSuccess;
}
const MString colorTransformDataTranslator::getInputColorSpace(
const MObject&
object)
{
if(!object.isNull() &&
{
if(status)
{
static const char* const colorSpaceStr = "colorSpace";
MPlug plug = texNode.findPlug(colorSpaceStr,
true, &status);
{
}
}
}
return inputColorSpace;
}
void colorTransformDataTranslator::writeColorSpaceForNodes(std::fstream& f)
{
f << "====================== Nodes with color space attribute =======================\n";
{
{
MString inputColorSpace = getInputColorSpace(node);
f <<
"Found node with colorspace " << inputColorSpace.
asUTF8();
inputColorSpace, transformId))
{
f <<
", its corresponding transform id: " << transformId.
asUTF8() << std::endl;
}
else
{
f << ", no corresponding transform id found.\n";
}
}
}
}
void colorTransformDataTranslator::writeColorTransformData(std::fstream& f)
{
f << "============================ Color Transform Data =============================\n";
{
f <<
"Data block size: " << colorTransformData.
getSize() << std::endl;
f.write(static_cast<const char*>(colorTransformData.
getData()), colorTransformData.
getSize());
}
else
{
f << "Color management functionality is not available\n";
}
f << "\n===============================================================================\n";
}
void colorTransformDataTranslator::writeOutputTransformId(std::fstream& f)
{
f << "============================ Output Transform Id =============================\n";
{
f <<
"Output transform id: " << transformId.
asUTF8() << std::endl;
}
else
{
f << "No output transform id found.\n";
}
}
{
MFnPlugin plugin(obj, PLUGIN_COMPANY,
"1.0",
"Any");
colorTransformDataTranslator::setPluginName(plugin.name());
plugin.registerFileTranslator(
colorTransformDataTranslator::translatorName(),
NULL,
colorTransformDataTranslator::creator,
NULL,
NULL,
false
);
return MS::kSuccess;
}
{
plugin.deregisterFileTranslator(colorTransformDataTranslator::translatorName());
return MS::kSuccess;
}