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);
}