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

#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;
        clearResult();

        // 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 );
        dagPath.extendToShape();

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

        // 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;
                objects.clear();
                lightLink.getLinkedObjects( dagPath, objects );

                newSelection.merge( objects );

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

        }
        else
        {
                // Select lights linked to this object.
                //
                MDagPathArray lights;
                lights.clear();
                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® 2009 © 1997-2008 Autodesk, Inc. All rights reserved. Generated with doxygen 1.5.6