//- // ========================================================================== // Copyright (C) 1995 - 2005 Alias Systems Corp. and/or its licensors. All // rights reserved. // // The coded instructions, statements, computer programs, and/or related // material (collectively the "Data") in these files are provided by Alias // Systems Corp. ("Alias") and/or its licensors for the exclusive use of the // Customer (as defined in the Alias Software License Agreement that // accompanies this Alias software). Such Customer has the right to use, // modify, and incorporate the Data into other products and to distribute such // products for use by end-users. // // THE DATA IS PROVIDED "AS IS". ALIAS HEREBY DISCLAIMS ALL WARRANTIES // RELATING TO THE DATA, INCLUDING, WITHOUT LIMITATION, ANY AND ALL EXPRESS OR // IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND/OR FITNESS FOR A // PARTICULAR PURPOSE. IN NO EVENT SHALL ALIAS BE LIABLE FOR ANY DAMAGES // WHATSOEVER, WHETHER DIRECT, INDIRECT, SPECIAL, OR PUNITIVE, WHETHER IN AN // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, OR IN EQUITY, // ARISING OUT OF ACCESS TO, USE OF, OR RELIANCE UPON THE DATA. // ========================================================================== //+ #include #include #include #include #include #include #include #include #include DeclareSimpleCommand( getAttrAffects, "Alias", "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; }