nodeInfoCmd.cpp
#include <maya/MIOStream.h>
#include <maya/MFnPlugin.h>
#include <maya/MString.h>
#include <maya/MStringResource.h>
#include <maya/MStringResourceId.h>
#include <maya/MArgList.h>
#include <maya/MPxCommand.h>
#include <maya/MSyntax.h>
#include <maya/MArgDatabase.h>
#include <maya/MGlobal.h>
#include <maya/MDagPath.h>
#include <maya/MItSelectionList.h>
#include <maya/MSelectionList.h>
#include <maya/MFnDependencyNode.h>
#include <maya/MPlugArray.h>
#include <maya/MPlug.h>
#define kQuietFlag              "-q"
#define kQuietFlagLong  "-quiet"
#define rPluginId  "nodeInfoCmd"
#define rConnFound MStringResourceId(rPluginId, "rConnFound", \
                                                                        "Number of connections found: ^1s")
#define rPlugInfo  MStringResourceId(rPluginId, "rPlugInfo", \
                                                                        "  Plug Info: ")
#define rPlugDestOf MStringResourceId(rPluginId, "rPlugDestOf",\
                                                                        "    This plug is a dest of: ")
static MStatus registerMStringResources(void)
{
        MStringResource::registerString(rConnFound);
        MStringResource::registerString(rPlugInfo);
        MStringResource::registerString(rPlugDestOf);
        return MS::kSuccess;
}
class nodeInfo : public MPxCommand
{
public:
                                        nodeInfo();
        virtual                 ~nodeInfo(); 
        MStatus                 doIt( const MArgList& args );
        static MSyntax  newSyntax();
        static void*    creator();
private:
        void                    printType( const MObject& node, const MString& prefix );
        MStatus                 parseArgs( const MArgList& args );
        bool                    quiet;
};
nodeInfo::nodeInfo()
        : quiet (false)
{}
nodeInfo::~nodeInfo() {}
void* nodeInfo::creator()
{
        return new nodeInfo;
}
MSyntax nodeInfo::newSyntax()
{
         MSyntax syntax;
         syntax.addFlag(kQuietFlag, kQuietFlagLong);
         return syntax;
}
MStatus nodeInfo::parseArgs( const MArgList& args )
{
        MStatus                 stat;
        MArgDatabase    argData(syntax(), args);
        if (argData.isFlagSet(kQuietFlag))
                quiet = true;
        return stat;
}
MStatus nodeInfo::doIt( const MArgList& args )
{
        MStatus stat;                   
        MObject dependNode;             
        stat = parseArgs ( args );
        if ( !stat )
                return stat;
        
        
        MSelectionList slist;
        MGlobal::getActiveSelectionList( slist );
        MItSelectionList iter( slist, MFn::kInvalid,&stat );
        
        
        for ( ; !iter.isDone(); iter.next() ) 
        {
                
                
                stat = iter.getDependNode( dependNode );
                if ( !stat ) {
                        stat.perror("getDependNode");
                        continue;
                }
                
                
                MFnDependencyNode fnDependNode( dependNode );
                
                
                MString nodeName = fnDependNode.name();
                nodeName += ": ";
                printType( dependNode, nodeName );
                
                
                MPlugArray connectedPlugs;
                stat = fnDependNode.getConnections( connectedPlugs );
                int numberOfPlugs = connectedPlugs.length();
                if ( !quiet )
                {
                        MString msgFmt = MStringResource::getString(rConnFound, stat);
                        MString msg;
                        MString arg;
                        arg.set(numberOfPlugs);
                        msg.format(msgFmt, arg);
                        cerr << msg << endl;
                }
                
                
                
                MString pInfoMsg = MStringResource::getString(rPlugInfo, stat);
                for ( int i=0; i<numberOfPlugs; i++ ) 
                {
                        MPlug plug = connectedPlugs[i];
                        MString pinfo = plug.info();
                        if ( !quiet )
                        {
                                cerr << pInfoMsg << pinfo << endl;
                        }
                        
                        
                        
                        MPlugArray array;
                        plug.connectedTo( array, true, false );
                        MString dInfoMsg = MStringResource::getString(rPlugDestOf, stat);
                        for ( unsigned int j=0; j<array.length(); j++ )
                        {
                                MObject mnode = array[j].node();
                                printType( mnode, dInfoMsg );
                        }
                }
        }
        return MS::kSuccess;
}
void nodeInfo::printType( const MObject& node, const MString& prefix )
{
        if ( !quiet)
                cerr << prefix << node.apiTypeStr() << endl;
}
MStatus initializePlugin( MObject obj )
{
        MStatus   status;
        MFnPlugin plugin( obj, PLUGIN_COMPANY, "3.0", "Any");
        status = plugin.registerUIStrings(registerMStringResources, "nodeInfoCmdInitStrings");
        if (!status) {
                status.perror("registerUIStrings");
                return status;
        }
        status = plugin.registerCommand( "nodeInfo",
                                                                          nodeInfo::creator,
                                                                          nodeInfo::newSyntax);
        if (!status) {
                status.perror("registerCommand");
                return status;
        }
        return status;
}
MStatus uninitializePlugin( MObject obj)
{
        MStatus   status;
        MFnPlugin plugin( obj );
        status = plugin.deregisterCommand( "nodeInfo" );
        if (!status) {
                status.perror("deregisterCommand");
                return status;
        }
        return status;
}