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

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