- Main Page
- Related Pages
- Modules
- Classes
- Examples

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