//- // ========================================================================== // Copyright (C) 1995 - 2006 Autodesk, Inc. and/or its licensors. All // rights reserved. // // The coded instructions, statements, computer programs, and/or related // material (collectively the "Data") in these files contain unpublished // information proprietary to Autodesk, Inc. ("Autodesk") and/or its // licensors, which is protected by U.S. and Canadian federal copyright // law and by international treaties. // // The Data is provided for use exclusively by You. You have the right // to use, modify, and incorporate this Data into other products for // purposes authorized by the Autodesk software license agreement, // without fee. // // The copyright notices in the Software and this entire statement, // including the above license grant, this restriction and the // following disclaimer, must be included in all copies of the // Software, in whole or in part, and all derivative works of // the Software, unless such copies or derivative works are solely // in the form of machine-executable object code generated by a // source language processor. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. // AUTODESK DOES NOT MAKE AND HEREBY DISCLAIMS ANY EXPRESS OR IMPLIED // WARRANTIES INCLUDING, BUT NOT LIMITED TO, THE WARRANTIES OF // NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR // PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE, OR // TRADE PRACTICE. IN NO EVENT WILL AUTODESK AND/OR ITS LICENSORS // BE LIABLE FOR ANY LOST REVENUES, DATA, OR PROFITS, OR SPECIAL, // DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES, EVEN IF AUTODESK // AND/OR ITS LICENSORS HAS BEEN ADVISED OF THE POSSIBILITY // OR PROBABILITY OF SUCH DAMAGES. // // ========================================================================== //+ #include #include #include #include #include #include #include #include #include DeclareSimpleCommand( getAttrAffects, PLUGIN_COMPANY, "3.0"); MStatus getAttrAffects::doIt( const MArgList& args ) { MStatus stat; MSelectionList list; if ( args.length() > 0 ) { // Arg list is > 0 so use objects that were passes in // MString argStr; unsigned last = args.length(); for ( unsigned i = 0; i < last; i++ ) { // Attempt to find all of the objects matched // by the string and add them to the list // args.get( i, argStr ); list.add( argStr ); } } else { // Get the geometry list from what is currently selected in the // model // MGlobal::getActiveSelectionList( list ); } MItSelectionList iter( list ); // Iterate over all selected dependency nodes // for ( ; !iter.isDone(); iter.next() ) { MObject object; stat = iter.getDependNode( object ); if ( !stat ) { stat.perror("getDependNode"); continue; } // Create a function set for the dependency node // MFnDependencyNode node( object ); cout << node.name() << ":\n"; unsigned i, numAttributes = node.attributeCount(); for (i = 0; i < numAttributes; ++i) { MObject attrObject = node.attribute(i); MFnAttribute attr; unsigned j, affectedLen, affectedByLen; attr.setObject (attrObject); // Get all attributes that this one affects MObjectArray affectedAttributes; node.getAffectedAttributes( attrObject, affectedAttributes ); affectedLen = affectedAttributes.length(); // Get all attributes that affect this one MObjectArray affectedByAttributes; node.getAffectedByAttributes( attrObject, affectedByAttributes ); affectedByLen = affectedByAttributes.length(); if ( affectedLen > 0 || affectedByLen > 0 ) { cout << " " << attr.name() << ":\n"; // List all attributes that are affected by the current one if ( affectedLen > 0 ) { cout << " Affects(" << affectedLen << "):"; for (j = 0; j < affectedLen; ++j ) { attr.setObject ( affectedAttributes[j] ); cout << " " << attr.name(); } cout << endl; } // List all attributes that affect the current one if ( affectedByLen > 0 ) { cout << " AffectedBy(" << affectedByLen << "):"; for (j = 0; j < affectedByLen; ++j ) { attr.setObject ( affectedByAttributes[j] ); cout << " " << attr.name(); } cout << endl; } } } } return MS::kSuccess; }