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

//
// Adds a dynamic attribute to selected dependency nodes.
// Dynamic attributes can be used as blind data.
//
// Usage: Load this plugin.
//        Select an object in Maya, and execute the MEL command
//                blindShortData.  To see the new attribute, bring up the
//                Attribute Editor window and look under "Extras" tab.
//

#include <maya/MIOStream.h>

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

#include <maya/MPxCommand.h>

#include <maya/MGlobal.h>
#include <maya/MItSelectionList.h>
#include <maya/MSelectionList.h>

#include <maya/MFnDependencyNode.h>
#include <maya/MFnNumericAttribute.h>

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

        MStatus                 doIt( const MArgList& args );
        virtual MStatus redoIt();
        static void*    creator();
};

blindShortData::~blindShortData() {}

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

MStatus blindShortData::doIt( const MArgList& )
{
        MStatus stat = redoIt();
        return stat;
}

MStatus blindShortData::redoIt()
//     This method performs the action of the command.
//     
//     Iterate over all selected items and for each attach a new
//              dynamic attribute. 
{
        MStatus stat;                   // Status code
        MObject dependNode;             // Selected dependency node

        // Create a selection list iterator
        //
        MSelectionList slist;
        MGlobal::getActiveSelectionList( slist );
        MItSelectionList iter( slist, MFn::kInvalid, &stat );

        // Iterate over all selected dependency nodes
        //
        for ( ; !iter.isDone(); iter.next() ) 
        {
                // Get the selected dependency node and create
                // a function set for it
                //
                if ( MS::kSuccess != iter.getDependNode( dependNode ) ) {
                        cerr << "Error getting the dependency node" << endl;
                        continue;
                }
                MFnDependencyNode fnDN( dependNode, &stat );
                if ( MS::kSuccess != stat ) {
                        cerr << "Error creating MFnDependencyNode" << endl;
                        continue;
                }

                // Create a new attribute to use as out blind data
                //
                MFnNumericAttribute fnAttr;
                const MString fullName( "blindData" );
                const MString briefName( "bd" );
                double attrDefault = 99;
                MObject newAttr = fnAttr.create(        fullName, briefName, 
                                                                                        MFnNumericData::kShort, 
                                                                                        attrDefault, &stat );
                if ( MS::kSuccess != stat ) {
                        cerr << "Error creating new attribute" << endl;
                        continue;
                }

                // Now add the new attribute to this dependency node
                //
                stat = fnDN.addAttribute(newAttr,MFnDependencyNode::kLocalDynamicAttr);
                if ( MS::kSuccess != stat ) {
                        cerr << "Error adding dynamic attribute" << endl;
                }

        }

        return MS::kSuccess;
}


//
// 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( "blindShortData",
                                                                         blindShortData::creator );
        if (!status) {
                status.perror("registerCommand");
                return status;
        }

        return status;
}

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

        status = plugin.deregisterCommand( "blindShortData" );
        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