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

# geometryCacheConverter.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.
    // ==========================================================================
    //+

    //
    // File Name: geometryCacheConverter.cpp
    //
    // Description :
    //      Converts the specified geometry cache files to a specified format.
    //
    //  Usage :
    //      convertGeometryCache -toAscii -file fileName1 -file fileName2 ..
    //
    //      Where "fileName1" and "fileName2" are the string paths to the geometry
    //      cache files.
    //

    // Project includes
    //
    #include <geometryCacheFile.h>

    // Maya includes
    //
    #include <maya/MSyntax.h>
    #include <maya/MPxCommand.h>
    #include <maya/MGlobal.h>
    #include <maya/MArgList.h>
    #include <maya/MArgDatabase.h>
    #include <maya/MFnPlugin.h>

    #define LFLAG_TOASCII "-toAscii"
    #define SFLAG_TOASCII "-ta"

    #define LFLAG_FILE "-file"
    #define SFLAG_FILE "-f"

    class convertGeometryCache : public MPxCommand
    {
    public:
        // Constructor / Destructor methods
        //
                        convertGeometryCache();
        virtual         ~convertGeometryCache();

        // Creator method
        //
        static void*    creator();

        // Syntax methods
        //
        virtual bool        hasSyntax();
        static MSyntax      cmdSyntax();

        // Do It method
        //
        virtual MStatus     doIt( const MArgList& args );
    };

    //
    // Methods
    //

    convertGeometryCache::convertGeometryCache()

    //
    // Description : ( public method )
    //      Constructor
    //
    {
    }

    convertGeometryCache::~convertGeometryCache()

    //
    // Description : ( public method )
    //      Destructor
    //
    {
    }

    void* convertGeometryCache::creator()
    //
    // Description : ( public method )
    //      Creates and returns an instance of this class
    //
    {
        return new convertGeometryCache();
    }

    bool convertGeometryCache::hasSyntax()
    //
    // Description : ( public method )
    //      Specifies whether or not the command has a syntax object
    //
    {
        return true;
    }

    MSyntax convertGeometryCache::cmdSyntax()
    //
    // Description : ( public method )
    //      Creates a syntax object
    //
    {
        MSyntax syntax;
        syntax.addFlag( SFLAG_TOASCII, LFLAG_TOASCII, MSyntax::kNoArg );
        syntax.addFlag( SFLAG_FILE, LFLAG_FILE, MSyntax::kString );
        syntax.makeFlagMultiUse( SFLAG_FILE );
        syntax.enableQuery( false );
        syntax.enableEdit( false );

        return syntax;
    }

    MStatus convertGeometryCache::doIt( const MArgList& args )
    //
    // Description : ( public method )
    //      Converts the specified files to the specified conversion format
    //
    {
        MStatus status = MS::kSuccess;

        MArgDatabase argDb( syntax(), args, &status );
        if( !status ) return status;

        bool isToAscii = argDb.isFlagSet( SFLAG_TOASCII );
        bool hasFile = argDb.isFlagSet( SFLAG_FILE );
        if( !isToAscii || !hasFile )
        {
            MGlobal::displayError(
                "Specify at least one file and format to convert to." );
            return status;
        }

        // Create an MIffFile to read our cache files
        //
        MIffFile iffFilePtr;

        // Iterate through all the files specified
        //
        uint numUses = argDb.numberOfFlagUses( SFLAG_FILE );
        for( uint i = 0; i < numUses; i++ )
        {
            MArgList argList;
            status = argDb.getFlagArgumentList( SFLAG_FILE, i, argList );
            if( !status ) return status;

            MString name = argList.asString( 0, &status );
            if( !status ) return status;

            // Create a geometryCacheFile object from the current file path
            //
            geometryCacheFile cacheFile( name, &iffFilePtr);

            // Read the geometry cache file
            //
            bool readStatus = cacheFile.readCacheFiles();

            if( !readStatus ) {
                // If the read failed, report the file name that failed
                //
                MGlobal::displayError( "Failed in reading file \"" + name + "\"" );

                // Skip the conversion process
                //
                continue;
            }

            // Convert the geometry cache file to the specified format
            //
            if( isToAscii ) {
                // Convert to Ascii
                //
                bool convertStatus = cacheFile.convertToAscii();

                if( !convertStatus )
                {
                    // If the convert failed, report the file name that failed
                    //
                    MGlobal::displayError( "Failed in converting file \"" +
                                            name +
                                            "\" to ASCII");
                }
            }

            // Insert other file format conversions here
            //
        }

        return status;
    }

    MStatus initializePlugin( MObject obj )
    //
    // Description : ( public method )
    //      Initializes the plugin
    //
    {
        MStatus   status;
        MFnPlugin plugin( obj, "Autodesk", "8.0", "Any");

        status = plugin.registerCommand( "convertGeometryCache",
                                            convertGeometryCache::creator,
                                            convertGeometryCache::cmdSyntax );
        if (!status) {
            status.perror("registerCommand");
            return status;
        }

        return status;
    }

    MStatus uninitializePlugin( MObject obj)
    //
    // Description : ( public method )
    //      Un-initializes the plugin
    //
    {
        MStatus   status;
        MFnPlugin plugin( obj );

        status = plugin.deregisterCommand( "convertGeometryCache" );
        if (!status) {
            status.perror("deregisterCommand");
            return status;
        }

        return status;
    }