Maya API How-To #03 | ||
| ||
How can I get a MStringArray of a particular type of DAG/DG node?Here's an example of how I've extend the MStringArray class to populate itself with the names of DAG/DG nodes matching a specified type. //------------------------------------------------------------ // MStringArrayHelper declaration //------------------------------------------------------------ class MStringArrayHelper: public MStringArray { public: enum PathType { kFullPathName = 0, kPartialPathName }; MStringArrayHelper(void); virtual ~MStringArrayHelper(void); MStatus getDGOfType( MFn::Type ); MStatus getDAGOfType( MFn::Type, MStringArrayHelper::PathType pathType ); }; //------------------------------------------------------------ // getDGOfType // // Fills MStringArray with array of node names matching given type. // // * My findings suggested that the MGlobal::getSelection* functions // could ONLY for DAG nodes and not DG nodes. Thus, I've created // this function as a member of a MStringArray-derived class to // return a string array. //------------------------------------------------------------ MStatus MStringArrayHelper::getDGOfType( MFn::Type type ) { MObject dNode; MFnDependencyNode dNodeFn; for ( MItDependencyNodes listIter( type ); !listIter.isDone(); listIter.next() ) { dNode = listIter.item(); dNodeFn.setObject( dNode ); if ( MS::kSuccess != append( dNodeFn.name() ) ) return MS::kFailure; } return MS::kSuccess; } //------------------------------------------------------------ // getDAGOfType // // Fills MSelectionList with array of node names of given type. // // My findings suggest that the MGlobal::getSelection* functions // can be used ONLY for DAG nodes, and not DG nodes. For DG node // support, see MStringArrayHelper::getDGOfType() //------------------------------------------------------------ MStatus MStringArrayHelper::getDAGOfType( MFn::Type type, MStringArrayHelper::PathType pathType ) { MObject dNode; MFnDagNode nodeFn; for ( MItDag listIter( MItDag::kDepthFirst, type ); !listIter.isDone(); listIter.next() ) { switch ( pathType ) { case kFullPathName: { if ( MS::kSuccess != append( listIter.fullPathName() ) ) return MS::kFailure; } case kPartialPathName: { if ( MS::kSuccess != append( listIter.partialPathName() ) ) return MS::kFailure; } } } return MS::kSuccess; } Related How-To's | ||
Copyright ©2005 by Bryan Ewert, maya@ewertb.com Maya is a Registered Trademark of Alias |