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

#include <maya/MSimple.h>
#include <maya/MLightLinks.h>
#include <maya/M3dView.h>
#include <maya/MDagPathArray.h>
#include <maya/MSelectionList.h>
#include <maya/MDagPath.h>
#include <maya/MGlobal.h>
#include <maya/MStringArray.h>
#include <maya/MItSelectionList.h>
#include <math.h>

DeclareSimpleCommand( listLightLinks, PLUGIN_COMPANY, "4.5");

MStatus listLightLinks::doIt( const MArgList& args )
//      Description:
//              Implements the MEL listLightLinks command.  After parsing the 
//              information stored in Maya's light linker nodes, it examines
//              the first item on the selection list.  If the item is an object,
//              then the command selects all lights that are linked to that object.
//              If the item is a light, then it will select all of the objects 
//              that are linked to that light.
//      Arguments:
//              args - The argument list that was passes to the command from MEL.
//                         This command takes no arguments.
//      Return Value:
//              MS::kSuccess - command succeeded
//              MS::kFailure - command failed (returning this value will cause the 
//                     MEL script that is being run to terminate unless the
//                     error is caught using a "catch" statement.
        MStatus stat = MS::kSuccess;

        // Parse the links on the current scene's light linker node(s).
        MLightLinks lightLink;
        bool parseStatus;
        parseStatus = lightLink.parseLinks(MObject::kNullObj);

        if( !parseStatus )
                setResult( "Error parsing light links\n" );
                return MS::kFailure;

        // Get the first object (or component) on the selection list.
        MSelectionList selectList;
    MDagPath dagPath;
    MObject component;
        MGlobal::getActiveSelectionList( selectList );
        selectList.getDagPath( 0, dagPath, component );

        // Selection list to store entities linked to the selected light or
        // object.
    MSelectionList newSelection;

        // Stores the command result.
        char resultString[512];

        // If the object is a surface, we'll select all the lights linked to it.
        // If the object is a light, we'll select all the objects linked to it.
        if( dagPath.hasFn( MFn::kLight ) )
                // Select objects linked to this light.
                MSelectionList objects;
                lightLink.getLinkedObjects( dagPath, objects );

                newSelection.merge( objects );

                sprintf( resultString, "Selecting objects linked to light %s", 
                                 dagPath.fullPathName().asChar() );

                // Select lights linked to this object.
                MDagPathArray lights;
                lightLink.getLinkedLights( dagPath, component, lights );

                for( unsigned int j = 0; j < lights.length(); j++ )
                        const MDagPath& path = lights[j];
                        newSelection.add( path );

                sprintf( resultString, "Selecting lights linked to object %s", 
                                 dagPath.fullPathName().asChar() );


        // Select the linked entities.
        MGlobal::setActiveSelectionList( newSelection );

        setResult( resultString );
        return stat;

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