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

//
//  Description:
//      - doubles the focal length for the camera of the
//        current 3d view
//

#include <maya/MIOStream.h>

#include <maya/MPxCommand.h>
#include <maya/MFnPlugin.h>
#include <maya/MString.h>
#include <maya/MArgList.h>

#include <maya/MFnCamera.h>
#include <maya/MGlobal.h>
#include <maya/M3dView.h>
#include <maya/MDagPath.h>


class zoomCamera : public MPxCommand
{
public:
                                        zoomCamera() {};
        virtual                 ~zoomCamera(); 

        MStatus                 doIt( const MArgList& args );
        MStatus                 redoIt( );
        MStatus                 undoIt( );
        bool                    isUndoable( ) const;
        
        static void*    creator();

private:
        // This is data that is necessary to redo/undo the command.
        //
        MDagPath                camera;
};

zoomCamera::~zoomCamera() {}

void* zoomCamera::creator()
{
        return new zoomCamera();
}

MStatus zoomCamera::doIt( const MArgList& )
//
// Description
//     Gets the zoomCamera for the current 3d view and calls
//     the redoIt command to set the focal length.
//
// Note
//     The doit method should collect whatever information is
//     required to do the task, and store it in local class data.
//     It should finally call redoIt to make the command happen.
//
{

        // Get the current zoomCamera
        //
        MStatus stat = M3dView::active3dView().getCamera( camera );     
        
        if ( MS::kSuccess == stat ) {
                redoIt();
        }
        else {
                cerr << "Error getting camera" << endl;
        }
        return stat;
}

MStatus zoomCamera::redoIt()
//
// Description
//     Doubles the focal length of current camera
//
// Note
//     The redoIt method should do the actual work, based on the
//     internal data only.
//
{
        MFnCamera fnCamera( camera );
        double fl = fnCamera.focalLength();
        fnCamera.setFocalLength( fl * 2.0 );
        return MS::kSuccess;
}

MStatus zoomCamera::undoIt()
//
// Description
//     the undo routine
//
// Note
//     The undoIt method should undo the actual work, based on the
//     internal data only.
//
{
        MFnCamera fnCamera( camera );
        double fl = fnCamera.focalLength();
        fnCamera.setFocalLength( fl / 2.0 );
        return MS::kSuccess;
}

bool zoomCamera::isUndoable() const
//
// Description
//     Make the command eligable for undo.
//
{ 
        return true;
}


//
// The following routines are used to register/unregister
// the command we are creating within Maya
//
MStatus initializePlugin( MObject obj )
{
        MStatus   status;
        MFnPlugin plugin( obj, PLUGIN_COMPANY, "3.0", "Any");

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

        return status;
}

MStatus uninitializePlugin( MObject obj)
{
        MStatus   status;
        MFnPlugin plugin( obj );

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

        return status;
}

Autodesk® Maya® 2009 © 1997-2008 Autodesk, Inc. All rights reserved. Generated with doxygen 1.5.6