polyX3DExporter/polyX3DExporter.cpp

polyX3DExporter/polyX3DExporter.cpp
//-
// ==========================================================================
// Copyright 1995,2006,2008 Autodesk, Inc. All rights reserved.
//
// Use of this software is subject to the terms of the Autodesk
// license agreement provided at the time of installation or download,
// or which otherwise accompanies this software in either electronic
// or hard copy form.
// ==========================================================================
//+
//
//
//polyX3DExporter.cpp
#include <maya/MIOStream.h>
#include <maya/MDagPath.h>
#include <maya/MStatus.h>
#include <maya/MGlobal.h>
#include <maya/MFnPlugin.h>
#include "polyX3DExporter.h"
#include "polyX3DWriter.h"
//Macros
//
//XML header related info
#define XMLVERSION 1.0
#define XMLENCODING "UTF-8"
polyX3DExporter::~polyX3DExporter()
{
//Summary: destructor method - does nothing
//
}
void* polyX3DExporter::creator()
//Summary: allows Maya to allocate an instance of this object
{
return new polyX3DExporter();
}
MString polyX3DExporter::defaultExtension () const
//Summary: called when Maya needs to know the preferred extension of this file
// format. For example, if the user tries to save a file called
// "test" using the Save As dialog, Maya will call this method and
// actually save it as "test.x3d". Note that the period should *not*
// be included in the extension.
//Returns: "x3d"
{
return MString("x3d");
}
MStatus initializePlugin(MObject obj)
//Summary: registers the commands, tools, devices, and so on, defined by the
// plug-in with Maya
//Returns: MStatus::kSuccess if the registration was successful;
// MStatus::kFailure otherwise
{
MStatus status;
MFnPlugin plugin(obj, PLUGIN_COMPANY, "4.5", "Any");
// Register the translator with the system
//
status = plugin.registerFileTranslator("X3D",
"",
polyX3DExporter::creator,
"",
"option1=1",
true);
if (!status) {
status.perror("registerFileTranslator");
return status;
}
return status;
}
MStatus uninitializePlugin(MObject obj)
//Summary: deregisters the commands, tools, devices, and so on, defined by the
// plug-in
//Returns: MStatus::kSuccess if the deregistration was successful;
// MStatus::kFailure otherwise
{
MStatus status;
MFnPlugin plugin( obj );
status = plugin.deregisterFileTranslator("X3D");
if (!status) {
status.perror("deregisterFileTranslator");
return status;
}
return status;
}
void polyX3DExporter::writeHeader(ostream& os)
//Summary: outputs the required opening X3D tags
//Args : os - an output stream to write to
{
//output required tags: XML, X3D, and Scene
//
os << "<?xml version=\"" << XMLVERSION
<< "\" encoding=\"" << XMLENCODING
<< "\"?>\n"
<< "<!DOCTYPE X3D PUBLIC \"http://www.web3D.org/TaskGroups/x3d/translation/x3d-compact.dtd\" "
<< "\"/www.web3d.org/TaskGroups/x3d/translation/x3d-compact.dtd\">\n"
<< "<X3D>\n"
<< "\t<Scene>\n";
}
void polyX3DExporter::writeFooter(ostream& os)
//Summary: outputs the required closing X3D tags
//Args : os - an output stream to write to
{
os << "\t</Scene>\n"
<< "</X3D>\n";
}
polyWriter* polyX3DExporter::createPolyWriter(const MDagPath dagPath, MStatus& status)
//Summary: creates a polyWriter for the X3D export file type
//Args : dagPath - the current polygon dag path
// status - will be set to MStatus::kSuccess if the polyWriter was
// created successfully; MStatus::kFailure otherwise
//Returns: pointer to the new polyWriter object
{
return new polyX3DWriter(dagPath, status);
}